数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx
- 文档编号:9257414
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:10
- 大小:62.79KB
数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx
《数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代.docx(10页珍藏版)》请在冰点文库上搜索。
数值分析课程设计雅克比迭代高斯赛德尔迭代超松弛迭代
数值分析课程设计雅克比迭代、高斯赛德尔迭代、超松弛迭代
求解线性方程组的雅克比迭代法、高斯-赛德尔迭代法和超松
弛迭代法的算法实现
学院:
数学科学学院
学号:
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语言程序设计算法编写,对这几种迭代方法有了更好的理解,并能通过编程和调试实现算法,完成了实验内容,收获颇丰。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值分析课程设计 雅克比迭代高斯赛德尔迭代超松弛迭代 数值 分析 课程设计 迭代高斯赛德尔迭代超 松弛
![提示](https://static.bingdoc.com/images/bang_tan.gif)