`
luozhong915127
  • 浏览: 186424 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论
阅读更多

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



 

 

 

 

  

#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;
     }
     
     
}                                     //输出段结束 


 












 

 

  • 大小: 10 KB
  • 大小: 14.4 KB
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics