长江大学计算方法实验报告.docx

上传人:b****6 文档编号:6450439 上传时间:2023-01-06 格式:DOCX 页数:44 大小:256.96KB
下载 相关 举报
长江大学计算方法实验报告.docx_第1页
第1页 / 共44页
长江大学计算方法实验报告.docx_第2页
第2页 / 共44页
长江大学计算方法实验报告.docx_第3页
第3页 / 共44页
长江大学计算方法实验报告.docx_第4页
第4页 / 共44页
长江大学计算方法实验报告.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

长江大学计算方法实验报告.docx

《长江大学计算方法实验报告.docx》由会员分享,可在线阅读,更多相关《长江大学计算方法实验报告.docx(44页珍藏版)》请在冰豆网上搜索。

长江大学计算方法实验报告.docx

长江大学计算方法实验报告

 

数值计算方法实验报告

 

学生姓名

序号

班级

指导老师

日期

 

 

计算方法实验报告

(一)

班级:

序号:

姓名:

一、实验题目:

Gauss消去法解方程组

二、实验学时:

2学时

三、实验目的和要求

1、掌握高斯消去法基础原理

2、掌握高斯消去法解方程组的步骤

3、能用程序语言对Gauss消去法进行编程实现

四、实验过程代码及结果

实验1:

1.代码

Gauss.cpp:

#include"iostream.h"

#include"gauss.h"

voidoutput()

{

cout<<"输入的矩阵为:

\n";

for(inti=1;i

{

for(intj=1;j

{

cout<

}

cout<<"\n";

}

}

voidinput()

{

cout<<"pleaseinputanumber:

";

cin>>n;

x=newfloat[n+1];

a=newfloat*[n+1];

for(inti=1;i

{

a[i]=newfloat[n+2];

}

cout<<"pleaseinputnumbers:

\n";

for(i=1;i

{

for(intj=1;j

{

cin>>a[i][j];

}

}

output();

}

voidcalcu_A()

{

for(inti=1;i

{

for(intj=i+1;j

{

floatlik=a[j][i]/a[i][i];

for(intk=i+1;k

{

a[j][k]=a[j][k]-lik*a[i][k];

}

a[j][i]=0;

}

}

output();

}

voidcalcu_X()

{

x[n]=a[n][n+1]/a[n][n];

for(inti=n-1;i>=1;i--)

{

floatsum=0.0;

for(intj=n;j>i;j--)

{

sum+=x[j]*a[i][j];

}

x[i]=(a[i][n+1]-sum)/a[i][i];

}

for(i=1;i

cout<<"x["<

}

voidmain()

{

input();

calcu_A();

calcu_X();

}

Gauss.h:

#ifndef_gauss

#define_gauss

intn;

float**a;

float*x;

voidinput();

voidoutput();

voidcalcu_A();

voidcalcu_X();

#endif

2.结果

实验2(Gauss列主元消去法):

1.代码

Guass.cpp

#include"iostream"

#include"Gauss.h"

#include"math.h"

usingnamespacestd;

voidoutput()

{

cout<<"矩阵为:

\n";

for(inti=1;i

{

for(intj=1;j

{

cout<

}

cout<<"\n";

}

}

voidinput()

{

cout<<"pleaseinputanumber:

";

cin>>n;

x=newfloat[n+1];

a=newfloat*[n+1];

for(inti=1;i

{

a[i]=newfloat[n+2];

}

cout<<"pleaseinputnumbers:

\n";

for(i=1;i

{

for(intj=1;j

{

cin>>a[i][j];

}

}

output();

}

voidexchange(intk,float**a)

{

intik,jk=k;

floatmax=a[k][k];

for(inti=k;i<=n;i++)

{

for(intj=k;j<=n;j++)

{

if(max

{

max=fabs(a[i][j]);

ik=i;

jk=j;

}

}

}

//output();

if(a[ik][jk]==0)

return;

if(ik!

=k)

{

for(intj=k;j<=n+1;j++)//行互换

{

floattemp3=a[k][j];

a[k][j]=a[ik][j];//12102233-1-302

a[ik][j]=temp3;

}

}

if(jk!

=k)

{

for(inti=1;i<=n;i++)//列互换

{

floattemp1=a[i][k];

a[i][k]=a[i][jk];

a[i][jk]=temp1;

}

inttemp2=Z[k];

Z[k]=Z[jk];

Z[jk]=temp2;

}

output();

}

voidcalcu_A(intk,float**a)

{

while(k

{

exchange(k,a);

inti=k;

for(intj=i+1;j

{

floatlik=a[j][i]/a[i][i];

for(intr=i+1;r

{

a[j][r]=a[j][r]-lik*a[i][r];

}

//cout<

a[j][i]=0;

}

k++;

}

inti=n-1;

for(intj=i+1;j

{

floatlik=a[j][i]/a[i][i];

for(intr=i+1;r

{

a[j][r]=a[j][r]-lik*a[i][r];

}

//cout<

a[j][i]=0;

}

output();

}

voidcalcu_X()

{

for(inti=n;i>=1;i--)//12102233-1-302

{

floatsum=0;

for(intj=i+1;j<=n;j++)

{

sum+=a[i][j]*x[Z[j]];

}

x[Z[i]]=(a[i][n+1]-sum)/a[i][i];

}

for(i=1;i<=n;i++)

cout<<"x["<

}

voidmain()

{

intk=1;//12102233-1-302

input();//2171-3-2

Z=newint[n+1];

for(inti=1;i<=n;i++)

{

Z[i]=i;

}

calcu_A(k,a);

calcu_X();

}

 

Gauss.h

#ifndefGauss

#defineGauss

intn;

float**a;

float*x;

int*Z;

voidinput();

voidoutput();

voidcalcu_A(intk,float**a);

voidexchange(intk,float**a);

voidcalcu_X();

#endif

2.结果

 

-------------------------------------------------------------------------------------------------------

实验3:

Gaussall.cpp

#include"iostream"

#include"Gaussall.h"

#include"math.h"

usingnamespacestd;

voidoutput()

{

cout<<"矩阵为:

\n";

for(inti=1;i

{

for(intj=1;j

{

cout<

}

cout<<"\n";

}

}

voidinput()

{

cout<<"pleaseinputanumber:

";

cin>>n;

x=newfloat[n+1];

a=newfloat*[n+1];

for(inti=1;i

{

a[i]=newfloat[n+2];

}

cout<<"pleaseinputnumbers:

";

for(i=1;i

{

for(intj=1;j

{

cin>>a[i][j];

}

}

output();

}

voidexchange(intk,float**a)

{

intik,jk=k;

floatmax=a[k][k];

for(inti=k;i<=n;i++)

{

for(intj=k;j<=n;j++)

{

if(max

{

max=fabs(a[i][j]);

ik=i;

jk=j;

}

}

}

output();

if(a[ik][jk]==0)

return;

if(ik!

=k)

{

for(intj=k;j<=n+1;j++)//行互换

{

floattemp3=a[k][j];

a[k][j]=a[ik][j];//12102233-1-302

//cout<<"a[k][j]="<

a[ik][j]=temp3;

//cout<<"a[ik][j]="<

}

}

if(jk!

=k)

{

for(inti=k;i<=n;i++)//列互换

{

inttemp1=a[i][k];

a[i][k]=a[i][jk];

a[i][jk]=temp1;

}

inttemp2=Z[k];

Z[k]=Z[jk];

Z[jk]=temp2;

}

output();

}

voidcalcu_A(intk,float**a)

{

while(k

{

exchange(k,a);

inti=k;

for(intj=i+1;j

{

floatlik=a[j][i]/a[i][i];

//cout<<"lik="<

for(intr=i+1;r

{

a[j][r]=a[j][r]-lik*a[i][r];

//cout<<"a[j][r]="<

}

cout<

a[j][i]=0;

}

k++;

}

}

voidcalcu_X()

{

for(inti=n;i>=1;i--)

{

floatsum=0;

for(intj=i+1;j<=n;j++)

{

sum+=a[i][j]*x[Z[j]];

}

x[Z[i]]=(a[i][n+1]-sum)/a[i][i];

}

for(i=1;i<=n;i++)

cout<<"x["<

}

voidmain()

{

intk=1;//12102233-1-302

input();//2171-3-2

Z=newint[n+1];

for(inti=1;i<=n;i++)

{

Z[i]=i;

}

calcu_A(k,a);

calcu_X();

}

 

Gaussall.h

#ifndefGaussall

#defineGaussall

intn;

float**a;

float*x;

int*Z;

voidinput();

voidoutput();

voidcalcu_A(intk,float**a);

voidexchange(intk,float**a);

voidcalcu_X();

#endif

结果:

 

实验四(LU分解):

LU.cpp:

#include"iostream"

usingnamespacestd;

#include"LU.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<<"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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1