?? gauss_070460.cpp
字號(hào):
#include<iostream.h>
#include<math.h>
#include<fstream.h>
#include<iomanip.h>
int maxrow;
double max_value(double a[100][100],int n,int column)//找主元方程
{
double max;
int i=0;
max=a[n][n];
extern int maxrow=n;
for(i=n+1;i<column;i++)
{
if(fabs(a[i][n])>fabs(max))
{
max=a[i][n];
maxrow=i;
}
}
return (max);
}
void main()
{
ifstream infile;
infile.open("xishu.txt",ios::in);
double matrix[100][100];
double b[100];
double x[100];
double p,z,sum;
int n,m,k,l,q=0,i,j,t,g=0,h=0,u=0;
int column,an;
char as;
do{
//設(shè)置方程組的系數(shù)
cout<<"若對(duì)書中所給方程組進(jìn)行計(jì)算請(qǐng)選擇1:"<<endl;
cout<<"若對(duì)其它任意階數(shù)方程組計(jì)算請(qǐng)選擇2:"<<endl;
cin>>an;
if(an==1)
{
column=9;
cout<<"書中例題的增廣矩陣系數(shù)為:"<<endl;
for( g=0;g<column;g++)
{
for( h=0;h<column;h++)
{
infile>>matrix[g][h];
cout<<setw(2)<<matrix[g][h]<<'\t';
}
infile>>b[g];
cout<<setw(3)<<b[g]<<endl;
}
g=0;h=0;
}
if(an==2)
{
cout<<"請(qǐng)輸入方程階數(shù)n:";
cin>>column;
cout<<endl;
for(g=0;g<column;g++)
{
cout<<"請(qǐng)輸入增廣矩陣的第"<<g+1<<"行系數(shù):"<<endl;
for(h=0;h<column;h++)
cin>>matrix[g][h];
cin>>b[g];
}
g=0;h=0;u=0;
}
for(n=0;(n<column)&&(q==0);n++)
{
max_value(matrix,n,column);//找主元
//判斷方程是否可解
if(max_value==0)
{
q=1;
cout<<"此矩陣奇異,方程有無(wú)窮解!"<<endl;
}
//將方程系數(shù)用列主元高斯變換法進(jìn)行變換
else
{
if(maxrow!=n)
{
for(m=n;m<column;m++)
{
z=matrix[n][m];
matrix[n][m]=matrix[maxrow][m];
matrix[maxrow][m]=z;
}
z=b[n];
b[n]=b[maxrow];
b[maxrow]=z;
}
}
for(k=n+1;k<column;k++)//消元
{
p=matrix[k][n]/matrix[n][n];
for(l=n;l<column;l++)
{
matrix[k][l]-=matrix[n][l]*p;
}
b[k]-=b[n]*p;
}
}
//回代求出X的值
for(i=column-1;i>=0;i--)
{
sum=0;
for(j=i+1;j<column;j++)
{
sum+=x[j]*matrix[i][j];
}
x[i]=(b[i]-sum)/matrix[i][i];
}
//輸出結(jié)果
cout<<"方程組的解為:"<<"X[";
for(t=0;t<column;t++)
{
cout<<x[t]<<",";
}
cout<<"]"<<endl;
cout<<"繼續(xù)請(qǐng)按Y,退出按其它鍵:";
cin>>as;
}
while(as=='y');
infile.close();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -