非奇异矩阵的LU分解C++程序

//LLUU.cpp
//矩阵的LU分解
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
class lluu
{
 private:
  int n;
  double **a,**l,**u;
 public:
  lluu(int nn)
  {
   int i;
   n = nn;
   a = new double*[n];
   for(i=0;i<n;i++) a[i] = new double[n+8];
   l = new double*[n];
   for(i=0;i<n;i++) l[i] = new double[n+8];
   u = new double*[n];
   for(i=0;i<n;i++) u[i] = new double[n+8];
  }
  void input();
  void lu();
  void output();
  ~lluu()
  {
   int i;
   for(i=0;i<n;i++){delete[] a[i];}
   delete[] a;
   for(i=0;i<n;i++){delete[] l[i];}
   delete[] l;
   for(i=0;i<n;i++){delete[] u[i];}
   delete[] u;
  }
};


void lluu::input()
{
 int i,j;
 char str1[20];
 cout<<"输入文件名:";
 cin>>str1;
 ifstream fin(str1);
 if(!fin)
 {cout<<"\n不能打开这个文件"<<str1<<endl;exit(1);}
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   fin>>a[i][j];
 fin.close();
}


void lluu::lu()
{
 int i,j,k;
 for(k=0;k<n-1;k++)
 {
  for(i=k+1;i<n;i++)
  {
   a[i][k] = a[i][k]/a[k][k];
   for(j=k+1;j<n;j++)
    a[i][j] = a[i][j] - a[i][k]*a[k][j];
  }
 }
  for(i=0;i<n;i++)
  {
   for(j=0;j<n;j++)
   {
    if(j<i) {l[i][j] = a[i][j];u[i][j] = 0;}
    if(j==i) {l[i][j] = 1;u[i][j] = a[i][j];}
    if(j>i) {l[i][j] = 0;u[i][j] = a[i][j];}
   }
  }
}


void lluu::output()
{
 int i,j;
 char str2[20];
 cout<<"输出文件名:";
 cin>>str2;
 ofstream fout (str2);
 if(!fout)
 {cout<<"\n不能打开这个文件"<<str2<<endl;exit(1);}
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  { fout<<"    "<<l[i][j];
   cout<<"    "<<l[i][j];
  }
  fout<<endl;cout<<endl;
 }
 fout<<endl;cout<<endl;
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  { fout<<"    "<<u[i][j];
   cout<<"    "<<u[i][j];
  }
  fout<<endl;cout<<endl;
 }
 fout.close();
}


int main()
{
 lluu c(4);
 c.input();
 c.lu();
 c.output();
 return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值