📄 guass.cpp
字号:
/*****************************************************************
***~!!~ Program:解决计算方法中的高斯消元法 ~!!~***
***~!!~ Written By:Jacky_Dai ~!!~***
***~!!~ Date:2005-11-15 ~!!~***
***~!!~ From:JiangSu University of Science and Technology ~!!~***
*****************************************************************/
#include<iostream.h>
#include<math.h>
#define size 3
double Gus[size][size+1]/*存放数据*/,Cur[size+1]/*存放最后所的结果*/;
void main()
{//void input()
cout.setf(ios::fixed);
cout.precision(2);
int fagx,fagy,i,j;
cout<<"Please input datas:\n";
/************************输入数据**********************/
for(i=0;i<size;i++)
for(j=0;j<size+1;j++)
cin>>Gus[i][j];
cout<<"**********输入的数据为:*****************\n";
for(int A1=0;A1<3;A1++)
for(int B1=0;B1<4;B1++)
{
cout<<Gus[A1][B1]<<" ";
if(B1==3)cout<<'\n';
}
/***************************输入结束***************************/
/*************************开始第i次比较,一共进行size-1次***************/
fagx=fagy=i;//最大值的坐标
for(i=0;i<2;i++)//i表示行数
{
for(int k=i+1;k<3;k++)//开始寻找主元
{
if(Gus[k][i]>Gus[i][i])
{ fagx=k;fagy=i;}
}
cout<<"********第"<<i+1<<"次交换*********\n";
for(int I=0;I<4;I++)
{
Cur[I]=Gus[i][I];
Gus[i][I]=Gus[fagx][I];
Gus[fagx][I]=Cur[I];
}
for(int A=0;A<3;A++)
for(int B=0;B<4;B++)
{
cout<<Gus[A][B]<<" ";
if(B==3)cout<<'\n';
}
cout<<"********第"<<i+1<<"次消后*********\n";
double Gus_h=Gus[i][i];
for(int a=i;a<4;a++)//第i行元素化为1
Cur[a]=Gus[i][a]/Gus_h;
for(int z=i;z<2;z++)//z为相减次数
{
double FABS=fabs(Gus[z+1][i]);//此处是为了避免直接带如而导致的动态变化问题
if(Gus_h*Gus[z+1][z]<0)//Gus_h=Gus[i][i]
for(int t=i;t<4;t++)
Gus[z+1][t]+=FABS*Cur[t];
else
for(int t=i;t<4;t++)
Gus[z+1][t]+=FABS*Cur[t];
}
/*****ADD***********/
for(int A1=0;A1<3;A1++)
for(int B1=0;B1<4;B1++)
{
cout<<Gus[A1][B1]<<" ";
if(B1==3)cout<<'\n';
}
/*****END_ADD**************/
}
cout<<"**********所有工作完成!***********************\n";
/********************************************************************************/
int s=1;
Cur[size-1]=Gus[size-1][size]/Gus[size-1][size-1];
for(int m=1;m>=0;m--)
{
int k=size-1,awp;
for(int n=1;n>=s;n--)
{
awp=Gus[m][3];
Gus[m][3]-=Gus[m][k]*Cur[k];//k=3
Cur[m]=Gus[m][3];
Gus[m][3]=awp;
k--;
}
Cur[m]/=Gus[m][m];
s--;
}
for(i=0;i<3;i++)
cout<<"Cur["<<i<<"]="<<Cur[i]<<" ";
cout<<'\n';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -