- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
列主元LU消去法报告
列主元LU消去法
实验报告
专业
班级
学号
姓名
实验内容和要求
用列主元LU消去法解线性方程组Ax=b,其中A是非奇异矩阵。
用编织出来的程序,求解线性方程组Ax=b
方程如下:
1-132-464-92 x1x2x2=141;
算法说明
LU分解算法步骤
for j=1 to n+1 //计算U的第一行元素
u1j=a1j
for i=2 to n //计算L的第一列元素
li1=ai1/u11
for k=2 to n
{ for j=kto n+1 //计算U的第k行元素
ukj=akj-q=1k-1lkquqj
For i=k+1 to n //计算L的第K列元素
lik=lik-q=1k-1liquqkuik
} //完成LU分解并计算出y
for k=n to 1 //解方程组Ux=y
xk=uik-q=1k-1liquqkuik
参数传递:方程组阶数,系数矩阵和常向量
for j=1 to n+1 //计算U的第1行元素
for i=2 to n //计算L的第1列元素
for k=2 to n
{ if 时
{ ,//列主元
for j=k+1 to n+1 //计算U的第k行元素
}
else //k=n,只有 不需选主元
for j=n to n+1 //计算U的第n行元素
for i=k+1 to n //计算L的第k列元素
} //完成LU分解并计算出y
for k=n to 1 //解方程组
返回方程组的解
源程序
#include stdio.h
#include stdlib.h
#define N 10
float getmx(float a[N][N], float x[N], int i, int n)
{
float mx = 0;
int r;
for(r=i+1; rn; r++)
{
mx += a[i][r] * x[r];
}
return mx;
}
float getmy(float a[N][N], float y[N], int i, int n)
{
float my = 0;
int r;
for(r=0; rn; r++)
{
if(i != r) my += a[i][r] * y[r];
}
return my;
}
float getx(float a[N][N], float b[N], float x[N], int i, int n)
{
float result;
if(i==n-1)
result = (float)(b[i]/a[n-1][n-1]);
else
result = (float)((b[i]-getmx(a,x,i,n))/a[i][i]);
return result;
}
float gety(float a[N][N], float b[N], float y[N], int i, int n)
{
float result;
if(i==0)
result = float(b[i]/a[i][i]);
else
result = float((b[i]-getmy(a,y,i,n))/a[i][i]);
return result;
}
void main()
{ float l[N][N]={0};
float u[N][N]={0};
float y[N]={0};
float x[N]={0};
float a[N][N];
float b[N];
float sum=0;
int i,j,k;
int n;
int flag=1;
while(flag)
{
printf(请输入系数矩阵的大小:);
scanf(%d, n);
文档评论(0)