1487 3

Gauss消元法的C++代码实现 [推广有奖]

  • 0关注
  • 3粉丝

讲师

7%

还不是VIP/贵宾

-

威望
0
论坛币
542 个
通用积分
1.0068
学术水平
20 点
热心指数
24 点
信用等级
9 点
经验
3070 点
帖子
230
精华
0
在线时间
21 小时
注册时间
2010-8-5
最后登录
2012-10-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
呵呵,最近好像冷落了我的BLOG。
今天练练手,实现了数值分析的GAUSS消元法。
具体代码:


#include<iostream>
#include <math.h>
using namespace std;

const int N = 2;

class gauss
{
private:
   double a[N][N+1];
   double x[N];
public:
   gauss();
   int  find_max(int row_number);
   void exchange_row(int larger_row_number, int smaller_row_number);
   void re_set_row(int row_number);
   bool caculate_out();
   void print_out();
};

gauss::gauss()
{
   int i,j;
   for(i=1;i<N+1;i++)
   {
      cout<<"Please input row"<<i<<endl;
      for(j=1;j<N+2;j++)
      {
         cout<<"Please input "<<"a["<<i<<"]["<<j<<"]";
         cin>>a[i][j];
      }
   }
   cout<<"gauss:gauss() inited ok"<<endl;
}

int gauss::find_max(int row_number)
{
   int  max_i=row_number;
   int j;
   for(int i=row_number+1;i<N+1;i++)
      if(abs(a[j][row_number]) > abs(a[max_i][row_number]) )
         max_i = j;
   cout<<"gauss::find_max(int row_number) ok!"<<endl;
   return max_i;
}


void gauss::exchange_row(int larger_row_number , int smaller_row_number)
{
   // int  max_one;
   double max_value;
/*
if(larger_row_number <  smaller_row_number )
   {
      max_one = larger_row_number;
      larger_row_number = smaller_row_number;
      smaller_row_number = max_one;
   }
*/
   for(int i=smaller_row_number;i<N+2;i++)
   {
      max_value = a[smaller_row_number][i];
      a[smaller_row_number][i] = a[larger_row_number][i];
      a[larger_row_number][i]  = max_value;
   }
   cout<<"gauss::exchange_row(int larger_row_number, int smaller_row_number) ok!"<<endl;
}

void gauss::re_set_row(int row_number)
{
   int i,j;
   for(i=row_number+1;i<N+1;i++)
   {
      a[i][row_number]=a[i][row_number]/a[row_number][row_number];
   for(j=row_number+1;j<N+2;j++)
      a[i][j]=a[i][j]-a[i][row_number]*a[row_number][j];
   }
   cout<<"gauss::re_set_row(int row_number) ok !"<<endl;
}


bool  gauss::caculate_out()
{
   if(a[N][N] == 0)
   {
      cout<<"Sorry,there is no result!"<<endl;
      return 0;
   }
   else
   {
      double sum;
      x[N]=a[N][N+1]/a[N][N];
      int j=0;
      for(int k=N-1;k>0;k--)
      {
         sum=0;
         for(j=k+1;j<N+1;j++)
         {
            sum+=a[k][j]*x[j];
         }
         x[k]=(a[k][N+1]-sum)/a[k][k];
      }
   }
   cout<<"gauss::caculate_out() ok !"<<endl;
   return 1;
}



void gauss::print_out()
{
   for(int i=1;i<N+1;i++)
      cout<<"x["<<i<<"] :"<<"   "<<x[i]<<endl;
   cout<<"gauss::print_out() ok!"<<endl;
}

int  main()
{

   gauss gau;

   for(int counter=1;counter<N+1;counter++)
   {
      if(counter != gau.find_max(counter))
      {
         gau.exchange_row( gau.find_max(counter) , counter );
      }
      gau.re_set_row(counter);
   }
   if( gau.caculate_out())
   {
      gau.print_out();
      cout<<"ok,I have finished gauss ";
   }
   else { cout<<"Sorry ,there is no result!"; }

   return 1;
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:GAUSS Aus USS exchange caculate GAUSS 代码

在职研究生报名时间http://tdxl.zzyjs.com
沙发
823790288 在职认证  发表于 2011-2-11 11:30:51 |只看作者 |坛友微信交流群
好人的东西啊

使用道具

藤椅
zhaomn200145 发表于 2011-2-11 20:25:23 |只看作者 |坛友微信交流群
{:3_58:}完全看不懂,汗一个。

使用道具

板凳
gzb161 发表于 2011-2-15 14:26:38 |只看作者 |坛友微信交流群
貌似是发错版块了吧

这个跟GAUSS软件没有什么关系

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 21:50