欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

矩阵Gauss消除法解线性方程

程序员文章站 2022-07-15 08:59:31
...

       Gauss 消去法是解线性方程组的一种直接方法,有时也称为精确法,这种算法只包含有限四次运算,并且在每一步运算过程都不会发生舍入误差的假设下,计算的结果就是方程组的精确解。但实际计算中不可避免舍入误差的存在和影响,所以这种方法只能求得线性方程组的近似解。顺序消去法解方程组原理如图:


矩阵Gauss消除法解线性方程
            
    
    博客分类: 顺序Gauss消除法  矩阵 数值分析  C++ 顺序Gauss消除法  矩阵 数值分析  C++ 
 
矩阵Gauss消除法解线性方程
            
    
    博客分类: 顺序Gauss消除法  矩阵 数值分析  C++ 顺序Gauss消除法  矩阵 数值分析  C++ 
 

 

 

  

#include <cstdlib>
#include <iostream>
#include <math.h>
#include <process.h>

/*
 *luozhoong zhizuo
 *
*/
using namespace std;

class gauss
{
     private:
             int i, j, k, n;
             double eps, ratio, sum, *x, **a;
     public:
            void gauss_input();          //数据输入的函数声明
            void gauss_elimination();    //消除法的函数声明
            void gauss_output();         //结果输出的函数声明 
            ~gauss()                    //释放存储器
             {
                delete  []x;
                for(i=0;i<n;i++){delete[]a[i];}
                delete []a;                        
            }                           //类gauss结束 
            
      
      }; 
      
int main()
{
    
    gauss solution;                  
    solution.gauss_input();          //输入增广矩阵的系数  
    solution.gauss_elimination();    //执行Gauss消去法
    solution.gauss_output();         //输出结果 
    
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

void gauss::gauss_input()             //数据输入函数 
{
     cout<<"输入方程的个数:";        //输入方程的个数 
     cin>>n;
     x=new double[n];                 //动态分配存储器
     a=new double*[n];
     for(i=0;i<n;i++){a[i]=new double[n+1];} 
     for(i=0;i<n;i++)
     for(j=0;j<n;j++)
     {
             cout<<"\n输入a["<<i<<"]["<<j<<"] = ";
             cin>>a[i][j];
             
     }
     for(i=0;i<n;i++)              //输入右端向量的各元素
     {
             cout<<"\n输入b["<<i<<"]=";
             cin>>a[i][n];
             
     } 
     cout<<"\n输入最小的主元素 = ";
     cin>>eps;                          //输入段结束 
      
}
void gauss::gauss_elimination()         //Gauss消去法函数 
{
     for(k=0;k<(n-1);k++)
     {
         for(i=(k+1);i<n;i++)
         {
            if(fabs(a[k][k])<eps)
            {
               cout<<"\n主元素太小..失败.."<<endl;
               exit(0); 
            }
            ratio=a[i][k]/a[k][k];
            for(j=(k+1);j<(n+1);j++)
            {a[i][j]-=ratio*a[k][j];}
            a[i][k]=0;
         }
     } 
     x[n-1]=a[n-1][n]/a[n-1][n-1];       //回代 
     for(i=(n-2);i>=0;i--)
     {
         sum=0.0;
         for(j=(i+1);j<n;j++)
         {sum+=a[i][j]*x[j];}
         x[i]=a[i][n]-sum/a[i][i];
         
     } 
     
}                                       //Gauss消去法函数结束 

void gauss::gauss_output()              //结果输出函数
{
     cout<<"\n结果是:"<<endl; 
     for(i=0;i<n;i++)
     {
        cout<<"\nx["<<i<<"] = "<<x[i]<<endl;
     }
     
     
}                                     //输出段结束 

矩阵Gauss消除法解线性方程
            
    
    博客分类: 顺序Gauss消除法  矩阵 数值分析  C++ 顺序Gauss消除法  矩阵 数值分析  C++ 
 












 

 

  • 矩阵Gauss消除法解线性方程
            
    
    博客分类: 顺序Gauss消除法  矩阵 数值分析  C++ 顺序Gauss消除法  矩阵 数值分析  C++ 
  • 大小: 10 KB
  • 矩阵Gauss消除法解线性方程
            
    
    博客分类: 顺序Gauss消除法  矩阵 数值分析  C++ 顺序Gauss消除法  矩阵 数值分析  C++ 
  • 大小: 14.4 KB