注册 登录
编程论坛 C++教室

高斯约当消元法解线性方程组

林暮雪 发布于 2011-06-03 21:46, 877 次点击
要求用c++编写  要用到类和类的派生

#include<iostream>
#include<cmath>
#include<iomanip>
#define kk 50  //定义最大方程元数
int n;
using namespace std;
void changer(double *p,double *q);            
main()
{
 
 int i,j,k,s;
 double A[kk][kk],r,l[kk][kk],b[kk],u,temp;
aa: cout<<"输入的方程元数"<<endl;
 cin>>n;
 cout<<"请输入方程系数矩阵:"<<"\n";
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   cin>>A[i][j];
 cout<<"请输入右边向量:"<<"\n";
 for(i=0;i<n;i++)
  cin>>b[i];
 for(k=0;k<n-1;k++)
 {
  s=k;
  r=fabs(A[k][k]);
  for(i=k;i<n;i++)     
   if(r<fabs(A[i][k]))
   {
    r=fabs(A[i][k]);
    s=i;
   }//获取主元
   if(s!=k)
   {
    changer(*(A+k),*(A+s));//交换行元素
    temp=b[k];b[k]=b[s];b[s]=temp; //右边向量的交换
   }
   cout<<"第"<<k+1<<"次选取主元并交换行的顺序"<<endl;
   for (i=0;i<n;i++)
   {
    for (j=0;j<n;j++)
     cout<<setw(4)<<setprecision(4)<<A[i][j]<<"   ";
    cout<<b[i]<<endl;
   }//
   cout<<endl;
   for(i=k+1;i<n;i++)
   {
    l[i][k]=A[i][k]/A[k][k];//计算消去系数
    for(j=k;j<n;j++)
     A[i][j]=A[i][j]-l[i][k]*A[k][j];
    b[i]=b[i]-l[i][k]*b[k];
   }//消元过程
   cout<<"第"<<k+1<<"次消元"<<endl;
   for (int e=0;e<n;e++)
   {
    for (j=0;j<n;j++)
     cout<<setw(4)<<setprecision(4)<<A[e][j]<<"   ";
    cout<<b[e]<<endl;
   }
   cout<<endl;
 }
 if(A[k][k]<0.0001)
 {
  cout<<"系数矩阵是非奇异矩阵!"<<"\n";
  cout<<"所以:方程无唯一解!"<<"\n";
  cout<<"请问是否?"<<endl;
     cout<<"退出请输入1"<<endl;
     cout<<"要继续请输入任意非1的整数"<<endl;
     int g;
     cin>>g;
  if(g!=1)goto aa;
    else exit(1);
 }//判断系数矩阵的奇异性
 for(i=n-1;i>=0;i--)
 {
  u=0;
  for(j=i+1;j<n;j++)
   u=u+A[i][j]*b[j];
  b[i]=(b[i]-u)/A[i][i];
 }
 cout<<"最后得方程的根为:"<<"\n";
 for(i=0;i<n;i++)
  cout<<"x"<<i+1<<"="<<b[i]<<"\n";
 
 system("pause");
 return 0;
}
void changer(double *p,double *q)            
{
 int i;
 double temp;
 for(i=0;i<n;i++)
 {
  temp=*(p+i);
  *(p+i)=*(q+i);
  *(q+i)=temp;
 }
}
哪位大大给我改写下子嘛 类的使用我不太熟悉额
5 回复
#2
林暮雪2011-06-06 10:57
话说怎么没有人回复呢
#3
寒风中的细雨2011-06-06 12:20
把你main当中空出来  采用函数调用的方式

然后把函数调用封装成类得方法   调用之间要用到的变量就可以封装成类的属性
#4
linw12252011-06-07 11:31
不觉得代码太乱了?
#5
一切皆安2011-06-07 22:45
都忘了这个消元法了
#6
林暮雪2011-06-09 14:35
回复 3楼 寒风中的细雨
给我改下撒   帮帮忙啦
1