实验原理:
雅克比和高斯的不同之处是,k=1下面那个框框,高斯是a[i][j]*y[j],雅克比是a[i][j]*x[j],就是因为高斯用的是更新之后的x,雅克比没有用更新之后的x。
在代码编写过程中,我没有用到动态数组,感觉输入系数矩阵啥的用动态数组更好些。但是,我写了转化对角占优的部分,这部分也是非常重要的。
代码如下:
/**
运用雅克比和高斯赛德尔公式求解方程组
a 比较两种方法的收敛速度
b 验证收敛条件的正确性
**/
#include<iostream>
#include<math.h>
#define N 3//4*4方程组
double A[N][N];
double C[N][N];
double b[N];
double d[N];
using namespace std;
/**
调整系数矩阵为对角占优,并得到对角占优阵C
**/
void betterA( double A[N][N],double C[N][N],double b[N])
{
double B[N][N];
int pos[N];
int i,j,pos_ele,k;
double sum,max_ele;
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
B[i][j]=fabs(A[i][j]);
}
}
for(i=0;i<N;i++)
{
max_ele=B[i][0];
pos_ele=0;
sum=0;
for(j=0