数值分析/计算方法,欢迎交流
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int m,n,i,j,k;
float a[15][15],temp[15],d;
void main()
{
cout<<"请输入系数矩阵的行数:";
cin>>m;
cout<<"请输入系数矩阵的列数:";
cin>>n;
if(m<=0||n<=0)
{
cout<<"输入的格式有误";
}
for(i=0;i<m;i++)
{
cout<<"请输入第"<<i+1<<"行的系数:";
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}//获得系数矩阵
cout<<"请输入常数列:";
for(int i=0;i<m;i++)
{
cin>>a[i][n];
}//获得常数列
cout<<"该方程组的增广矩阵为:"<<endl;;
for(i=0;i<m;i++)
{
for(j=0;j<n-1;j++)
{
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
int length;
cout<<"请输入计算结果保留小数位的位数:";
cin>>length;
for(k=0;k<n-1;k++)//找到列主元的最大值
{
double max=0;
int hang=0,num=0;
for(i=k;i<n;i++)
{
if(fabs(a[i][k])>max)
{
max=fabs(a[i][k]);
hang=i;
}
}
if(a[hang][k]==0)
{
cout<<"无法计算"<<endl;
system("pause");
return;
}
if(k!=hang)
{
for(i=0;i<m+1;i++)
{
temp[i]=a[k][i];
a[k][i]=a[hang][i];
a[hang][i]=temp[i];
}
}
cout<<"选列主元:"<<endl;;
for(i=0;i<m;i++)
{
for(j=0;j<n+1;j++)
{
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
for(i=k+1;i<m;i++)
{
d=a[i][k]/a[k][k];
for(j=0;j<n+1;j++)
{
a[i][j]=a[i][j]-d*a[k][j];
}
}
cout<<"消元:"<<endl;;
for(i=0;i<m;i++)
{
for(j=0;j<n+1;j++)
{
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
}
memset(temp,0,15*sizeof(float));
for(i=m-1;i>=0;i--)//求解向量
{
d=0;
for(k=0;k<n;k++)
{
d=d+temp[k]*a[i][k];
}
temp[i]=(a[i][n]-d)/a[i][i];
}
cout<<"此方程组的解向量转置为:(";//输出解向量
for(i=0;i<m;i++)
{
cout<<" "<<fixed<<setprecision(length)<<temp[i];
}
cout<<")"<<endl;
system("pause");
}