实验三 线性方程组的直接解法

来源:互联网 发布:mac os app store更新 编辑:程序博客网 时间:2024/06/05 10:58

一、问题提出

给出下列几个不同类型的线性方程组,请用适当的算法计算其解。

1、设线性方程组

104   2   -3  -1  2   1   0   0   0   0   58   6   -5  -3  6   5   0   1   0   0   124   2   -2  -1  3   2   -1  0   3   1   30   -2  1   5   -1  3   -1  1   9   4   2-4  2   6   -1  6   7   -3  3   2   3   38   6   -8  5   7   17  2   6   -3  5   460   2   -1  3   -4  2   5   3   0   1   1316  10  -11 -9  17  34  2   -1  2   2   384   6   2   -7  13  9   2   0   12  4   190   0   -1  8   -3  -24 -8  6   3   -1  -21

二、要求

1、对上述三个方程组分别用Gauss顺序消元法与Gauss列主元消元法:平方根法与改进平方根法:追赶法求解(选择其一);
2、应用结构程序设计编出通用程序;
3、比较计算结果、分析数值解误差的原因;
4、尽可能利用相应模板输出系数矩阵的三角分解式;

三、目的和意义

1、通过该课题的实验,体会模板化结构程序设计方法的优点;
2、通过所学的计算方法,解决各类线性方程组的直接算法;
3,提高分析和解决问题的能力,做到学以致用;
4,通过三对角线性方程组的解法,体会稀疏线性方程组解法的特点;

四、代码实现

#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn=100;int n,i,j,k=1;double a[maxn][maxn],b[maxn],sum;int main(){    freopen("in.txt","r",stdin);    cin>>n;    for(int i=1; i<=n; i++)    {        for(int j=1; j<=n; j++)            cin>>a[i][j];        cin>>b[i];    }    for(int k=1; k<=n; k++)    {        for(j=k+1; j<=n; j++) a[k][j]=a[k][j]/a[k][k];    //系数化为1        b[k]=b[k]/a[k][k];        for(i=k+1; i<=n; i++)                            //消元        {            for(j=k+1; j<=n; j++)                a[i][j]-=a[i][k]*a[k][j];            b[i]-=a[i][k]*b[k];        }    }    for(i=n-1; i>=1; i--)                                //求值    {        sum=0;        for(j=i+1; j<=n; j++)            sum+=a[i][j]*b[j];        b[i]-=sum;    }    for(i=1; i<=n; i++)        printf("b[%2d]=%lf\n",i,b[i]);    return 0;}




阅读全文
0 0
原创粉丝点击