⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.cpp

📁 追赶法是求解三对角方程组的一种方法
💻 CPP
字号:
#include<stdio.h>
#include<math.h>
double lzzg(double a[],double b[],double c[],double d[],int n);
void main()
{int n,i;
double a[10],b[10],c[10],d[10];
printf("Input n value:");                           /*n为n维向量*/
scanf("%d",&n);
printf("Now input the (a_i,c_i),i=1,2…,%d:\n",n-1);
for(i=0;i<=n-2;i++)  
scanf("%lf%lf",&a[i],&c[i]);
printf("Now input the (b_i,d_i),i=1,2…,%d:\n",n);
for(i=0;i<=n-1;i++)
scanf("%lf%lf",&b[i],&d[i]);
lzzg(a,b,c,d,n);
}
double lzzg(double a[],double b[],double c[],double d[],int n)
{int i;
double t;
if((fabs(b[0])<=fabs(c[0]))||fabs(c[0])<=0||fabs(b[n-1])<fabs(a[n-2])||fabs(a[n-2])<=0)
{printf("fail\n");
return 0;
}
for(i=1;i<=n-2;i++)
{if(fabs(b[i])<(fabs(a[i-1])+fabs(c[i]))||a[i-1]*c[i]==0)
{printf("fail\n");
return 0;
}
}                                          /*判断是否符合追赶法条件*/
c[0]=c[0]/b[0];
d[0]=d[0]/b[0];
for(i=1;i<=n-2;i++)
{t=b[i]-a[i-1]*c[i-1];
c[i]=c[i]/t;                               /*一次c[i]被覆盖c[i]->beita*/
d[i]=(d[i]-a[i-1]*d[i-1])/t;               /*一次d[i]被覆盖,d[i]->y[i]……*/
}                                          /*y[1]->y[2]->y[3]->……y[n]的过程为追的过程*/
d[n-1]=(d[n-1]-a[n-2]*d[n-2])/(b[n-1]-a[n-2]*c[n-2]);
for(i=n-2;i>=0;i--)
d[i]=d[i]-c[i]*d[i+1]; 
for(i=0;i<=n-1;i++)
printf("x(%d)=%e\n",i,d[i]);                   /*x[1]->x[2]->x[3]->……x[n]的过程为赶的过程*/
return 1;
}
/*追赶法用于解决对角占优的三对角线方程组AX=d,(1).Ly=d 求出y(2)Ux=y,求出x,追赶法计算公式中
不会出现中间结果数量级的巨大增长和舍入误差的严重累积*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -