列主元法解方程C++

//程序:张建波
#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();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值