• 用矩阵直接三角分解法求解方程组


     1 //用矩阵直接三角分解法求解方程组
     2 #include<iostream>
     3 #include<stdio.h>
     4 using namespace std;
     5 void main()
     6 {
     7     int n,i;
     8     float *a,*x;
     9     cout<<"请输入方程组元的个数:";
    10     cin>>n;
    11 
    12     a=new float[n*(n+1)];       //开辟增广矩阵的存储空间
    13     x=new float[n];             //开辟方程组解的存储空间
    14 
    15     cout<<"请输入方程组的系数矩阵:"<<endl;
    16     for(i=0;i<n*(n+1);i++)
    17     {
    18          if ((i+1)%(n+1)==0) continue;
    19          cin>>*(a+i);
    20     }
    21 
    22     cout<<"请输入方程组的常数项:"<<endl;
    23     for(i=n;i<n*(n+1);i+=n+1)
    24       cin>>*(a+i);
    25 
    26     void DirectLU(float*,int,float*);
    27     DirectLU(a,n,x);
    28     cout<<"方程组的解是:"<<endl;
    29     for(i=0;i<n;i++)
    30     cout<<"x["<<i<<"]="<<float(*(x+i))<<endl;
    31 }
    32 void DirectLU(float*u,int n,float*x)
    33 {
    34     int i,r,k;
    35     for(r=0;r<=n-1;r++)
    36     {
    37         for(i=r;i<=n;i++)
    38         for(k=0;k<=r-1;k++)
    39             *(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i));
    40         for(i=r+1;i<=n-1;i++)
    41         {
    42             for(k=0;k<=r-1;k++)
    43                 *(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));
    44             *(u+i*(n+1)+r)/=*(u+r*(n+1)+r);
    45         }
    46     }
    47 
    48     for(i=n-1;i>=0;i--)
    49     {
    50         for(r=n-1;r>=i+1;r--)
    51             *(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];
    52         x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));
    53     }
    54 
    55 }
  • 相关阅读:
    线程的异常捕获与线程池的异常捕获
    设计模式-状态模式
    老王讲自制RPC框架.(四.序列化与反序列化)
    老王讲自制RPC框架.(三.ZOOKEEPER)
    老王讲自制RPC框架.(二.动态代理)
    4
    3
    2
    1
    前言
  • 原文地址:https://www.cnblogs.com/uniqid/p/4152463.html
Copyright © 2020-2023  润新知