MATLAB计算方法迭代法牛顿法二分法实验报告要点(20200629085932)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名 _______________ 实验报告成绩 __________________________ 评语:
指导教师(签名)
说明:指导教师评分后,实验报告交院(系)办公室保存
实验一方程求根
一、实验目的
用各种方法求任意实函数方程f(X)=0在自变量区间[a,b]上,或某一点附近的实根。并比较方法的优劣。
二、实验原理
(1)、二分法
b - a
—----- 对方程f(x)=0在[a,b]内求根。将所给区间二分,在分点2判
b - a
断是否f(x)=0;若是,则有根-2。否则,继续判断是否f(a)・f(x) :::°, 若是,则令b二x,否则令a=x。否则令a = x。重复此过程直至求出方程f(x)=0在[a,b]中的近似根为止。
(2)、迭代法
将方程f(x)=0等价变换为x = ® ( x )形式,并建立相应的迭代公式
X k 1 5 ( x ) o
(3)、牛顿法
若已知方程的一个近似根X。,则函数在点X。附近可用一阶泰勒多项式
5(口^(冷厂f'(X0)(x-X0)来近似,因此方程f(x)=0可近似表示为 f (人)
f(x
0厂f'(X
0)(x-
X) =0设fgF,则x=X0- f'(X0)。取X作为原方程新的近
f (X k)
似根X1,然后将X1作为x
0代入上式。迭代公式为:X ki=X0- f'
(x
k)。
三、实验设备:MATLAB 7.0软件
四、结果预测
(1) 心=0.09033 (2) x5=0.09052 (3) x2=0,09052
五、实验内容
(1)、在区间[0,1]上用二分法求方程e x+10x — 2 = 0的近似根,要求误差不超
过°5 10'。
f (X k)
(2)、取初值x°=0,用迭代公式f'(X k),求方程e X+10x-2 = 0的近似根。要求误差不超过°5 10。
(3)、取初值X o=0,用牛顿迭代法求方程e x+10x-2=0的近似根。要求误差不超0.5 10"。
过
六、实验步骤与实验程序
(1)二分法
第一步:在MATLAB 7.0软件,建立一个实现二分法的MATLAB函数文
件agui_bisect.m 女口下:
fun cti on x=agui_bisect(fname,a,b,e)
%fname为函数名,a,b为区间端点,e为精度
fa=feval(fname,a); % 把a端点代入函数,求fa
fb=feval(fname,b); % 把b端点代入函数,求fb
if fa*fb>0 error(' 两端函数值为同号');
end
%如果fa*fb>0,则输出两端函数值为同号
k=0
x=(a+b)/2
while(b-a)>(2*e) % 循环条件的限制
fx二feval(fname,x);% 把x代入代入函数,求fx
if fa*fx<0% 如果fa与fx同号,则把x赋给b,把fx赋给fb
b=x;
fb=fx;
else
%如果fa与fx异号,则把x赋给a,把fx赋给fa
a=x;
fa=fx;
end
k=k+1
%计算二分了多少次
x=(a+b)/2 %当满足了一定精度后,跳出循环,每次二分,都得新的
区间断点a和b,则近似解为x=(a+b)/2
end
第二步:在MATLAB^令窗口求解方程f(x)=e A x+10x-2=0 ,即输入如下>>fu n=inlin e('exp(x)+10*x-2')
>> x=agui_bisect(fu 门,0,1,0.5*10八-3)
第三步:得到计算结果,且计算结果为
k =
Command Window
fun =
Inline function: fun(x) = exp(x)+10*x-2
» x=agui_bisect (fun, 0,1,0.5*10*3)
x =
0.06250000000000
0.09375000000000
Command Window
2
x =
0.12500000000000
0.50000000000000
0.25000000000000
x =
0. D9082031250000
k =
10
m 二
0.09033203125000
0. 08984375000000 (2) 迭代法
x =
0. 09033203125000
第一步:第一步:在MATLAB.0软件,建立一个实现迭代法的 函数文件 agui_main.m 女口下:
fun cti on x=agui_ma in( fname,xO,e)
%fname 为函数名dfname 的函数fname 的导数,x0为迭代初值 %点为精度,N 为最大迭代次数(默认为100) N=100;
x=x0; %把x0赋给x ,再算x+2*e 赋给x0 x0=x+2*e; k=0;
Command Window X =
0. 09179S875000G0
0.07812500000000
0. 08593750000000 MATLAB