计算方法解线性方程组的直接法实验报告.docx

上传人:b****8 文档编号:10545582 上传时间:2023-02-21 格式:DOCX 页数:11 大小:105.05KB
下载 相关 举报
计算方法解线性方程组的直接法实验报告.docx_第1页
第1页 / 共11页
计算方法解线性方程组的直接法实验报告.docx_第2页
第2页 / 共11页
计算方法解线性方程组的直接法实验报告.docx_第3页
第3页 / 共11页
计算方法解线性方程组的直接法实验报告.docx_第4页
第4页 / 共11页
计算方法解线性方程组的直接法实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

计算方法解线性方程组的直接法实验报告.docx

《计算方法解线性方程组的直接法实验报告.docx》由会员分享,可在线阅读,更多相关《计算方法解线性方程组的直接法实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

计算方法解线性方程组的直接法实验报告.docx

计算方法解线性方程组的直接法实验报告

计算方法实验二实验报告

专业班级:

姓名:

学号:

实验成绩:

1.【实验题目】

解线性方程组的直接法

2.【实验目的】

●掌握高斯消元法及选列主元素的技术

●掌握三角分解法与追赶法

●掌握向量与矩阵的三种范数及其计算方法

●理解方程组的性态、条件数及误差分析

3.【实验内容】

求解方程组,AX=b其中

4.【实验要求】

(1)分别列选主元消去法与不选主元消去法分别对以上两个方程组求解

(2)观察小主元并分析对计算结果的影响。

(3)用追赶法求下述三对角线性方程组的解

5.【算法描述】

6.【源程序(带注释)】

(1)一:

列主元素消去法

#include

#include

#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;

cout<

cout<<"请按顺序输入增广矩阵a:

"<

load();

for(i=0;i

{

for(j=i;j

c=(fabs(a[j][i])>fabs(a[i][i]))?

j:

i;/*找列最大元素*/

for(n=0;n

{

s=a[i][n];

a[i][n]=a[c][n];

a[c][n]=s;

}

/*将列最大数防在对角线上*/

for(p=0;p

cout<

cout<

for(k=i+1;k

{

l[k][i]=a[k][i]/a[i][i];

for(r=i;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;j

d=d+a[i][j]*x[j];

x[i]=(a[i][m]-d)/a[i][i];/*求解*/

}

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

"<

for(i=0;i

cout<<"x["<

//

system("pause");

return0;

}

voidload()

{

inti,j;

for(i=0;

i

for(j=0;

j

j++)

cin>>a[i][j];

}

一般消去法

#include

voidsolve(floatl[][100],floatu[][100],floatb[],floatx[],intn)

{

inti,j;

floatt,s1,s2;

floaty[100];

for(i=1;i<=n;i++)/*第一次回代过程开始*/

{

s1=0;

for(j=1;j

{

t=-l[i][j];

s1=s1+t*y[j];

}

y[i]=(b[i]+s1)/l[i][i];

}

for(i=n;i>=1;i--)/*第二次回代过程开始*/

{

s2=0;

for(j=n;j>i;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;

for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/

for(j=1;j<=99;j++)

{

l[i][j]=0,u[i][j]=0;

if(j==i)l[i][j]=1;

}

printf("inputn:

\n");/*输入方程组的个数*/

scanf("%d",&n);

printf("inputarrayA:

\n");/*读取原矩阵A*/

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

for(j=1;j<=n;j++)

scanf("%f",&a[i][j]);

printf("inputarrayB:

\n");/*读取列矩阵B*/

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

scanf("%f",&b[i]);

for(r=1;r<=n;r++)/*求解矩阵L和U*/

{

for(i=r;i<=n;i++)

{

s1=0;

for(k=1;k<=r-1;k++)

s1=s1+l[r][k]*u[k][i];

u[r][i]=a[r][i]-s1;

}

for(i=r+1;i<=n;i++)

{

s2=0;

for(k=1;k<=r-1;k++)

s2=s2+l[i][k]*u[k][r];

l[i][r]=(a[i][r]-s2)/u[r][r];

}

}

printf("arrayL:

\n");/*输出矩阵L*/for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

printf("%7.3f",l[i][j]);

printf("\n");

}

printf("arrayU:

\n");/*输出矩阵U*/

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

{

for(j=1;j<=n;j++)

printf("%7.3f",u[i][j]);printf("\n");

}

solve(l,u,b,x,n);

printf("解为:

\n");

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

printf("x%d=%f\n",i,x[i]);

}

(2)

(3)

#include

#include

#include

#defineN20

doublea[N],b[N],c[N-1],f[N],r[N];

intn;

voidLUDecompose();

//LU分解

voidbackSubs();

//回代

voidmain()

{

printf("请输入方程的维数n=");

scanf("%d",&n);

getchar();

if(n>N||n<=0)

{

printf("由于该维数过于犀利,导致程序退出!

");

return;

}

printf("\n输入下三角元素\n");

printf("输入%d个a值:

",n-1);

for(inti=1;i

scanf("%lf",&a[i]);

getchar();

printf("\n输入主对角线元素\n");

printf("输入%d个b值:

",n);

for(i=0;i

scanf("%lf",&b[i]);

getchar();

printf("\n输入上三角元素\n");

printf("输入%d个c值:

",n-1);

for(i=0;i

scanf("%lf",&c[i]);

getchar();

printf("\n输入%d个方程组右端项:

\n",n);

for(i=0;i

scanf("%lf",&f[i]);

getchar();

LUDecompose();

backSubs();

printf("\n线性方程组的解为:

\n");

for(i=0;i

printf("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];

for(inti=1;i

f[i]=(f[i]-r[i]*f[i-1])/b[i];

f[n-1]=f[n-1];

for(i=n-2;i>=0;i--)

f[i]=f[i]-c[i]*f[i+1];

}

7.【实验结果与分析总结(含运行结果截图)】

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1