MATLAB数值计算-第4章-方程求根

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB数值计算

(读书日记及程序编写)

第四章方程求根 (2)

第四章 方程求根

#二分法 求2的值

转化成方程02-2

=x

最慢的方法是取初值1001=x 02-21>x ,取502=x

这样得到

也可以x0=a, x1=x0+h, 进行扫描,若f(x0)*f(x1)<0, 则扫描成功,有根区间为[x0,x1],否则继续扫描,如果出现x1>b ,表面扫描失败,再缩小步长h, 再次扫描。

>> format long %让显示的值为

M=2,a=1,b=2,k=0;

while b-a>eps

x=(a+b)/2;

if x^2>M

b=x

else

a=x

end

k=k+1

end

执行后得到的值为:

k =

50

b =

1.414213562373095

k =

51

b =

1.414213562373095

k =

52

最后得到的值就是Matlab 能表达的最接近的值。

#牛顿法

求解f(x)=0的牛顿法是在f(x)画一条切线,确定切线与x 轴的焦点,通过迭代 )

(x f )f(x -n n 1'=+n n x x 对于平方根的问题,牛顿法简洁有效,

换成f(x)=x^2-M, )(x f n '

=2x 这样

⎪⎪⎭

⎫ ⎝⎛+==+n n n n x M x M x x 212x -x -n 2n 1 该算法就是反复求x 和M/x 的平均值,Matlab 的程序为:

format long %让显示的值为

xprev=2; %取的不等于初值x 的一个值,让判断能继续

x=100; %取的初值为3

while abs(x-xprev)>eps*abs(x)

xprev=x;

x=0.5*(x+2/x)

end

x = 1.833333333333333

x = 1.462121212121212

x = 1.414998429894803

x = 1.414213780047198

x = 1.414213562373112

x = 1.414213562373095

x = 1.414213562373095

可见6步很快就收敛

然而,若f(x)不具有连续的、有界的一阶、二阶导数,牛顿法的收敛将变得很慢。

#fzero 函数直接求根

求x^3-1在区间[0,10]上的根

fzero(@(x)x^3-1,[0,10])

ans =

1

fzerogui(@(x)x^3-1,[0,10])

可以通过在图形界面上选择割点来得到

>> fzerogui(@(x)x^3-1,[0,10])

ans =

start 0.0000000000000000

start 10.0000000000000000

secant 0.0100000000000000

bisect 5.0049999999999999

secant 0.0498403198384075

bisect 2.5274201599192034

secant 0.2032825426923320

bisect 1.3653513513057676

secant 0.6575071192259432

bisect 1.0114292352658554

secant 0.9950727548572595

secant 0.9999439297147387

iqi 1.0000000052288878

secant 0.9999999999997068

secant 1.0000000000000000

(bisect:二分,secant:交点,可见,经过多次迭代,非常接近真实解x=1

同理,要求贝塞尔函数的根,输入直接得到

>> fzero(@(x)besselj(0,x),[0,3.83])

ans =

2.4048

输入图形求解,可以得到:

>> fzerogui(@(x)besselj(0,x),[0,3.83])

相关文档
最新文档