追赶法(经典计算)

发布时间:2020-02-25 08:04:17   来源:文档文库   
字号:

一、算法理论

在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优的三对角线方程组

简记为.

求解等价于解两个三角形方程组:

.从而得到解三对角线方程组的追赶法公式:

(1) 计算的递推公式

(2)

(3)

我们将计算系数

将计算方程组的解

二、 算法框图

三、 算法程序

#include

#include

#include

#define N 20

double a[N], b[N], c[N-1], f[N], r[N];

int n;

void LUDecompose(); // LU分解

void backSubs(); // 回代

void main()

{

printf("请输入方程的维数n");

scanf("%d",&n);

getchar();

if(n>N||n<=0)

{

printf("由于该维数过于犀利, 导致程序退出!");

return;

}

printf("\n输入下三角元素\n");

printf("输入%da: ", n-1);

for (int i=1; i

scanf("%lf", &a[i]);

getchar();

printf("\n输入主对角线元素\n");

printf("输入%db: ", n);

for (i=0; i

scanf("%lf", &b[i]);

getchar();

printf("\n输入上三角元素\n");

printf("输入%dc: ", n-1);

for (i=0; i

scanf("%lf", &c[i]);

getchar();

printf("\n输入%d个方程组右端项: \n", n);

for (i=0; i

scanf("%lf", &f[i]);

getchar();

LUDecompose();

backSubs();

printf("\n线性方程组的解为: \n");

for (i=0; i

printf("x%d=%lf\n", i+1, f[i]);

}

void LUDecompose(){ //α被b取代, β被c取代, 以节省存储空间

c[0]=c[0]/b[0];

for(int i=1;i

r[i]=a[i];

b[i]=b[i]-r[i]*c[i-1];

c[i]=c[i]/b[i];

}

r[i]=a[i];

b[i]=b[i]-r[i]*c[i-1];

}

void backSubs(){ // yf取代, x也被f取代, 以节省存储空间

f[0]=f[0]/b[0];

for(int i=1; i

f[i]=(f[i]-r[i]*f[i-1])/b[i];

f[n-1]=f[n-1];

for(i=n-2;i>=0;i--)

f[i]=f[i]-c[i]*f[i+1];

}

四、 算法实现

例1.用该程序计算三对角线方程组

计算其方程组的解。

解:运行程序

(1) 显示出 请输入方程组的维数:n=5.,回车。

(2) 显示出 请输入下三角元素 输入4个a值:-1 -1 -1 -1,回车。

(3) 显示出 请输入主对角线元素 输入5个b值:2 2 2 2 2 ,回车。

(4) 显示出 请输入上三角元素 输入4个c值:-1 -1 -1 -1,回车。

(5) 显示出 请输入5个方程组右端顶:1 0 0 0 0,回车。

其解为

例2用该程序计算三对角线方程组

计算其方程组的解。

解:运行程序

(1)显示出 请输入方程组的维数:n=5.,回车。

(2)显示出 请输入下三角元素 输入4个a值:1 1 1 1,回车。

(3)显示出 请输入主对角线元素 输入5个b值:3 3 3 3 3 ,回车。

(4)显示出 请输入上三角元素 输入4个c值:1 1 1 1,回车。

(5)显示出 请输入5个方程组右端顶:1 1 0 0 0,回车。

其解为

本文来源:https://www.2haoxitong.net/k/doc/7a0d7dcde209581b6bd97f19227916888486b923.html

《追赶法(经典计算).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式