三 矩阵直接三角分解法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
矩阵直接三角分解法
1、实验目的:
求解方程组Ax=b
A=[1 2 -12 8; 5 4 7 -2; -3 7 9 5; 6 -12 -8 3], b=[27; 4; 11; 49]
2、实验步骤:
添加库函数
#include "stdafx.h"
#include "math.h"
3、代码:
#include "stdafx.h"
#include "math.h"
void main()
{
float x[4];
int i;
float a[4][5]={1,2,-12,8,27,5,4,7,-2,4,-3,7,9,5,11,6,-12,-8,3,49};
void DirectLU(float*,int,float[]);
DirectLU(a[0],4,x);
for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);
}
void DirectLU(float*u,int n,float x[])
{
int i,r,k;
for(r=0;r<=n-1;r++)
{
for(i=r;i<=n;i++)
for(k=0;k<=r-1;k++)
*(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i));
for(i=r+1;i<=n-1;i++)
{
for(k=0;k<=r-1;k++)
*(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));
*(u+i*(n+1)+r)/=*(u+r*(n+1)+r);
}
}
for(i=n-1;i>=0;i--)
{
for(r=n-1;r>=i+1;r--)
*(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];
x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));
}
}
4、运行结果:
5、总结:
熟悉了矩阵直接三角分解法的算法;For语句的功能可以很强大!