求解线性方程组的迭代法
求解线性方程组的迭代法 
 实验目的 
 (1)熟悉求解线性方程组的迭代方法有关理论和方法。 
 (2)会编写雅可比迭代法和高斯-塞尔德迭代法。 
 实验内容 
 1、用雅可比迭代法解方程组。 
 2、用高斯-塞尔德迭代法解方程组。 
 实验步骤、程序设计、实验结果及分析 
 总结
1、用雅克比迭代法解方程组 
 1.2 程序设计
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+50;
double x[maxn];
double a[maxn][maxn];
double b[maxn];
double t[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            scanf("%lf",&a[i][j]);
        scanf("%lf",&b[i]);
    }
    memset(x,0,sizeof(x));
    memset(t,0,sizeof(t));
    for(int c=1;c<=10;c++)
    {
        for(int i=1;i<=n;i++)
        {
            t[i]=b[i];
            for(int j=1;j<=n;j++)
            {
                if(j!=i)
                {
                    t[i]-=a[i][j]*x[j];
                }
            }
            t[i]/=a[i][i];
            //cout<<t[i]<<endl;
        }
        //cout<<endl;
        for(int i=1;i<=n;i++)
        {
            x[i]=t[i];
            printf("%.8lf \n",x[i]);
        }
    }
    return 0;
}1.3实验结果:
1.3.2结果分析 
 k X1 X2 X3 K X1 X2 X3 
 1 7.200000 8.300000 8.400000 6 10.983375 11.983374 12.980394 
 2 9.710000 10.70000 11.50000 7 10.994416 11.994416 12.993350 
 3 10.57000 11.57100 12.48200 8 10.998116 11.998116 12.997767 
 4 10.85350 10.85340 12.82820 9 10.999364 11.999365 12.999245 
 5 10.95098 11.95099 12.94138 10 10.999785 11.999785 12.999746 
 通过上述表格可以看出雅克比迭代法随着不断的迭代不断逼近正解,经过十次以后误差小于〖10〗^(-3)
2、用高斯-塞尔德迭代法解方程组。
2.2程序设计:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+50;
double x[maxn];
double a[maxn][maxn];
double b[maxn];
double t[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            scanf("%lf",&a[i][j]);
        scanf("%lf",&b[i]);
    }
    memset(x,0,sizeof(x));
    memset(t,0,sizeof(t));
    for(int c=1;c<=10;c++)
    {
        for(int i=1;i<=n;i++)
        {
            t[i]=b[i];
            for(int j=1;j<i;j++)
            {
                t[i]-=a[i][j]*t[j];
            }
            for(int j=i+1;j<=n;j++)
            {
                if(j!=i)
                {
                    t[i]-=a[i][j]*x[j];
                }
            }
            t[i]/=a[i][i];
            //cout<<t[i]<<endl;
        }
        //cout<<endl;
        cout<<endl;
        printf("第%d次迭代结果\n",c);
        for(int i=1;i<=n;i++)
        {
            x[i]=t[i];
            printf("x[%d]=%.8lf \n",i,x[i]);
        }
    }
    return 0;
}2.3实验结果:
2.3.2结果分析 
 k X1 X2 X3 K X1 X2 X3 
 0 0 0 0 5 10.9989 11.9947 12.9972 
 1 7.2000 9.0200 11.6440 6 10.9999 11.9999 13.0000 
 2 10.4308 11.6719 12.8205 7 / / / 
 3 10.9313 11.9572 12.9778 8 / / / 
 4 10.9913 11.9947 12.9972 9 / / / 
 由表格可知,只需六次迭代,就可以使答案误差小于〖10〗^(-3);
总结: 
 从1.3.2和2.3.2两张表格中可以看出,用高斯-塞尔德迭代法比雅可比迭代法收敛速度更快。

