东北大学数值分析实验报告 下载本文

内容发布更新时间 : 2024/12/23 11:06:28星期一 下面是文章的全部内容请认真阅读。

四、 程序运行结果分析

误差分析:

列主元高斯法解决了一部分大数吃掉小数的现象,但在计算机运算时,仍会对中间数据进行舍入,影响结果的精度,这种误差同样也存在其他两种算法中;

对于三对角阵,选用追赶法可以得到更准确的解。

课题三 线性方程组的迭代法

一、问题提出

1、设线性方程组

??42?3?1210000???86?5?3650100??x1??x?2??42?2?132?1031?????0?215?13?1194??x3????x?4??426?167?3323????86?8571726?35??x5????x??02?13?425301??6??1610?11?917342?122??x7?????462?713920124??x?8??x?9??00?18?3?24?863?1??????x10??x

*= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T

J迭代算法:

程序设计流程图:

??5??12???3???2??=??3??46? ???13??38????19?????21??源程序代码:

#include #include #include void main() {

float a[50][51],x1[50],x2[50],temp=0,fnum=0; int i,j,m=200,n=10,e,bk=0; for(i=1;i

printf(\请输入系数矩阵:\\n\ for(i=1;i

j=1;

while(j

scanf(\ j++; } }

printf(\输入方程组的常数项:\\n\ for(i=1;i

scanf(\ }

printf(\请输入精度要求:\\n\ scanf(\ while(m!=0) {

for(i=1;i

for(j=1;j

if (j!=i)

temp=a[i][j]*x1[j]+temp; }

x2[i]=(a[i][n+1]-temp)/a[i][i]; temp=0; }

for(i=1;i

fnum=float(fabs(x1[i]-x2[i])); if(fnum>temp) temp=fnum; }

if(temp<=pow(10,-4)) bk=1; for(i=1;i

printf(\原方程组的解为:\\t\ for(i=1;i

if((x1[i]-x2[i])<=e||(x2[i]-x1[i])<=e) {

printf(\ } }

printf(\}

运行结果:

2、设对称正定阵系数阵线方程组

2?402?4?22?1?21???4?1141?8?6?1?0?21400??x1??x?320???2??356??x3?????4?33??x4?= ?0???6????20???23?? ??21?8?1224?10?3????43?3?44111?4?x5????025?3?10??x??6?1142x7???0063?3?4219???????x8??x* = ( 1, -1, 0, 2, 1, -1, 0, 2 )T

GS迭代算法:

#include #include #include const int m=11;

void main() {

int choice=1;

while(choice==1) {

double a[m][m],b[m],e,x[m],y[m],w,se,max; int n,i,j,N,k;

cout<<\迭代法\ cout<<\请输入方程的个数:\ cin>>n;

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

cout<<\请输入第\个方程的各项系数:\ for(j=1;j<=n;j++) cin>>a[i][j]; }

cout<<\请输入各个方程等号右边的常数项:\\n\ for(i=1;i<=n;i++) {

cin>>b[i]; }

cout<<\请输入最大迭代次数:\ cin>>N;

??9???22?????15????45??