数值方法实验报告.docx
- 文档编号:26561798
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:44
- 大小:380.47KB
数值方法实验报告.docx
《数值方法实验报告.docx》由会员分享,可在线阅读,更多相关《数值方法实验报告.docx(44页珍藏版)》请在冰豆网上搜索。
数值方法实验报告
本科实验报告
课程名称:
数值计算方法
实验项目:
实验一二三四
实验地点:
实验楼110
专业班级:
物联网1601学号:
2016002105
学生姓名:
俞梦真
指导教师:
田华
2018年06月28日
实验名称:
实验一方程求根
实验时间:
18年5月31日
实验目的和要求:
1.了解方程求根的基本方法、基本原理、误差估计;
2.能够按照工程实际要求,选择适当的算法;
3.通过编写程序,进行算法设计和数值求解。
实验内容和原理:
1.熟悉使用二分法、迭代法、牛顿法、割线法等方程求根的基本方法、基本原理、误差估计的相关理论。
2.选择方程求解方法中的两种方法求方程:
f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|<0.5×10-5。
主要仪器设备:
笔记本一台
上机调试修改源程序:
1、二分
#include
#include
usingnamespacestd;
doubleans;
constdoublee=0.5*1e-5;//0.5*1e-5
doublef(doublex)
{
returnx*x*x+4*x*x-10;
//returnx*x-x-1;
}
doublef1(doublex)
{
return3*x*x+8*x;
}
voider_f(doublel,doubler)
{
doubleleft=f(l);
doubleright=f(r);
doublemid;
intflag1=left>0?
1:
0;
intflag2=right>0?
1:
0;
doublem=(l+r)/2;
intcnt=1;
while((r-m)>e)
{
cnt++;
//cout< mid=f(m); printf("L=%.5fR=%.5fM=%.5fF()=%.5fe=%.5f\t\n",l,r,m,mid,r-m); intflag3=mid>0? 1: 0; if(flag3==flag1) { l=m; } else { r=m; } m=(l+r)/2; } printf("L=%.6fR=%.6fM=%.6fF()=%.6fe=%.6f\t\n",l,r,m,mid,r-m); printf("%.6lf%d\n",m,cnt); } doubleff(doublex) { cout< if(x>0.5*1e-5) returnf(x); else returnx; } intmain() { er_f(1,2); //ff(1.5); return0; } 2、牛顿法 #include #include #include usingnamespacestd; constdoublee=0.5*1e-5;//精度 doubleF(doublex) { returnx*x*x+4*x*x-10; //returnx*x-115; } doublef(doublex) { return3*x*x+8*x;//可作为迭代条件 //return2*x; } voidNewdun_d(doublex,intcnt) { doublex2=x-(F(x)/f(x)); printf("x%d=%lfx%d=%lf\n",cnt-1,x,cnt,x2); if(fabs(x2-x) printf("%lf%d\n",x2,cnt); else Newdun_d(x2,cnt+1); } intmain() { doublex; cin>>x; Newdun_d(x,1); } 3、割线法 #include #include #include usingnamespacestd; //双点割线法 constdoublee=0.5*1e-5;//精度 doublef(doublex) { returnx*x*x+4*x*x-10; //returnx*x*x-3*x-1; } voidGexian_d(doublex0,doublex1,intcnt) { doublex2=x1-(f(x1)/(f(x1)-f(x0)))*(x1-x0); printf("x%d=%.6lfx%d=%.6lf\n",cnt-1,x0,cnt,x1); if(fabs(x2-x1) { printf("x%d=%.6lfx%d=%.6lf\n",cnt-1,x1,cnt,x2); printf("%.6lf%d\n",x2,cnt); } else Gexian_d(x1,x2,cnt+1); } intmain() { doublex0,x1; cin>>x0>>x1; Gexian_d(x0,x1,1); } 实验结果与分析 (1)二分法 (2)牛顿法 (3)割线法 讨论、心得(可选): 本次实验的内容不是很难弄,但是也有很多地方可以继续改进,比如对原始函数的处理就可以采用输入的方法进行,这样子对程序的应用性更好。 其实个人感觉是要对精度这方面要仔细。 实验名称: 实验二线性方程组的直接解法 实验时间: 18年6月6日 实验目的和要求: 1.了解Gauss消元法、LU分解法等线性方程组直接求解的基本方法、基本原理; 2.通过编写程序,进行算法设计和数值求解。 实验内容和原理: 利用高斯消元法、LU分解法分别求解下列方程组: ① ③ 主要仪器设备: 计算机一台 上机调试修改源程序: 1.高斯消元法 (1)列主元素消元法 //列主元素消元法 #include #include #include #include usingnamespacestd; constintmaxn=100; constintinf=0x7f7f7f7f; doublea[maxn][maxn]; doublex[maxn];//解向量 intn; voidXiao_gauss(intcur)//不交换列 { if(cur==n) { cout< for(inti=0;i { for(intj=0;j<=n;j++) printf("%lf",a[i][j]); cout< } return; } else{ intid=cur; doublemax_r=0; for(inti=cur;i if(fabs(a[i][cur])>max_r)max_r=fabs(a[i][cur]),id=i; //cout< for(inti=0;i<=n;i++)//两行元素调换 { doubletmp=a[id][i]; a[id][i]=a[cur][i]; a[cur][i]=tmp; } for(inti=cur+1;i { doublet=a[i][cur]/a[cur][cur]; for(intj=cur;j<=n;j++)// { a[i][j]=a[i][j]-a[cur][j]*t; //cout< } } Xiao_gauss(cur+1); } } voidf_x() { for(inti=n-1;i>=0;i--) { doublesum=0; for(intj=i+1;j<=n-1;j++) sum+=a[i][j]*x[j]; //cout< x[i]=(a[i][n]-sum)/a[i][i]; } for(inti=0;i cout<<"x"< } intmain() { cin>>n; for(inti=0;i for(intj=0;j<=n;j++) cin>>a[i][j]; /*for(intj=0;j a[n+1][j]=j; a[n+1][n]=0.0;*/ //列消元法。 Xiao_gauss(0); f_x(); return0; } /* 3 12314 0128 24113 3 0.0012.0003.0001.000 -1.0003.7124.6232.000 -2.0001.0725.6433.000 */ (2)完全主元素消元法 #include #include #include #include usingnamespacestd; constintmaxn=100; constintinf=0x7f7f7f7f; doublea[maxn][maxn]; doublex[maxn];//解向量 intn; voidshow() { cout< for(inti=0;i<=n;i++) { for(intj=0;j<=n;j++) printf("%lf",a[i][j]); cout< } return; } voidXiao_gauss(intcur)//完全 { if(cur==n) { show(); return; } else{ intid_i=cur; intid_j=cur; doublemax_r=0; for(inti=cur;i for(intj=cur;j if(fabs(a[i][j])>max_r) { max_r=fabs(a[i][cur]); id_i=i; id_j=j; } //cout< for(inti=0;i<=n;i++)//行元素调换 { doubletmp=a[id_i][i]; a[id_i][i]=a[cur][i]; a[cur][i]=tmp; } for(inti=0;i<=n+1;i++)//列元素交换 { doubletmp=a[i][id_j]; a[i][id_j]=a[i][cur]; a[i][cur]=tmp; } //cout<<"wanquan"< //show(); for(inti=cur+1;i { doublet=a[i][cur]/a[cur][cur]; for(intj=cur;j<=n;j++)// { a[i][j]=a[i][j]-a[cur][j]*t; //a[i][j]=(a[cur][cur]*a[i][j]-a[cur][j]*a[i][cur]); //a[i][j]/=a[cur][cur];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 方法 实验 报告