?? 高斯消元法解n階線性方程組.cpp
字號:
// 高斯消元法解n階線性方程組.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream.h>
//#include<iomanip.h>
#define N 50
int main(int argc, char* argv[])
{
int i,j,n,s=0;
double A[N][N],X[N];
void line_equations(double A[][50],double X[],int n=1);
//變量的定義
cout<<"請輸入方程的階數(shù)n:";
cin>>n;
cout<<"請輸入方程組的系數(shù)增廣矩陣:"<<endl;
for(i=0;i<=n-1;i++){
for(j=0;j<=n;j++){
cout<<"A["<<i<<"]["<<j<<"]=";
cin>>A[i][j];
}
};
line_equations(A,X,n);
//方程組的系數(shù)增廣矩陣的輸入
cout<<"下面是方程組的解:"<<endl;
for(i=0;i<=n-1;i++){
cout<<"X["<<i<<"]="<<X[i]<<endl;
};
cin.get();
cin.get();
return 0;
}
void line_equations(double A[][50],double X[],int n=1){
int i,j,k,s=0;
double temp;
if(n==1 && A[0][0]!=0){
X[0]=A[0][1]/A[0][0];
return ;
};
//為一階時直接求出解
for(k=0;k<=n-2;k++){
for(i=k;i<=n;i++){
if(A[i][k]!=0) break;
}; //求出從上往下第一個不為0的行
if(i>=n){
cout<<"無解!"; return ;
}; //若在化歸上三角矩陣的時候碰到有缺階數(shù)的時候,此時無解或有無窮多解,統(tǒng)一為無解
if(i!=k){
for(j=k;j<=n;j++){
temp=A[k][j];
A[k][j]=A[i][j];
A[i][j]=temp;
};
}; //第一個不為0的行來與k行交換,以免除數(shù)為0
for(i=k+1;i<=n-1;i++){
for(j=k+1;j<=n;j++){
A[i][j]-=((A[i][k]/A[k][k])*A[k][j]);
};
A[i][k]=0;
}; //第k次循環(huán)時,將第1列化為0
};
//至此,將方程組的系數(shù)增廣矩陣化為了上三角陣
X[n-1]=A[n-1][n]/A[n-1][n-1]; //從下向上迭代求出X[k],先求最后一個
for(i=n-2;i>=0;i--){
for(j=n-2;j>=i;j--){
A[i][n]-=X[j+1]*A[i][j+1];
};
X[i]=A[i][n]/A[i][i];
};
//迭代求出X[k]
return;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -