列选主元guass消去法

200701020110     07计算机           王再
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
void main()

 int flag=1;
 input();    //输入方程 
 while(flag)
 { 
  print_menu();  //打印主菜单
}
void print_menu()

 system("cls");
 cout<<"方程系数和常数矩阵表示如下:\n";
 for(int j=0;j<length;j++)
 cout<<"系数"<<j+1<<"   ";
 cout<<"\t常数";
 cout<<endl;
 for(int i=0;i<length;i++)
 {
  for(j=0;j<length;j++)
   cout<<setw(8)<<setiosflags(ios::left)<<a[i][j];
  cout<<"\t"<<b[i]<<endl;
 }
cout<<" gauss_row()\n";
cout<<"exit\n";
void print_menu(){ 
 system("cls");
 cout<<"方程系数和常数矩阵表示如下:\n";
 for(int j=0;j<lenth;j++)
 cout<<"系数"<<j+1<<"   ";
 cout<<"\t常数";
 cout<<endl;
 for(int i=0;i<length;i++)
 {
  for(j=0;j<length;j++)
   cout<<setw(8)<<setiosflags(ios::left)<<a[i][j];
  cout<<"\t"<<b[i]<<endl;
 }
cout<<" gauss_row()\n";
cout<<"exit\n";
void input()
{ int i,j;
 cout<<"方程的个数:3\n";
 cin>>length;
 if(length>Number)
 { 
  cout<<"It is too big.\n";
  return; 
 }
 x=new char[length]; 
 for(i=0;i<length;i++)
  x[i]='a'+i;
cout<<3x+2y+z=14<<x+y+z=10<<2x+3y-z=1;
cout<<"请在每个方程里输入"<<length<<"系数和一个常数:\n";
  cout<<"例:\n方程:3x+2y+z=14";
 for(i=1;i<lenth;i++)
 {
  cout<<"+"<<i+1<<x[i];
 }
 cout<<"=10\n";
 cout<<"应输入:"<<3x+2y+z=14<<x+y+z=10<<2x+3y-z=1;
 for(i=0;i<lenth;i++)
  cout<<i+1<<" ";
 cout<<"10\n";
 cout<<"\n";
  for(i=0;i<lenth;i++)
 { 
  cout<<"输入方程:"<<3x+2y+z=14<<x+y+z=10<<2x+3y-z=1;
  for(j=0;j<lenth;j++)
   cin>>a[i][j];
  cin>>b[i];
 }
 for(i=0;i<length;i++)
  for(j=0;j<length;j++)
  copy_a[i][j]=a[i][j];
 for(i=0;i<length;i++)
  copy_b[i]=b[i];
 copy_length=length;
}
void gauss_row()
{
 int i,j;
 gauss_row_xiaoqu();   //用高斯列主元消区法将系数矩阵变成一个上三角矩阵
for(i=0;i<length;i++)
 {
  for(j=0;j<length;j++)
   cout<<setw(10)<<setprecision(5)<<a[i][j];
  cout<<setw(10)<<b[i]<<endl;
 }

 if(a[length-1][length-1]!=0)
 {
 
  cout<<"系数行列式不为零,方程有唯一的解:\n";
  gauss_calculate();
  for(i=0;i<length;i++)   //输出结果
  { 
   cout<<x[i]<<"="<<b[i]<<"\n";
  }
 }
 else
  cout<<"系数行列式等于零,方程没有唯一的解.\n";
}


void gauss_row_xiaoqu()   //高斯列主元消去法
{
 int i,j,k,maxi;double lik;
 cout<<"用Gauss列主元消去法结果如下:\n";
 for(k=0;k<lenth-1;k++)
 { 
  j=k;
  for(maxi=i=k;i<lenth;i++)
   if(a[i][j]>a[maxi][j]) maxi=i;
  if(maxi!=k) 
   exchange_hang(k,maxi);//
  
  
  for(i=k+1;i<length;i++)
  { 
   lik=a[i][k]/a[k][k];
   for(j=k;j<length;j++)
    a[i][j]=a[i][j]-a[k][j]*lik;
   b[i]=b[i]-b[k]*lik;
  }
 }
}

你可能感兴趣的:(职场,.,休闲)