eoj1041 矩阵的LU分解

//仅对高斯消元过程中不发生行交换的情况适用。#include <iostream>#include <cstring>#include <vector>#include <cmath>#include <cstdio>#include <cstring>using namespace std;const int size_n=100;const double exps=1e-7;double a[size_n][size_n],L[size_n][size_n],b[size_n],tem[size_n],ans[size_n];void get_ans2(int n){for(int i=n;i>=1;–i){double sum=0;for(int j=n;j>i;–j){sum+=ans[j]*a[i][j];}ans[i]=(tem[i]-sum)/a[i][i];}}void get_ans1(int n){for(int i=1;i<=n;++i){double sum=0;for(int j=1;j<=i;++j){sum+=tem[j]*L[i][j];}tem[i]=(b[i]-sum)/L[i][i];}}//void get_ans1(int n){// for(int i=1;i<=n;++i){//double sum=0;//for(int j=1;j<i;++j)//sum+=tem[j]*L[i][j];//tem[i]=(b[i]-sum)/L[i][i];// }//}void fun(int n){for(int i=1;i<=n;++i){if(fabs(a[i][i])<exps){cout<<"无穷多解"<<endl;return;}for(int j=i+1;j<=n;++j){double tem=a[j][i]/a[i][i];L[j][i]=tem;for(int k=1;k<=n;++k){a[j][k]-=a[i][k]*tem;}//b[j]-=b[i]*tem;}}// for(int i=1;i<=n/2;++i){//for(int j=1;j<=n;++j)//swap(L[i][j],L[n+1-i][j]);// }get_ans1(n);// for(int i=1;i<=n/2;++i){//swap(tem[i],tem[n+1-i]);// }get_ans2(n);}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);int n;cin>>n;memset(L,0,sizeof(L));for(int i=1;i<=n;++i)L[i][i]=1;for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){cin>>a[i][j];}}for(int i=1;i<=n;++i)cin>>b[i];fun(n);// for(int i=1;i<=n;++i){//for(int j=1;j<=n;++j){//cout<<L[i][j]<<" ";//}//cout<<endl;// }// for(int i=1;i<=n;++i){//for(int j=1;j<=n;++j){//cout<<a[i][j]<<" ";//}//cout<<endl;// }// for(int i=1;i<=n;++i)//cout<<tem[i]<<endl;for(int i=1;i<=n;++i)printf("%.2f\n",ans[i]);return 0;}

,生命不在长而在于好,只要每一次尽力的演示,都值得鼓励与喝采。

eoj1041 矩阵的LU分解

相关文章:

你感兴趣的文章:

标签云: