长江大学计算方法实验报告.docx
- 文档编号:6450439
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:44
- 大小:256.96KB
长江大学计算方法实验报告.docx
《长江大学计算方法实验报告.docx》由会员分享,可在线阅读,更多相关《长江大学计算方法实验报告.docx(44页珍藏版)》请在冰豆网上搜索。
长江大学计算方法实验报告
数值计算方法实验报告
学生姓名
序号
班级
指导老师
日期
计算方法实验报告
(一)
班级:
序号:
姓名:
一、实验题目:
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";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 长江大学 计算方法 实验 报告