高斯消元法解线性方程组(C++实现)
#include<cstdio>
#include<iostream>
using namespace std;
void gaosi(double a[],double b[],int n){
double aa[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
aa[i][j]=a[n*i+j];
}
}
double A[n][n],B[n];
for (int i=0;i<n;i++){
B[i]=b[i];
for(int j=0;j<n;j++){
A[i][j]=aa[i][j];
}
}
double AA[n][n],BB[n];
for(int k=1;k<=(n-1);k++){
for (int i=(k+1);i<=n;i++){
double mik=A[i-1][k-1]/A[k-1][k-1];
for(int j=(k+1);j<=n;j++){
AA[i-1][j-1]=A[i-1][j-1]-mik*A[k-1][j-1];
BB[i-1]=B[i-1]-mik*B[k-1];
}
}
for (int p=k;p<n;p++){
A[p][k-1]=0;
B[p]=BB[p];
}
for (int p=k;p<n;p++){
for(int q=k;q<n;q++){
A[p][q]=AA[p][q];
}
}
}
cout<<"输出化简后的上三角矩阵\n";
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<A[i][j]<<" ";
}
cout<<"\n";
}
cout<<"输出化简后的上系数向量\n";
for (int i=0;i<n;i++){
cout<<B[i]<<" ";
}
cout<<"\n";
double x[n];
x[n-1]=B[n-1]/A[n-1][n-1];
for (int i=n-1;i>=1;i--){
double sum=0;
for(int j=i+1;j<=n;j++){
sum=sum+A[i-1][j-1]*x[j-1];
}
x[i-1]=(B[i-1]-sum)/A[i-1][i-1];
}
cout<<"输出求解的x值\n";
for (int i=0;i<n;i++){
cout<<x[i]<<" ";
}
return;
}
int main(){
int n;
cout<<"输入线性方程组的阶数";
cin>>n;
int c=n*n;
double a[c];
for(int i=0;i<c;i++){
cout<<"按行输入矩阵的元素";
cin>>a[i];
}
double b[n];
for(int i=0;i<n;i++){
cout<<"输入b的元素";
cin>>b[i];
}
gaosi(a,b,n);
return 0;
}