雅可比迭代法——高赛迭代法

求解线性方程组的解
(1)雅可比迭代法


#include
#include
#include
using namespace std;
const int maxn=1000;
const double e=0.5*1e-5;
int n;
double a[maxn][maxn];
double x[maxn],y[maxn];
double flag;
//雅可比
void show()
{
    cout<for(int i=0;iprintf("%lf  ",y[i]);
    }
    cout<return;
}

void die_dai(int cur)
{
    //迭代
    //迭代的终止条件
    double tmp=0;
    for(int i=0;idouble sum=a[i][n];
        for(int j=0;jif(i!=j)
            {
                sum-=a[i][j]*x[j];
            }
        }
        //cout<
        y[i]=sum/a[i][i];
        tmp=max(tmp,fabs(y[i]));
    }
    for(int i=0;iif(fabs(tmp-flag)>e)
    {
            show();flag=tmp;
            die_dai(cur+1);
        //  show();

    }
    else
    {
        cout<return ;
    }
}

int main()
{
    cin>>n;
    for(int i=0;ifor(int j=0;j<=n;j++)
            cin>>a[i][j];
    //初始x带入
    for(int i=0;i0;//
    flag=0;//无穷范数
    die_dai(1);
    return 0;
}
/*
3
10 -1 -2 7.2
-1 10 -2 8.3
-1 -1 5 4.2

*/

(2)高斯赛德尔

#include
#include
#include
using namespace std;
const int maxn=1000;
const double e=0.5*1e-5;
int n;
double a[maxn][maxn];
double x[maxn];
double flag;
//高赛
void show()
{
    cout<for(int i=0;iprintf("%lf ",x[i]);
    }
    cout<return;
}

void die_dai(int cur)
{
    //迭代
    //迭代的终止条件
    double tmp=0;
    for(int i=0;idouble sum=a[i][n];
        for(int j=0;jif(i!=j)
            {
                sum-=a[i][j]*x[j];
            }
        }
        //cout<
        x[i]=sum/a[i][i];
        tmp=max(tmp,fabs(x[i]));
    }
    if(fabs(tmp-flag)>e)
    {
            show();flag=tmp;
            die_dai(cur+1);
        //  show();
    }
    else
    {
        cout<return ;
    }

}
int main()
{
    cin>>n;
    for(int i=0;ifor(int j=0;j<=n;j++)
            cin>>a[i][j];
    //初始x带入
    for(int i=0;i0;//
    flag=0;//无穷范数
    die_dai(1);
    return 0;
}
/*

3
1 6 -2 1
2 -2 5 2
4 1 -1 3
3
10 -1 -2 7.2
-1 10 -2 8.3
-1 -1 5 4.2
*/

你可能感兴趣的:(数值计算)