- 论坛徽章:
- 0
|
#include<iostream>
#include<exception>
#include<istream>
#include<ostream>
const int N(5);
void input_A(std::istream&data_source,double A[][N],int n);
void matrix_multiply(int n,double A[][N],double B[][N]);
void calculating_L(int n,double L[][N],double A[][N]);
void calculating_U(int n,double U[][N],double L[][N],double A1[][N]);
void output(std: stream&out,double L[][N],int n);
int main(){
try{
std::cout<<"请输入矩阵A的阶数:"<<'\n';
int n(0);
std::cin>>n;
if(not std::cin)throw std::exception();
double A[N][N];
double A1[N][N];
double L[N][N];
double U[N][N];
input_A(std::cin,A,n);
for(int i(0);i!=N;++i)
for(int j(0);j!=N;++j)
A1[j]=A[j];
std::cout<<"您输入的矩阵A为: \n";
output(std::cout,A,n);
calculating_L(n,L,A);
std::cout<<"得到的矩阵L为: ";
output(std::cout,L,n);
std::cout<<'\n';
calculating_U(n,U,L,A1);
std::cout<<"得到的矩阵U为: ";
output(std::cout,U,n);
}
catch(...){
std::cerr<<"\n\n***An exception was thrown.***\n";
}
}
void input_A(std::istream&in,double A[][N],int n){
for(int i(0);i!=n;++i){
for(int j(0);j!=n;++j){
std::cout<<"请输入第"<<i<<"行第"<<j<<"列的元素:";
in>>A[j];
std::cout<<'\n';
}
}
}
void matrix_multiply(int n,double A[][N],double B[][N]){
double c[N][N];
for(int i(0);i!=n;++i){
for(int p(0);p!=n;++p){
for(int j(0);j!=n;++j){
c[p]+=B[j]*A[j][p];
}
}
}
for(int i(0);i!=n;++i)
for(int j(0);j!=n;++j)
A[j]=c[j];
}
void calculating_L(int n,double L[][N],double A[][N]){
for(int i(0);i!=n;++i){
for(int j(0);j!=n;++j){
if(i==j)L[j]=1;
else L[j]=0;
}
}
for(int q(0);q!=n;++q){
for(int p(0);p!=n;++p){
while(p>q){
L[p][q]=-A[p][q]/A[q][q];
}
}
matrix_multiply(n,A,L);
}
for(int i(0);i!=n;++i){
for(int j(0);j!=n;++j){
while(L[j]<0){
L[j]=-1*L[j];
}
}
}
}
void calculating_U(int n,double U[][N],double L[][N],double A1[][N]){
matrix_multiply(n,L,A1);
for(int i(0);i!=n;++i)
for(int j(0);j!=n;++j)
U[j]=L[j];
}
void output(std: stream&out,double L[][N],int n){
for(int i(0);i!=n;++i){
for(int j(0);j!=n;++j){
out<<L[j]<<" ";
}
std::cout<<'\n';
}
}
[ 本帖最后由 sssntte 于 2007-10-21 22:44 编辑 ] |
|