消去法解线性方程组(C++实现)"/>
列主元消去法解线性方程组(C++实现)
列主元消去法解线性方程组(C++实现)
#include<cstdio>
#include<iostream>
using namespace std;
int quen(double a[],int n){double x;int k;for(int i=0;i<n;i++){if(a[i]>=0){a[i]=a[i];}else{a[i]=-a[i];}}x=a[0];int p=0;for(int i=1;i<n;i++){if(x<=a[i]){x=a[i];p=i;}}p=p+1;return p;
}
void liezhuyuan(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++){double s[n+1-k]={};for(int e=k;e<=n;e++){s[e-k]=A[e-1][k-1];} int aa;aa=quen(s,n+1-k);aa=aa+k-1; double temp1,temp2;for(int i=k;i<=n;i++){temp1=A[k-1][i-1];A[k-1][i-1]=A[aa-1][i-1];A[aa-1][i-1]=temp1;}temp2=B[k-1];B[k-1]=B[aa-1];B[aa-1]=temp2;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]<<" ";}
}
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];}liezhuyuan(a,b,n);return 0;
}
更多推荐
列主元消去法解线性方程组(C++实现)
发布评论