?? 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 + -