《数值计算方法》实验报告
实验题目 二分法求非线性方程的根
专业班级 11级数学师范二班
姓 名
学 号 201102024056
指导老师 李 梦
联系电话 188xxxxxxxx
一、 实验目的
熟悉二分法求方程近似根的数值方法,与用计算器解出的值进行比较,并学会误差分析。
二、 实验原理
二分法的基本思路是通过计算隔根区间的中点,逐步将隔根区间缩小,从而可得方程的近似根数列{xn}x*?xk?1??。()?
三、 实验内容
已知f(x)?x3?e(?3)?0在?0,1?上有一个实根x*,f(0)?0,f(1)?0,可用二分法求该实根,要求精度满足条件:x*?xk?1?0.05。
本实验中的用到的求根方法有①二分法,②计算器求根。
四、 实验步骤
1.输入:a,b值及精度控制?量;
2.iff(a)f(b)?0then返回第1步,重新输入a,b 值else转第3步;
3.whilea?b??时做
1x?(a?b)2 (1),计算f(x);if f(x)=0 then输
出x,停机。
(2)if
[a,b]?[x,b]f(a)f(x)?0 then [a,b]?[a,x],else endwhile;
1x?(a?b)2 4.输出。
五、 Matlab源程序
1.erfen.m:
function [c,err,yc]=erfen(f,a,b,delta)
ya = feval(f,a);
yb = feval(f,b);
if ya * yb > 0 ,return,end
max1 = 1+round((log(b-a)-log(delta))/log(2)); for k=1:max1
c=(a+b)/2;
yc=feval(f,c);
if yc==0
a=c;
b=c;
elseif yb * yc > 0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
if b-a<delta,break,end
end
c=(a+b)/2;
err=abs(b-a);
yc=feval(f,c);
2.f.m:
function f=f(x);
f=x^3-exp(-x);
六、 运行结果
七、 计算机计算结果
八、 实验分析
1、 二分法和计算器均能解出方程的根。
2、 二分法的精确度更高,收敛性较好。
3、 但在所要计算的函数不是很难的时候,用计算机计算比较便捷,只 是误差比二分法大。
4、 在用二分法计算的过程中,精度选择越小误差越小。
九、 收获与感想
学到了:本次实验我在看书与总结的基础上熟练掌握了二分法解方程的根的具体步骤,感受了二分法的简单便利,深刻体会到了学习数值计算方法的重要性与实用性。
感受:本次实验在刚开始时觉得无从下手,但当我真正投入其中时,便觉得只要认真花心思和时间去做,没有什么是办不到的。于是在和其他课程不冲突的情况下,我用课余时间完成了本次实验,以后在学习中我也会像这次一样认真对待的。
第二篇:数值计算方法实验报告jrh
一、实验的性质、目的和任务
本实验是与本专业基础课《数值计算方法》相配套的,旨在巩固专业课内容和学生编程的能力。
通过实验加强对数值方法的理解和掌握,编制出适用的程序。同时,在理论教学的基础上,注意方法处理的技巧及其与计算机的结合,;其次要通过例子,学习使用各种数值方法解决实际计算问题。
要求学生应用高级计算机语言Matlab编程完成实验。
二、实验基本要求
要求熟悉高级计算机语言Matlab,以及相关上机操作说明;上机时要遵守实验室的规章制度,爱护实验设备;记录调试过程及结果。
三、实验原理
应用高级计算机语言实现数值计算方法课程中的各种算法。
四、设备及器材配置
主机:微机
操作系统:WINDOWS 98以上
软件:高级计算机语言Matlab
五、考核与报告
每个实验完成后交一份实验报告。本实验作为平时成绩的一部分占学期期末总成绩的20%。
六、适用对象
自动化专业
七、主要参考书
1. 王能超编,《数值分析简明教程》,高等教育出版社,20##年,第2版
2. 封建湖编,《数值分析原理》,科学出版社,20##年,第1版
3. 冯有前编,《数值分析》,清华大学出版社,20##年,第1版
4. 周璐等译, John H. Mathews等编,《数值方法(MATLAB版)》,电子工业出版社,20##年,第二版
实验一 采用拉格朗日方法计算插值
一、 实验目的:
1. 掌握多项式插值的概念、存在唯一性;
2. 能够熟练地应用拉格朗日方法计算插值,并完成插值程序的设计和调试。
二、 实验内容:
构造拉格朗日插值多项式逼近,要求:
(1) 取节点,求线性插值多项式;
(2) 取节点,,求抛物插值多项式;
(3) 取节点,,,求三次插值多项式;
(4) 分别求、、的值,并与精确值相比较。
三、 实验程序及结果:
实验程序如下:
Ex1_1.m:
l0=xianxing(1.3,-1,1);
l1=xianxing(1.3,1,-1);
y0=hanshu(-1);
y1=hanshu(1);
y=l0*y0+l1*y1
det1=abs(y-hanshu(1.3))
Ex1_2.m:
l0=paowu(1.3,-1,0,1);
l1=paowu(1.3,0,-1,1);
l2=paowu(1.3,1,-1,0);
y0=hanshu(-1);
y1=hanshu(0);
y2=hanshu(1);
y=l0*y0+l1*y1+l2*y2
det2=abs(y-hanshu(1.3))
Ex1_3.m:
l0=sanci(1.3,-1,0,1,2);
l1=sanci(1.3,0,-1,1,2);
l2=sanci(1.3,1,0,-1,2);
l3=sanci(1.3,2,-1,0,1);
y0=hanshu(-1);
y1=hanshu(0);
y2=hanshu(1);
y3=hanshu(2);
y=l0*y0+l1*y1+l2*y2+l3*y3
det3=abs(y-hanshu(1.3))
xianxing.m:
function f=xianxing(x,y,z)
f=(x-z)/(y-z);
paowu.m:
function f=paowu(x,y,z,w)
f=((x-z)*(x-w))/((y-z)*(y-w));
sanci.m:
function f=sanci(x,y,z,w,s)
f=((x-z)*(x-w)*(x-s))/((y-z)*(y-w)*(y-s));
hanshu.m:
function f=hanshu(x)
f=x^3;
实验结果分析:
y =1.3000
det1 =0.8970
y =1.3000
det2 =0.8970
y =2.1970
det3 =4.4409e-016
结果说明三次插值方法得到的结果最接近真实值。
实验二 采用埃特金方法计算插值
一、 实验目的:
1. 进一步掌握多项式插值的概念;
2. 能够熟练地应用埃特金方法计算插值,并完成插值程序的设计和调试。
二、 实验内容:
设取节点为,,,,,,,,,用埃特金方法求的近似值,并与真实结果相比较。
三、 实验程序及结果:
实验程序如下:
Ex2.m:
x=[-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1];
for i=2:9
for j=i:9
y(j-1,i-1)=atj(0.793,x(i-1),x(j));
end
end
y(8,8)
det=abs(y(8,8)-hs(0.793))
hs.m:
function f=hs(x)
f=2+sin(pi*x/6);
atj.m:
function f=atj(x,y,z)
f=((x-z)/(y-z))*hs(y)+((x-y)/(z-y))*hs(z);
实验结果分析:
ans =
2.4029
det =
5.2372e-004
实验结果说明利用埃特金算法得到的结果与真实值很接近,而且利用此迭代算法可以避免拉格朗日插值公式中的重新计算。
实验三 采用复化柯特斯公式计算数值积分
一、 实验目的:
1.掌握牛顿-柯特斯公式的基本原理及推导,了解复化求积法的计算步骤;
2.能够熟练地应用复化梯形公式、复化新甫生求积公式和复化柯特斯求积公式计算数值积分,并完成积分程序的设计和调试。
二、 实验内容:
设取节点为,,,,,,,,,分别用复化梯形公式、复化新甫生法和复化柯特斯方法求积分的近似值。
三、 实验程序及结果:
实验程序如下:
Ex3.m:
tnf=tx(0,1,8)
snf=xps(0,1,8)
cnf=kts(0,1,8)
hs3.m:
function f=hs3(x)
f=2+sin(2*pi*sqrt(x)/8);
tx.m:
function f=tx(x,y,n)
h=(y-x)/n;
sum=0;
for i=1:n-1
sum=sum+hs3(x+i*h);
end
f=h/2*(hs3(x)+2*sum+hs3(y));
xps.m:
function f=xps(x,y,n)
h=(y-x)/n;
sum1=0;
sum2=0;
for i=0:n-1
sum1=sum1+hs3(x+(i+1/2)*h);
end
for j=1:n-1
sum2=sum2+hs3(x+j*h);
end
f=h/6*(hs3(x)+4*sum1+2*sum2+hs3(y));
kts.m:
function f=kts(x,y,n)
h=(y-x)/n;
sum1=0;
sum2=0;
sum3=0;
sum4=0;
for i=0:n-1
sum1=sum1+hs3(x+(i+1/4)*h);
sum2=sum2+hs3(x+(i+1/2)*h);
sum3=sum3+hs3(x+(i+3/4)*h);
end
for j=1:n-1
sum4=sum4+hs3(x+i*h);
end
f=h/90*(7*hs3(x)+32*sum1+12*sum2+32*sum3+14*sum4+7*hs3(y));
实验结果分析:
tnf =
2.4852
snf =
2.4910
cnf =
2.5143
实验四 采用四阶龙格-库塔方法求解常微分方程
一、 实验目的:
1. 掌握龙格-库塔方法的设计思想;
2. 能够熟练地应用龙格-库塔方法求解常微分方程,并完成四阶龙格-库塔方法程序的设计和调试。
二、 实验内容:
用四阶龙格-库塔方法计算区间上初值问题的解。其中步长。
三、 实验程序及结果:
实验程序如下:
Ex4.m:
y0=0;
y(1)=lg_kt(y0,0.1);
for i=2:14
y(i)=lg_kt(y(i-1),0.1);
end
y
lg_kt.m:
function f=lg_kt(y,h)
k1=hs4(y);
k2=hs4(y+h/2*k1);
k3=hs4(y+h/2*k2);
k4=hs4(y+h*k3);
f=y+h/6*(k1+2*k2+2*k3+k4);
hs4.m:
function f=hs4(x)
f=1+x^2;
实验结果分析:
y =
Columns 1 through 9
0.1003 0.2027 0.3093 0.4228 0.5463 0.6841 0.8423 1.0296 1.2602
Columns 10 through 14
1.5574 1.9647 2.5721 3.6016 5.7920
实验五 采用迭代法求解非线性方程
四、 实验目的:
1. 掌握牛顿法、弦截法、快速弦截法的算法思想;
2. 能够熟练地应用牛顿法、弦截法、快速弦截法求解非线性方程,并完成程序的设计和调试。
五、 实验内容:
分别用牛顿法、弦截法、快速弦截法求方程的根,要求精度。
六、 实验程序及结果:
实验程序如下:
Ex5_1:
x(1)=0;
x(2)=newton(x(1));
i=2;
while(abs(x(i)-x(i-1))>1e-4)
x(i+1)=newton(x(i));
i=i+1;
end
x
ex5_2:
x0=0;
x(1)=1;
x(2)=xjf(x0,x(1));
i=2;
while(abs(x(i)-x(i-1))>1e-4)
x(i+1)=xjf(x0,x(i));
i=i+1;
end
x
ex5_3:
x0=0;
x(1)=1;
x(2)=k_xjf(x0,x(1));
i=2;
while(abs(x(i)-x(i-1))>1e-4)
x(i+1)=k_xjf(x(i-1),x(i));
i=i+1;
end
x
newton.h:
function f=newton(x)
f=x-(exp(x)-4*cos(x))/(exp(x)+4*sin(x));
xjf.h:
function f=xjf(x,y)
f=y-(hs5(y)/(hs5(y)-hs5(x)))*(y-x);
k_xjf.h:
function f=k_xjf(x,y)
f=y-(hs5(y)*(y-x))/(hs5(y)-hs5(x));
hs5.h
function f=hs5(x)
f=exp(x)-4*cos(x);
实验结果分析:
牛顿迭代法:
x =
Columns 1 through 9
0 3.0000 1.8356 1.1134 0.9207 0.9049 0.9048 0.9048 0.9097
Columns 10 through 18
0.9014 0.9071 0.9032 0.9059 0.9040 0.9053 0.9044 0.9051 0.9046
Columns 19 through 23
0.9049 0.9047 0.9048 0.9047 0.9048
☆实验总结:
通过本次试验,受益匪浅啊!使得对数值计算的各种方法产生了更为深刻的认知和了解,同时也巩固了过去所学的matlab知识。