#include<iostream>
#include<cmath>
#include<malloc.h>
using namespace std;
void main()
{
int i,j,n;
float **a,*b,*x;
cout<<"请输入系数矩阵的规模n:"<<endl;
cin>>n;
a=(float **)malloc(n*sizeof(float *));
b=(float *)malloc(n*sizeof(float));
x=b;
for(i=0;i<n;i++)
a=(float *)malloc(n*sizeof(float));
cout<<"矩阵初始化A:"<<endl; //矩阵形式AX=B
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[j];
cout<<"矩阵初始化B:"<<endl;
for(i=0;i<n;i++)
cin>>b;
int k=0,l;float d,t=1;
while(k!=n-1)
{
d=a[k][k];
l=k;
i=k+1;
while(i!=n)
{
if(fabs(a[k])>fabs(d))
{
d=a[k];
l=i;
}
i++;
}
if(d==0)
{
cout<<"矩阵奇异!";
break;
}
else
if(k!=l)
{
for(j=k;j<n;j++)
{
t=a[l][j];
a[l][j]=a[k][j];
a[k][j]=t;
}
t=b[l];
b[l]=b[k];
b[k]=t;
}
for(i=k+1;i<n;i++)
a[k]=a[k]/a[k][k];
for(i=k+1;i<n;i++)
for(j=k+1;j<n;j++)
a[j]=a[j]-a[k]*a[k][j];
for(i=k+1;i<n;i++)
b=b-a[k]*b[k];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j)t*=a[j];
if(t==0)
{
cout<<"系数矩阵退化原方程有无穷解"<<endl;
break;
}
k++;
}
if(t!=0)
{
b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
float sum=0.0;
for(j=i+1;j<n;j++)
sum+=a[j]*b[j];
b=(b-sum)/a;
}
cout<<"输出结果:"<<endl;
for(i=0;i<n;i++)
{
cout<<"x["<<i<<"]=";
cout<<x<<endl;
}
}
} |