雅可比迭代法和高斯-塞德尔迭代法求解线性方程组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告内容
一 实验目的与要求(实验题目)
1.分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组
使得误差不超过 2.用不动点迭代法求方程的实根:
02010223=-++x x x
二 模型建立(相关主要计算公式)
1. 雅可比迭代法
⎩
⎨⎧[],...,,k ,n ,...,i x a b a x n i j j )k (j j i i ii )k (i 21021111==∑-=≠=+ 其中()()()()()T n x ,...x ,x x 002010=为初始向量.
2.高斯-塞德尔迭代法
⎩⎨⎧[]
,...
,,k ,n ,,i x a x a b a x i j n i j )k (j ij )k (j ij i ii )k (i 21021111111==∑∑--=-=+=++
3.不动点迭代法
• ...1,0),(1==+k x x
k k ϕ
三、 实验过程、步骤(程序)
1. 雅可比迭代法
#include "stdio.h"
#include "math.h"
#include "string.h"
main()
{
⎪⎩⎪⎨⎧=++=-+=+-3612363311420238321321321x x x x x x x x x 4
10-
int i,j,k;
float m1=0.0,m2=0.0;
float a[3][4]={8,-3,2,20,4,11,-1,33,6,3,12,36};
float x[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]);
}
2高斯-塞德尔迭代法
#include
#include
# define n 3
void main()
{
int i,j,k=1;
float x[n]={0,0,0},m[n]={0,0,0},s=1;
float a[n][n]={8,-3,2,4,11,-1,6,3,12},d[n]={20,33,36}; 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=%f Y2=%f Y3=%f\n",x[0],x[1],x[2]); } getchar() ; } 3. #include #include double f( double x ) { return x * x * x + 2 * x * x + 10 * x - 20; } double fdx( double x ) { return 3 * x * x + 18.4 * x + 16.7; } int main( ) { int t1 = 0, t2 = 1; double x[ 2 ], ep = 1e-8; x[ 0 ] = 0; do { t1 = 1 - t1; t2 = 1 - t2; x[ t1 ] = x[ t2 ] - f( x[ t2 ] ) / fdx( x[ t2 ] ); } while( fabs( x[ t1 ] - x[ t2 ] ) > ep ); printf("解得x=%lf\n", x[ t1 ]); return 0; } 四.实验结果: 1.雅可比迭代法: 2.高斯-塞德尔迭代法: . 3.不动点迭代法: 五.实验小结 通过这次上机,学会了用Jacobis迭代法,高斯-塞德尔迭代法求解线性方程组,算法程序比较复杂,特别是要多次使用数组条件及for循环语句。还有不动点迭代法解方程的根,对这几种迭代方法有了更好的理解,并能通过编程和调试实现算法,完成了实验内容,收获很大。