数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx

上传人:b****8 文档编号:9257414 上传时间:2023-05-17 格式:DOCX 页数:10 大小:62.79KB
下载 相关 举报
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第1页
第1页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第2页
第2页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第3页
第3页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第4页
第4页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第5页
第5页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第6页
第6页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第7页
第7页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第8页
第8页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第9页
第9页 / 共10页
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx

《数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx(10页珍藏版)》请在冰点文库上搜索。

数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx

数值分析课程设计雅克比迭代高斯赛德尔迭代超松弛迭代

数值分析课程设计雅克比迭代、高斯赛德尔迭代、超松弛迭代

求解线性方程组的雅克比迭代法、高斯-赛德尔迭代法和超松

弛迭代法的算法实现

学院:

数学科学学院

学号:

11111111111

姓名:

hhhhhhhhhh

班级:

计算0901

实验报告

一实验目的与要求(实验题目)

1(分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组

5,2,1,,12xxx,123,,1x,4x,2x,20,123,2x,3x,10x,3123,

4使得误差不超过10

2.用超松弛迭代法求解方程方程组:

(=1.1),

4x,x,1,12,,x,4x,x,4,123

,x,4x,,323,,65,10使得误差不超过

二计算公式

1.雅可比迭代法

n1,1(k)(k)x,b,ax,,,iiijj,,1jaii,ji,

i,1,2,...n,k,0,1,2,...,T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.

2.高斯-塞德尔迭代法

i,1n1(k,1)(k,1)(k),,x,b,ax,ax,,,iiijjijjj,,11j,iaii,

i,1,2,?

n,k,0,1,2,...,

T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.

3.超松弛迭代法

in,1,kkkk(,1)()(,1)()xx(baxax)/a,,,,,,,,,iiiijjijjii,jj,,11,i1,2,n,k0,1,,?

T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.

三、实验过程(算法程序)

1.雅可比迭代法

#include"stdio.h"

#include"math.h"

#include"string.h"

voidmain()

{

inti,j,k;

floatm1=0.0,m2=0.0;

floata[3][4]={5,2,1,-12,-1,4,2,20,2,-3,10,3};

floatx[3]={0.0,0.0,0.0};for(k=1;k<=10;)

{for(i=0;i<=2;i++)

{

for(j=0;j

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

for(j=i+1;j<=2;j++)

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

x[i]=(a[i][3]-m1-m2)/a[i][i];

m1=0,m2=0;

}

k++;

}

printf("雅可比迭代法计算结果为:

\n");

for(i=0;i<=2;i++)

printf("x[%2d]=%8.9f\n",i+1,x[i]);}

程序二:

#include"stdio.h"

#include"math.h"

#include"string.h"

#definen3

voidmain()

{

inti,j,k;

floatm1=0.0,m2=0.0;

floata[n][n+1];

printf("请输入方程组的增广矩阵:

");

for(i=0;i

for(j=0;j

scanf("%f",&a[i][j]);floatx[n]={0.0,0.0,0.0};for(k=1;k<=10;)

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

{

for(j=0;j

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

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

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

x[i]=(a[i][n]-m1-m2)/a[i][i];

m1=0,m2=0;

}

k++;

}

printf("雅可比迭代法计算结果为:

\n");

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

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

}

2高斯-塞德尔迭代法

#include

#include

#definen3

voidmain()

{

inti,j,k=1;

floatx[n]={0,0,0},m[n]={0,0,0},s=1;

floata[n][n]={5,2,1,-1,4,2,2,-3,10},d[n]={-12,20,3};/*floata[n][n],d[n];

printf("请输入方程组系数矩阵");

for(i=0;i

for(j=0;j

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

printf("请输入方程组右端向量");

for(i=0;i

scanf("%f",&d[i]);*/

printf("高斯-塞德尔迭代法运算结果为:

\n");

for(k=0;fabs(s-x[0])>1e-6;k++)

{

s=x[0];

for(i=0;i

{m[i]=0;

for(j=0;j

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

x[i]=m[i]/a[i][i];}

printf("Y1=%fY2=%fY3=%f\n",x[0],x[1],x[2]);

}

getchar();

}

3超松弛迭代法

#include

#include

usingnamespacestd;

float*one_array_malloc(intn);//一维数组分配

float**two_array_malloc(intm,intn);//二维数组分配

floatmatrix_category(float*x,intn);intmain()

{

constintMAX=100;//最大迭代次数

intn,i,j,k;

float**a;

float*x_0;//初始向量

float*x_k;//迭代向量

floatprecision;//精度

floatw;//松弛因子

cout<<"输入精度e:

";

cin>>precision;

cout<

";

cin>>n;

a=two_array_malloc(n,n+1);

cout<

\n";

for(i=0;i

{

for(j=0;j

{

cin>>a[i][j];

}

}

x_0=one_array_malloc(n);

cout<

\n";

for(i=0;i

{

cin>>x_0[i];

}

x_k=one_array_malloc(n);

cout<<"输入松弛因子w(1

\n";

cin>>w;

floattemp;//迭代过程

for(k=0;k

{

for(i=0;i

{

temp=0;

for(j=0;j

{

temp=temp+a[i][j]*x_k[j];

}

x_k[i]=a[i][n]-temp;

temp=0;

for(j=i+1;j

{

temp=temp+a[i][j]*x_0[j];

}

x_k[i]=(x_k[i]-temp)/a[i][i];

x_k[i]=(1-w)*x_0[i]+w*x_k[i];

}//求两解向量的差的范数

for(i=0;i

{

x_0[i]=x_k[i]-x_0[i];

}

if(matrix_category(x_0,n)

{

break;

}

else

{

for(i=0;i

{

x_0[i]=x_k[i];

}

}

}//输出过程

if(MAX==k)

{

cout<<"迭代不收敛\n";

}

cout<<"迭代次数为:

"<

cout<<"解向量为:

\n";

for(i=0;i

{

cout<<"x"<

"<

}

return0;}

float*one_array_malloc(intn)//一维数组分配{

float*a;

a=(float*)malloc(sizeof(float)*n);

returna;

}

float**two_array_malloc(intm,intn)//二维数组分配{

float**a;

inti;

a=(float**)malloc(m*sizeof(float*));

for(i=0;i

{

a[i]=(float*)malloc(n*sizeof(float));

}

returna;}

floatmatrix_category(float*x,intn){

inti;

floattemp=0;

for(i=0;i

{

temp=temp+fabs(x[i]);

}

returntemp;

}

四(实验结果:

1.雅可比迭代法:

2.高斯-塞德尔迭代法:

.

3.超松弛迭代法:

五(实验小结

通过这次上机,我学会了用J迭代法,G-S迭代法和SOR迭代法求解线性方程组,巩固了C语言程序设计算法编写,对这几种迭代方法有了更好的理解,并能通过编程和调试实现算法,完成了实验内容,收获颇丰。

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

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2