数值计算雅可比迭代

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

实验报告

一、 实验目的

了解并学习线性方程组的解法,运用雅可比迭代法求解给定的线性方程组。掌握如何求解线性方程组。

二、实验方法(要求用自己的语言描述算法)

雅可比迭代法:

运用雅可比迭代法求解线性方程组时,必须要考虑迭代过程的收敛性,接下来,先证明给定的线性方程组收敛:

[ 4−10−100−14−10−100−14−10−1−10−14−100−10−14−100−10−14] [ x 1x 2x 3x 4x 5x 6] =[ 05−25−26]

由上式可得雅可比迭代矩阵:

B j =[ 014014001401401400140140141401401400140140140014014

0] 可以得到:

‖B j ‖∞=max {12,34,34,34,34,12}=34

<1 故原线性方程迭代过程必收敛。

由线性方程组可以得到迭代方程如下

x 1=(x 2+x 4)∕4

x 2=(x 1+x 3+x 5+5)∕4

x 3=(x 2+x 4+x 6−2)∕4

x 4=(x 1+x 3+x 5+5)∕4

x 5=(x 2+x 4+x 6−2)∕4

x 6=(x 3+x 5+6)∕4

依次迭代,直至满足条件 ‖X (k+1)−X (k )‖2≤0.0001 结束迭代。

三、实验代码

#include

#include

#include

#include

#include

#include

using namespace std;

//雅可比迭代法

int main(){

double x[2][6] = {0};//数据标记

int time = 0;

double sum1 ;//求和计数

ofstream fout("output.txt");//打开只写文件

double number[6][7] = { 4, -1, 0, -1, 0, 0, 0, -1, 4, -1, 0, -1, 0, 5, 0, -1, 4, -1, 0, -1, -2, -1, 0, -1, 4, -1, 0, 5, 0, -1, 0, -1, 4, -1, -2, 0, 0, -1, 0, -1, 4,

6 };//存储数据

cout << "原线性方程组为:" << endl;

fout << "原线性方程组为:" << endl;

for (int i = 0; i < 6; i++){

for (int j = 0; j < 7; j++)//输出线性方程组

{

cout << ' ' << right << setw(4) << number[i][j];

fout << ' ' << right << setw(4) << number[i][j];//对齐单元格

}

cout << endl;

fout << endl;

}

while (1){

sum1 = 0;

x[1][0] = (x[0][1] + x[0][3]) / 4;

x[1][1] = (x[0][0] + x[0][2] + x[0][4] + 5) / 4;

x[1][2] = (x[0][1] + x[0][3] + x[0][5] - 2) / 4;

x[1][3] = (x[0][0] + x[0][2] + x[0][4] + 5) / 4;

x[1][4] = (x[0][1] + x[0][3] + x[0][5] - 2) / 4;

x[1][5] = (x[0][2] + x[0][4] + 6) / 4;//迭代公式

for (int i = 0; i < 6; i++){

sum1 += (x[0][i] - x[1][i])*(x[0][i] - x[1][i]);//计算求和,用于判断是否结束循环

}

time++;

for (int i = 0; i < 6; i++)

x[0][i] = x[1][i];//存储计算值

sum1 = sqrt(sum1);

fout << "第" << time << "步计算结果为:" << endl;

fout << fixed << setprecision(5) << "‖X^((k+1) )-X^((k) ) ‖_2 = " << sum1 << endl;//输出数据结果到文件

if (fabs(sum1) <= 0.0001)

break;//满足条件,退出循环

}

cout << "迭代次数为:" << time << endl;

cout << "计算结束后,获得的结果为:" << endl;

fout << "计算结束后,获得的结果为:" << endl;

for (int i = 0; i < 6; i++){

cout << fixed << setprecision(4) << 'x' << i + 1 << '=' << x[0][i] << endl;//输出数据结果到控制台

fout << fixed << setprecision(4) << 'x' << i + 1 << '=' << x[0][i] << endl;//输出数据结果到文件

}

system("pause");

}

四、实验结果及其讨论

雅可比迭代法实验结果如图3-1所示

图3-1 雅可比迭代法实验结果

相关文档
最新文档