雅克比和高斯赛德尔迭代求方程组的解

实验原理:

雅克比和高斯的不同之处是,k=1下面那个框框,高斯是a[i][j]*y[j],雅克比是a[i][j]*x[j],就是因为高斯用的是更新之后的x,雅克比没有用更新之后的x。

雅克比和高斯赛德尔迭代求方程组的解_第1张图片

在代码编写过程中,我没有用到动态数组,感觉输入系数矩阵啥的用动态数组更好些。但是,我写了转化对角占优的部分,这部分也是非常重要的。

代码如下:

/**
 运用雅克比和高斯赛德尔公式求解方程组
 a 比较两种方法的收敛速度
 b 验证收敛条件的正确性
 **/
 #include
 #include
 #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 max_ele)
               {
                   max_ele=B[i][j];
                   pos_ele=j;//第i行最大元素在第j列,要标记这个j
               }
               sum=sum+B[i][j];//这一行的元素之和
            }
            sum=sum-max_ele;
            if(max_ele<=sum)//这一行最大元素仍然小于所在行的其他元素的绝对值之和
                {
                    cout<<"不能转化为对角占优矩阵!因为第"<sum)
            {
                pos[i]=pos_ele;//记录第i行最大元素所在的行的下标
                cout<<"第"<>A[i][j];
    cout<<"请输入b["<>b[i];
    betterA(A,C,b);
    cout<<"转化为对角占优阵是"<>eps>>n;
    double x[N];
    double y[N];
    for(i=0;i

 

你可能感兴趣的:(数值分析,数值分析,雅克比-高斯赛德尔迭代,迭代法解方程组)