东北大学数值分析上机实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》上机实验报告课题三解线性方程组的迭代法

学生姓名:

学生系别:

学生班级:

日期:

上机实践报告

【运行环境】

软件:Windows、Microsoft Visual C++ 6.0

PC一台

【问题提出】

对课题二所列目的和意义的线性方程组,试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。

【实践要求】

1、体会迭代法求解线性方程组,并能与消去法做比较;

2、分别对不同精度要求,如ε=10-3,10-4,10-5 由迭代次数体会

该迭代法的收敛快慢;

3、对方程组2,3使用SOR方法时,选取松弛因子 =0.8,0.9,1,

1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松

弛因子的最佳者;

4、给出各种算法的设计程序和计算结果。

【目的意义】

1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法

比较;

2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;

3、体会上机计算时,终止步骤 < 或k >(予给的迭代次数),对迭

代法敛散性的意义;

4、体会初始解 x ,松弛因子的选取,对计算结果的影响。

【程序代码】

//Jacobi.cpp

#include

#include

using namespace std;

#define N 15//最大迭代次数

#define P 10//矩阵的阶数

//#define P 8

static double a[10][10]={4,2,-3,-1,2,1,0,0,0,0,

8,6,-5,-3,6,5,0,1,0,0,

4,2,-2,-1,3,2,-1,0,3,1,

0,-2,1,5,-1,3,-1,1,9,4,

-4,2,6,-1,6,7,-3,3,2,3,

8,6,-8,5,7,17,2,6,-3,5,

0,2,-1,3,-4,2,5,3,0,1,

16,10,-11,-9,17,34,2,-1,2,2,

4,6,2,-7,13,9,2,0,12,4,

0,0,-1,8,-3,-24,-8,6,3,-1};

static double b[10]={5,12,3,2,3,46,13,38,19,-21};

static double x_jing[10]={1,-1,0,1,2,0,3,1,-1,2};//精确解

static double x0[10]={0,0,0,0,0,0,0,0,0,0};

static double x1[10];

static int k,i,j;

//static double a[8][8]={4,2,-4,0,2,4,0,0,

// 2,2,-1,-2,1,3,2,0,

// -4,-1,14,1,-8,-3,5,6,

// 矩阵B 0,-2,1,6,-1,-4,-3,3,

// 2,1,-8,-1,22,4,-10,-3,

// 4,3,-3,-4,4,11,1,-4,

// 0,2,5,-3,-10,1,14,2,

// 0,0,6,3,-3,-4,2,19};

//static double b[8]={0,-6,6,23,11,-22,-15,45};

//static double x_jing[8]={1,-1,0,2,1,-1,0,2};

//static double x0[8]={0,0,0,0,0,0,0,0};

//static double x1[8];

//static double a[10][10]={4,-1,0,0,0,0,0,0,0,0,

// -1,4,-1,0,0,0,0,0,0,0,

// 0,-1,4,-1,0,0,0,0,0,0,

// 0,0,-1,4,-1,0,0,0,0,0,

// 矩阵C 0,0,0,-1,4,-1,0,0,0,0,

// 0,0,0,0,-1,4,-1,0,0,0,

// 0,0,0,0,0,-1,4,-1,0,0,

// 0,0,0,0,0,0,-1,4,-1,0,

// 0,0,0,0,0,0,0,-1,4,-1,

// 0,0,0,0,0,0,0,0,-1,4};

//static double b[10]={7,5,-13,2,6,-12,14,-4,5,-5}; //static double x_jing[10]={2,1,-3,0,1,-2,3,0,1,-1}; //static double x0[10]={0,0,0,0,0,0,0,0,0,0};

double Max(int y)//求算该次迭代的误差

{

double sum,max;

for (i=0;i

{

sum=0;

for (j=0;j

sum+=a[i][j]*x0[j];

x1[i]=x0[i]+(b[i]-sum)/a[i][i];

}

max=fabs(x_jing[0]-x1[0]);

for (i=1;i

{

if (fabs(x_jing[i]-x1[i])>max)

max=fabs(x_jing[i]-x1[i]);

}

cout<<"第"<

return max;

相关文档
最新文档