一、算法理论
在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优的三对角线方程组
简记为
求解
(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("输入%d个a值: ", n-1);
for (int i=1; i
scanf("%lf", &a[i]);
getchar();
printf("\n输入主对角线元素\n");
printf("输入%d个b值: ", n);
for (i=0; i
scanf("%lf", &b[i]);
getchar();
printf("\n输入上三角元素\n");
printf("输入%d个c值: ", 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(){ // y被f取代, 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格式