计算方法解线性方程组的直接法实验报告Word下载.docx
- 文档编号:15221244
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:10
- 大小:105.10KB
计算方法解线性方程组的直接法实验报告Word下载.docx
《计算方法解线性方程组的直接法实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《计算方法解线性方程组的直接法实验报告Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
cmath>
#defineN20
usingnamespacestd;
voidload();
floata[N][N];
intm;
intmain()
{
inti,j;
intc,k,n,p,r;
floatx[N],l[N][N],s,d;
cout<
<
"
下面请输入未知数的个数m="
;
cin>
>
m;
endl;
请按顺序输入增广矩阵a:
load();
for(i=0;
i<
i++)
{
for(j=i;
j<
j++)
c=(fabs(a[j][i])>
fabs(a[i][i]))?
j:
i;
/*找列最大元素*/
for(n=0;
n<
m+1;
n++)
{
s=a[i][n];
a[i][n]=a[c][n];
a[c][n]=s;
}
/*将列最大数防在对角线上*/
for(p=0;
p<
p++)
cout<
a[i][p]<
\t"
for(k=i+1;
k<
k++)
l[k][i]=a[k][i]/a[i][i];
for(r=i;
r<
r++)/*化成三角阵*/
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
for(i=m-2;
i>
=0;
i--)
d=0;
for(j=i+1;
d=d+a[i][j]*x[j];
x[i]=(a[i][m]-d)/a[i][i];
/*求解*/
该方程组的解为:
x["
]="
x[i]<
//
system("
pause"
);
return0;
voidload()
{
i<
for(j=0;
j<
j++)
a[i][j];
}
一般消去法
stdio.h>
voidsolve(floatl[][100],floatu[][100],floatb[],floatx[],intn)
floatt,s1,s2;
floaty[100];
for(i=1;
=n;
i++)/*第一次回代过程开始*/
{
s1=0;
for(j=1;
{
t=-l[i][j];
s1=s1+t*y[j];
y[i]=(b[i]+s1)/l[i][i];
for(i=n;
=1;
i--)/*第二次回代过程开始*/
s2=0;
for(j=n;
j>
j--)
t=-u[i][j];
s2=s2+t*x[j];
x[i]=(y[i]+s2)/u[i][i];
voidmain()
floata[100][100],l[100][100],u[100][100],x[100],b[100];
inti,j,n,r,k;
floats1,s2;
=99;
i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/
l[i][j]=0,u[i][j]=0;
if(j==i)l[i][j]=1;
printf("
inputn:
\n"
/*输入方程组的个数*/
scanf("
%d"
&
n);
inputarrayA:
/*读取原矩阵A*/
for(i=1;
for(j=1;
scanf("
%f"
a[i][j]);
printf("
inputarrayB:
/*读取列矩阵B*/
for(i=1;
b[i]);
for(r=1;
r++)/*求解矩阵L和U*/
{
for(i=r;
{
s1=0;
for(k=1;
=r-1;
s1=s1+l[r][k]*u[k][i];
u[r][i]=a[r][i]-s1;
}
for(i=r+1;
{
s2=0;
s2=s2+l[i][k]*u[k][r];
l[i][r]=(a[i][r]-s2)/u[r][r];
}
}
printf("
arrayL:
/*输出矩阵L*/for(i=1;
printf("
%7.3f"
l[i][j]);
printf("
arrayU:
/*输出矩阵U*/
u[i][j]);
printf("
solve(l,u,b,x,n);
解为:
x%d=%f\n"
i,x[i]);
}
(2)
(3)
#include<
math.h>
stdlib.h>
doublea[N],b[N],c[N-1],f[N],r[N];
intn;
voidLUDecompose();
//LU分解
voidbackSubs();
//回代
请输入方程的维数n="
scanf("
getchar();
if(n>
N||n<
=0)
由于该维数过于犀利,导致程序退出!
return;
\n输入下三角元素\n"
输入%d个a值:
"
n-1);
for(inti=1;
n;
i++)
%lf"
&
a[i]);
\n输入主对角线元素\n"
输入%d个b值:
n);
for(i=0;
\n输入上三角元素\n"
输入%d个c值:
n-1;
c[i]);
\n输入%d个方程组右端项:
\n"
f[i]);
LUDecompose();
backSubs();
\n线性方程组的解为:
x%d=%lf\n"
i+1,f[i]);
voidLUDecompose(){
c[0]=c[0]/b[0];
for(inti=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];
voidbackSubs(){
f[0]=f[0]/b[0];
f[i]=(f[i]-r[i]*f[i-1])/b[i];
f[n-1]=f[n-1];
for(i=n-2;
f[i]=f[i]-c[i]*f[i+1];
7.【实验结果与分析总结(含运行结果截图)】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 线性方程组 直接 实验 报告