?? gauss_row.cpp
字號(hào):
// Gauss_row.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
int main(int argc, char* argv[])
{
double A[4][5]={
{0.4096,0.1234,0.3678,0.2943,0.4043},
{0.2246,0.3872,0.4015,0.1129,0.1550},
{0.3645,0.1920,0.3781,0.0643,0.4240},
{0.1784,0.4002,0.2786,0.3927,0.2557}
};
double det,d,s;
int i,j,k,p,n,m;
cout<<"輸入系數(shù)矩陣行數(shù)、列數(shù):";
cin>>n>>m; //m+1即為增廣矩陣的列數(shù)
cout<<endl<<"列數(shù)="<<n<<" 行數(shù)="<<m<<endl;
det=1.0;
//消去過(guò)程的主循環(huán)
for (k=0;k<=n-2;k++)
{
//進(jìn)入選列主元程式
for (i=k+1;i<=n-1;i++)
{
d=A[k][k]; p=k;
if (fabs(A[i][k])>fabs(d))
{
d=A[i][k];
p=i; //p記錄最大列主元的行號(hào)
}
}//列主元選擇完畢
if (d==0) //最大列主元是否為0
{
det=0;
cout<<"Gauss選列主元消去算法無(wú)效!"<<endl;
return 0;
}
else
{
if (p!=k) //是否需要換行
{
for (j=k;j<=m;j++)
{
A[k][j]=A[k][j]+A[p][j];
A[p][j]=A[k][j]-A[p][j];
A[k][j]=A[k][j]-A[p][j];
}
det=-det;
}
}
//進(jìn)入消元程式
for (i=k+1;i<=n-1;i++)
{
A[i][k]=A[i][k]/A[k][k]; //計(jì)算乘數(shù)
for(j=k+1;j<=4;j++) //消元計(jì)算
A[i][j]=A[i][j]-A[i][k]*A[k][j];
}
det=A[k][k]*det;
} //消元過(guò)程結(jié)束
//回代過(guò)程
A[3][4]=A[3][4]/A[3][3]; //即x4
for (i=n-2;i>=0;i--)
{
s=0;
for (j=i+1;j<=m-1;j++)
{
s=s+A[i][j]*A[j][m];
}
A[i][m]=(A[i][m]-s)/A[i][i];
}
det=det*A[n-1][m-1];
//輸出結(jié)果
cout<<"DET OF A IS:"<<det<<endl;
cout<<setiosflags(ios::fixed);
for (i=0;i<=3;i++)
cout<<"X"<<i+1<<"="<<setw(17)<<setprecision(10)<<A[i][m]<<endl;
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -