- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
杜立特分解法杜立特分解法
2013-2014(1)专业课程实践论文
题目:杜立特分解法
一、算法理论
阶线性方程组的系数矩阵非奇异且有分解式,其中为单位下三角矩阵,为上三角矩阵,即,当时,;,当时,,矩阵的这种分解方法为Doolittle的分解。
比较等号两边的第行和第列的元素,得。
因为,所以,,
从而当,,时,,从而,
于是就得到了计算LR分解的一般计算公式。
二、算法框图
三、算法程序
#includeiostream
#includestdlib.h
#define N 3
using namespace std;
int main()
{
double A[N+1][N+1]={{0,0,0,0},{0,2,1,1},{0,1,3,2},{0,1,2,2}};
double L[N+1][N+1]={0};
double U[N+1][N+1]={0};
double b[N+1]={0,4,6,5};
double y[N+1];
double x[N+1];
int i,j,k,p;
for(j=1;j=N;j++)
U[1][j]=A[1][j];
L[1][1]=1;
for(i=2;i=N;i++)
{L[i][1]=A[i][1]/U[1][1];
L[i][i]=1;
}
for(k=2;k=N;k++)
{ for(j=k;j=N;j++)
{double l=0;
for(p=1;p=k-1;p++)
l+=L[k][p]*U[p][j];
U[k][j]=A[k][j]-l;
}
for(i=k+1;i=N;i++)
{double l=0;
for(p=1;p=k-1;p++)
l+=L[i][p]*U[p][k];
L[i][k]=(A[i][k]-l)/U[k][k];
}
}
y[1]=b[1];
for(k=2;k=N;k++)
{ double l=0;
for(j=1;j=k-1;j++)
l+=L[k][j]*y[j];
y[k]=b[k]-l;
}
x[N]=y[N]/U[N][N];
for(k=N-1;k=1;k--)
{
double l=0;
for(j=k+1;j=N;j++)
l+=U[k][j]*x[j];
x[k]=(y[k]-l)/U[k][k];
}
printf(向量y为:);
for(i=1;i=N;i++)printf(%.1lf\t,y[i]);printf(\n);
coutL:endl;
for(i=1;i=N;i++)
{for(j=1;j=N;j++)
coutL[i][j]\t;
coutendl;}
coutendl;
coutU:endl;
for(i=1;i=N;i++)
{for(j=1;j=N;j++)
coutU[i][j]\t;
coutendl;}
coutendl;
cout方程组的解:endl;
for(i=1;i=N;i++)
coutxi=x[i]\t;
return 1;
}
四、算法实现
例1.用杜立特分解法,求解三元方程组。
解:
例2.用杜立特分解法,求解三元方程组
解:
开始
输入矩阵行数
输入矩阵A第各行元素
分解矩阵A得L
输入矩阵B第各行元素
分解矩阵A得R
求得Y
求得X
文档评论(0)