利用追赶法来求解方程Ax=b的C++程序

来源:互联网 发布:女生性幻想对象 知乎 编辑:程序博客网 时间:2024/06/08 19:28

在写程序之前需要完成矩阵的输入操作,在这个地方我们是通过在txt文件上对矩阵输入,创建一个txt文件并且输入下面的内容:

-------------------------------------------------------

%矩阵行数:
5
%矩阵列数:
6
%矩阵的元素:
2 1 0 0 0 1
1 4 1 0 0 -2
0 1 4 1 0 2
0 0 1 4 1 -2
0 0 0 1 2 1

--------------------------------------------------------

1.注意的是矩阵式增广矩阵

2.矩阵的行数和列数也是对增广矩阵的描述

源程序:

//追赶法求解矩阵
#include<stdio.h>
#include<iostream>
using namespace std;
void zhugan();
int main()
{
    zhugan();
return 0;
}
void zhugan()
{
FILE *stream=fopen("data2.txt","r");
float Mar[50][50];
int row,col;
char msg[50];
fscanf(stream,"%s",msg);
cout<<msg<<endl;
fscanf(stream,"%d",&row);
cout<<row<<endl;
fscanf(stream,"%s",msg);
cout<<msg<<endl;
fscanf(stream,"%d",&col);
cout<<col<<endl;
fscanf(stream,"%s",msg);
cout<<msg<<endl;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
fscanf(stream,"%f",&Mar[i][j]);
cout<<Mar[i][j]<<"  ";
}
cout<<endl;
}
fclose(stream);
cout<<"------------------------------"<<endl;
//对元素进行追赶法求解
float gk=-Mar[0+1][0]/Mar[0][0];
Mar[0+1][0]=Mar[0+1][0]+Mar[0][0]*gk;
Mar[1][1]=Mar[1][1]+Mar[0][1]*gk;
Mar[1][col-1]=Mar[1][col-1]+Mar[0][col-1]*gk;
int j1=1;
for(int i1=1;i1<row;i1++)
{
   gk=-Mar[i1+1][j1]*1.0/Mar[i1][j1];
Mar[i1+1][j1+1]=Mar[i1+1][j1+1]+Mar[i1][j1+1]*gk;
Mar[i1+1][j1]=Mar[i1+1][j1]+Mar[i1][j1]*gk;
if(Mar[i1+1][j1]<0.00001)
{
Mar[i1+1][j1]=0;
}
Mar[i1+1][col-1]=Mar[i1+1][col-1]+Mar[i1][col-1]*gk;
  j1++;
}
for(int i2=0;i2<row;i2++)
{
for(int j2=0;j2<col;j2++)
{
cout<<Mar[i2][j2]<<"  ";
}
cout<<endl;
}
float X[50];
X[0]=Mar[row-1][col-1]*1.0/Mar[row-1][col-2];
int k=1;
for(int i3=row-2;i3>=0;i3--)
{
X[k]=(Mar[i3][col-1]-Mar[i3][col-1-k]*X[k-1])/Mar[i3][col-2-k];
k++;
}
cout<<"-----------------------------"<<endl;
    //对x的值进行排序
    float XX[50];
for(int k1=0;k1<row;k1++)
{
XX[k1]=X[row-1-k1];
}
cout<<"利用追赶法求出解为:"<<endl;
for(int k2=0;k2<row;k2++)
{
cout<<"X["<<k2<<"]= "<<XX[k2]<<endl;
}

}


0 0