北京信息科技大学

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京信息科技大学

实验报告

实验项目线性方程组求解

班级通信1003班

姓名/学号李叶林2010010422

实验日期2011-12-29

成绩

一、 实验内容

利用杜利特尔分解法求解线性方程组

实验要求

要求

❖编程实现杜利特尔分解法

❖输出矩阵L,U,中间向量y,并输出方程组的解x

实验题3

求解方程组

12312312324326225

x x x x x x x x x ++=⎧⎪

++=⎨⎪++=⎩

二、 实验原理

j u 1j

a 1=n

j ,,2,1Λ=U 的第一行11

1

1u a l i i =n

i ,,3,2Λ=L 的第一列

------(1)------(2)

∑-=-=11

r k kj

rk rj rj u l a u n r ,,2,1Λ=n

r j ,,Λ=U 的第r 行------(3)(逐行算出)

rr

r k kr

ik ir ir u u l a l ∑-=-=

1

1

1,,2,1-=n r Λn

r i ,,1Λ+=L 的第r 列------(4)

(逐列算出)

称上述(1) ~ (4)式所表示的分解过程为Doolittle 分解

三、 程序

#include #include #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"); cout<<"L:"<

for(i=1;i<=N;i++)

{for(j=1;j<=N;j++)

cout<

cout<

cout<

cout<<"U:"<

for(i=1;i<=N;i++)

{for(j=1;j<=N;j++)

cout<

cout<

cout<

cout<<"方程组的解:"<

for(i=1;i<=N;i++)

cout<<"x"<

return 1;

}

四、实验结果

五、实验心得

了解了如何利用杜利特尔分解法求解线性方程组,编程过程中应细心,善于发现问题

相关文档
最新文档