//程序:张建波
#include "iostream.h"
double N[3][4]={
{0.0001,0.5402,0.3425,0.8828},
{1.235,2.567,0.9750,4.777},
{1.024,2.001,4.555,7.580}};
void PRINT()
{
//输出矩阵
cout<<"/n----------------------------------/n";
for(int i=0;i<3;i++)
{
for(int k=0;k<4;k++)
{cout<<N[i][k]<<" ";
if(N[i][k]==0)cout<<" ";
}
cout<<"/n";
}
cout<<"/n----------------------------------/n";
}
void f1()
{ //调整矩阵 按大到小顺序
double TMP;
int k=0;
int p=0,q=0;
//冒泡法
for(int i=p;i<3;i++)
for(int j=p;j<3;j++)
{
if(N[i][q]==N[j][q] && N[i][q]==0)
{
//如果 每行第 1 个元素已经为0 ,则 按第2元素排序
//依次类推,如果第2元素也为0 则按第3 元素排序
q++;
}
else
if(N[i][q]>N[j][q])
{//按 关键 元素对行排序
for(k=0;k<4;k++)
{
TMP=N[i][k];
N[i][k]=N[j][k];
N[j][k]=TMP;
}
}
}
}
void f2()
{
//消元
//变 第 1 个系数 为1
int i;
double a,T[4];
//默认从第2行开始消,第1个开始消
int R=1,L=0; // R=行 L=列
int q=0;
int h=0;
int n=1;
Loop:
for(h=R;h<3;h++)
{
a=-N[h][q]/N[q][q];
for(i=q;i<4;i++)
{
T[i]=N[q][i]*a;
N[h][i]+=T[i];
}
cout<<"/n第 "<<n++<<"次消元/n";PRINT();
if(h>0 && h<3 && N[h-1][q]==0 && N[h-1][q]==N[h][q])
{
f1();//排序
q++;
R++;
PRINT();
goto Loop;
}
}
}
void f3()
{
//迭代求根
int n=0;
double x2=(N[2][3]-N[2][1]-N[2][0])/N[2][2];
double x1=(N[1][3]-N[1][2]*x2-N[1][0])/N[1][1];
double x0=(N[0][3]-N[0][2]*x2-N[0][1]*x2)/N[0][0];
cout<<"X0="<<x0<<" X1="<<x1<<" X2="<<x2<<endl;
}
void main()
{
cout<<"原矩阵:/n";
PRINT();
cout<<"排序:/n";
f1();//排序
PRINT();
f2();//消元
PRINT();
f3();
}
#include "iostream.h"
double N[3][4]={
{0.0001,0.5402,0.3425,0.8828},
{1.235,2.567,0.9750,4.777},
{1.024,2.001,4.555,7.580}};
void PRINT()
{
//输出矩阵
cout<<"/n----------------------------------/n";
for(int i=0;i<3;i++)
{
for(int k=0;k<4;k++)
{cout<<N[i][k]<<" ";
if(N[i][k]==0)cout<<" ";
}
cout<<"/n";
}
cout<<"/n----------------------------------/n";
}
void f1()
{ //调整矩阵 按大到小顺序
double TMP;
int k=0;
int p=0,q=0;
//冒泡法
for(int i=p;i<3;i++)
for(int j=p;j<3;j++)
{
if(N[i][q]==N[j][q] && N[i][q]==0)
{
//如果 每行第 1 个元素已经为0 ,则 按第2元素排序
//依次类推,如果第2元素也为0 则按第3 元素排序
q++;
}
else
if(N[i][q]>N[j][q])
{//按 关键 元素对行排序
for(k=0;k<4;k++)
{
TMP=N[i][k];
N[i][k]=N[j][k];
N[j][k]=TMP;
}
}
}
}
void f2()
{
//消元
//变 第 1 个系数 为1
int i;
double a,T[4];
//默认从第2行开始消,第1个开始消
int R=1,L=0; // R=行 L=列
int q=0;
int h=0;
int n=1;
Loop:
for(h=R;h<3;h++)
{
a=-N[h][q]/N[q][q];
for(i=q;i<4;i++)
{
T[i]=N[q][i]*a;
N[h][i]+=T[i];
}
cout<<"/n第 "<<n++<<"次消元/n";PRINT();
if(h>0 && h<3 && N[h-1][q]==0 && N[h-1][q]==N[h][q])
{
f1();//排序
q++;
R++;
PRINT();
goto Loop;
}
}
}
void f3()
{
//迭代求根
int n=0;
double x2=(N[2][3]-N[2][1]-N[2][0])/N[2][2];
double x1=(N[1][3]-N[1][2]*x2-N[1][0])/N[1][1];
double x0=(N[0][3]-N[0][2]*x2-N[0][1]*x2)/N[0][0];
cout<<"X0="<<x0<<" X1="<<x1<<" X2="<<x2<<endl;
}
void main()
{
cout<<"原矩阵:/n";
PRINT();
cout<<"排序:/n";
f1();//排序
PRINT();
f2();//消元
PRINT();
f3();
}