}
cout<<"\n";
}
}
voidInit()
{
cout<<"pleaseinputanumber:
";
cin>>n;
a=newfloat*[n+1];//二元数组初始化,表示行数
for(inti=1;i<=n;i++)
{
a[i]=newfloat[n+2];//表示列数
}
x=newfloat[n+1];
L=newdouble*[n+1];
U=newdouble*[n+1];
for(inti=1;i<=n;i++)
{
L[i]=newdouble[n+1];
U[i]=newdouble[n+1];
}
y=newdouble[n+1];
for(inti=1;i<=n;i++)
{
for(intj=1;j<=n;j++)
{
L[i][j]=0;
if(i==j)
L[i][j]=1;
U[i][j]=0;
}
}
}
voidCalcuLU()
{
for(intr=1;r<=n;r++)
{
//Urj
for(intj=r;j<=n;j++)
{
floatsum=0;
for(intk=1;k<=r-1;k++)
{
sum+=L[r][k]*U[k][j];
}
U[r][j]=a[r][j]-sum;
}
//Lir
if(r!
=n)
{
for(inti=r+1;i<=n;i++)
{
floatsum=0;
for(intk=1;k<=r-1;k++)
{
sum+=L[i][k]*U[k][r];
}
L[i][r]=(a[i][r]-sum)/U[r][r];
}
}
}
}
voidCalcuY()
{
//LY=b
for(inti=1;i<=n;i++)
{
floatsum=0;
for(intk=1;k<=i-1;k++)
{
sum+=L[i][k]*y[k];
}
y[i]=(a[i][n+1]-sum);
}
}
voidOutPutLU()
{
cout<cout<<"----L-----------"<for(inti=1;i<=n;i++)
{
for(intj=1;j<=n;j++)
{
cout<}
cout<}
cout<<"----U-----------"<for(inti=1;i<=n;i++)
{
for(intj=1;j<=n;j++)
{
cout<
}
cout<}
}
voidCalcuX()
{
//Ux=y
for(inti=n;i>=1;i--)
{
floatsum=0;
for(intk=i+1;k<=n;k++)
{
sum+=U[i][k]*x[k];
}
x[i]=(y[i]-sum)/U[i][i];
}
}
voidOutPutX()//结果输出函数
{
for(inti=1;i<=n;i++)
{
cout<<"x["<
}
}
voidmain(intargc,char*argv[])
{
Init();
Input();
Output();
CalcuLU();
CalcuY();
CalcuX();
OutPutLU();
OutPutX();
}
----------------------------------------------------------------------------------------------------------------------
LU.h:
#ifndefLU
#defineLU
double**L;//矩阵L
double**U;//矩阵U
double*y;
float**a;
float*x;
intn;
voidOutPutLU();
voidCalcuY();
voidCalcuLU();
voidOutPutX();
voidOutput();
voidInit();
voidInput();
voidCalcuA();
voidCalcuX();
#endif
结果:
实验五(Gauss-Jordan消去法):
Jordan.cpp:
#include"iostream"
usingnamespacestd;
#include"Jordan.h"
#include"math.h"
voidInput()//数据的输入
{
cout<<"pleaseinputnumbers:
\n";
for(inti=1;i<=n;i++)//i表示行,j表示列
{
for(intj=1;j<=n+1;j++)
{
cin>>a[i][j];
}
}
Output();
}
voidOutput()
{
cout<<"矩阵为:
\n";
for(inti=1;i{
for(intj=1;j{
cout<}
cout<<"\n";
}
}
voidInit()
{
cout