如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
本科实验报告课程名称:计算机数值方法B实验项目:线性方程组的迭代解法实验地点:逸夫楼302专业班级:学号:学生姓名:指导教师:2013年4月20日一、实验目的和要求学习使用雅可比迭代法或高斯-赛德尔迭代法,进行基本技能训练和巩固。二、实验内容和原理使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。1、雅克比迭代法:设线性方程组:Ax=b的系数矩阵A可逆且主对角元素a11,a22,…,ann均不为零,令D=diag(a11,a22,…,ann)并将A分解成A=(A-D)+D从而线性方程组可写成Dx=(D-A)x+b则有迭代公式x(k+1)=B1x(k)+f1其中,B1=I-D-1A,f1=D-1b。2、高斯-塞德尔迭代缩写为:三、主要仪器设备惠普ProBook6460bVC++运行环境四、操作方法与实验步骤雅可比迭代法#include"stdio.h"#include"math.h"#include"stdafx.h"#include"iostream"usingnamespacestd;intmain(){floata[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}},b[3]={7.2,8.3,4.2};floatx[3]={0,0,0},sum;inti,j,k,n=3;printf("\t\tX[1]\t\tX[2]\t\tX[3]\n");for(k=0;k<8;k++){for(i=0;i<3;i++){sum=0;for(j=0;j<n;j++){if(i==j)continue;sum=sum+a[i][j]*x[j];}x[i]=(b[i]-sum)/a[i][i];}printf("第%d次迭代:\t",k+1);for(i=0;i<n;i++){printf("%f\t",x[i]);}printf("\n");}system("pause");}高斯-塞德尔迭代法#include"stdio.h"#include"math.h"#include"stdafx.h"#include"iostream"usingnamespacestd;voidmain(){floata[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}},b[3]={7.2,8.3,4.2};floatx[3]={0,0,0},sum1,sum2;inti,j,k,n=3;for(k=0;k<10;k++){for(i=0;i<n;i++){sum1=0;sum2=0;for(j=0;j<i;j++){sum1=sum1+a[i][j]*x[j];}for(j=i+1;j<3;j++){sum2=sum2+a[i][j]*x[j];}x[i]=(b[i]-sum1-sum2)/a[i][i];for(i=0;i<n;i++){printf("x[%d]=%f,",i+1,x[i]);printf("\n");}}}system("pause");}五、实验结果与分析雅可比迭代法高斯-塞德尔迭代法使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求。雅克比迭代公式简单,每迭代一次只须计算一次矩阵和向量的乘法,在计算机运算时需要两组存储单元,以存放x(k)及x(k+1)从程序中可以看出,雅克比定义的sum只有一个,而高斯赛德尔需要两个。时效性上后者要好些。