改进平方根法解矩阵

 

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
    float data[3][3]={2,-1,1,-1,-2,3,1,3,1};//矩阵A 的原始数据
    float datat[3][3]={0};//分解过程的矩阵
    float datal[3][3]={0};//分解过后的L矩阵
    float datad[3][3]={0};//分解过后的D 矩阵
    float y[3]={0};  //定义了一个Y的单行的矩阵
    float b[3]={4,5,6};//所给定的初始值的数据
    float x[3]={0};
    //定义了一个x的解数据
    float datalt[3][3]={0};
    //定义了l的逆矩阵的数据
    float  sumdata(int i,int j)
    {
        float sum=0.0;
       for(int k=0;k<=j-1;k++)
       {
             sum+=datat[i][k]*datal[j][k];
       }
       return sum;
    }
    float dsumdata(int i)
    {
           float sum=0.0;
           for(int k=0;k<=i-1;k++)
            sum+=datat[i][k]*datal[i][k];
           return sum;
    }
    float ysum(int i)//这是求解相关Y的求和
    {
     float sum=0.0;
      for(int k=0;k<=i-1;k++)
         sum+=y[k]*datal[i][k];
      return sum;
    }

    float Xsum(int i)
    {
       float sum=0.0;
       for(int k=i+1;k<3;k++)
          sum+=datalt[i][k]*x[k];
       return sum;


    }
int main(int argc,char *argv)
{
    //这是使用改进平方根法的代码
     int lie=3;
     datad[0][0]=data[0][0];
      for(int i=1;i<lie;i++)
      {
          for(int j=0;j<=i-1;j++)
          {
                datat[i][j]=data[i][j]-sumdata(i,j);
                datal[i][j]=datat[i][j]/datad[j][j];

          }
          datad[i][i]=data[i][i]-dsumdata(i);
      }
      cout<<"This is D matrix"<<endl;
      for(int i=0;i<lie;i++)
      {  //定义了一个Y的单行的矩阵
       cout<<datad[i][i]<<endl;
      }
     cout<<"This is L matrix"<<endl;
        for(int i=0;i<lie;i++)
          datal[i][i]=1;
      for(int i=0;i<lie;i++)
      {
          for(int j=0;j<=i;j++)
             cout<<datal[i][j]<<" ";
             cout<<endl;
      }
      for(int i=0;i<lie;i++)
        for(int j=0;j<=i;j++)
      {
          datalt[j][i]=datal[i][j];
      }
      cout<<"This is L-1 matrix"<<endl;
       for(int i=0;i<lie;i++)
      {
          for(int j=i;j<lie;j++)
             cout<<datalt[i][j]<<" ";
             cout<<endl;
      }
      //根据公式求解Y解向量
        for(int i=0;i<lie;i++)
            y[i]=b[i]-ysum(i);
            cout<<"This is Y matrix"<<endl;
        for(int i=0;i<lie;i++)
                cout<<y[i]<<endl;
                //这是求出D 的逆矩阵的数据
        for(int i=0;i<lie;i++)
            datad[i][i]=1.0/datad[i][i];
            cout<<"This is D inverse"<<endl;
         for(int i=0;i<lie;i++)
                cout<<datad[i][i]<<endl;
         for(int i=0;i<lie;i++)
             datad[i][i]=datad[i][i]*y[i];

              cout<<"This is A matrix of D-1*Y"<<endl;
              for(int i=0;i<lie;i++)
                  cout<<datad[i][i]<<"  ";
                  cout<<endl;



             for(int i=lie-1;i>=0;i--)
                  x[i]=(datad[i][i]-Xsum(i))/1;

            cout<<"************This is a solution vector to X**************"<<endl;
            for(int i=0;i<lie;i++)
                  cout<<x[i]<<"  "<<endl;

}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值