我是靠谱客的博主 野性早晨,这篇文章主要介绍matlab二分法,单点弦截法,牛顿切线迭代法,现在分享给大家,希望可以做个参考。

二分法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%p222task2_3 %二分法求f=@(x)1-x-sin(x)零点 clc,clear; f=@(x)1-x-sin(x) b=1;a=0; f(0) f(1) ezplot(f,[0,1]) hold on ezplot(@(x)0,[0,1]) while b-a>0.0001 m=(a+b)/2; if f(m)==0 break; end if f(a)*f(m)>0 a=m; else b=m; end end m

单点弦截法

单点弦截法适用于导数值计算较为困难,且f(x)在区间(a,b)内凹向不变的函数。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
%p228task3_2 %单点弦截法求x^2+x-3=0近似解 clc,clear f=@(x)x^2+x-3 ezplot(f,[-3,2]) grid%画出网格线 %根在[-2.5,2],[1,1.5]之间 a=-2.5; b=-2; digits 8 while abs(f(a))>0.00001 a=b-f(b)*(b-a)/(f(b)-f(a)); end a

牛顿切线迭代法

牛顿切点迭代法的条件是:f(x)在闭区间[a,b]上有二阶导数,f(a)*f(b)<0,且f’(x)与f”(x)在[a,b]上不变号。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
%p228task4 %牛顿切线迭代法求x^2-2*x*exp(x)+exp(-x)=0的根 clc,clear syms x; f=@(x)x^2-2*x*exp(x)+exp(-x) d1f=diff(f(x)) d2f=diff(d1f) % ezplot(@(x)0) figure(1) ezplot(f(x),[0,0.5]) grid figure(2) ezplot(d1f,[0,0.5]) grid figure(3) ezplot(d2f,[0,0.5]) grid %作图可知,一阶导数、二阶导数都小于0;符合牛顿切线弦截法的要求 %根在0.3到0.35之间 a=0.3; b=0.35 if subs(f,a)*subs(d2f,a)>0 x0=a; else x0=b; end dlt=1.0e-5;%设置精度 m=min(abs(subs(d1f,a)),abs(subs(d1f,b)));%m的作用就是使达到精度要求后停止循环 k=1; while abs(subs(f,x0))>m*dlt x1=x0-subs(f,x0)/subs(d1f,x0); x0=x1; fprintf('k=%d,x=%.7fn',k,x0); k=k+1; end solve(f)

此处用到一个新知识,用subs求符号函数在某一点的函数值,
如:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> f=@(x)x^2-2*x*exp(x)+exp(-x) f = 包含以下值的 function_handle: @(x)x^2-2*x*exp(x)+exp(-x) >> subs(f,2) ans = exp(-2) - 4*exp(2) + 4 >> vpa(subs(f,2)) ans = -25.420889112485988217027710347328

可见subs的用法:subs(f,x0)可求出在x0处的f的值,但对于sin,exp等函数,不会直接显示近似数值,调用vpa函数即可令其显示数值。

最后

以上就是野性早晨最近收集整理的关于matlab二分法,单点弦截法,牛顿切线迭代法的全部内容,更多相关matlab二分法内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部