概述
二分法
%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)内凹向不变的函数。
%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]上不变号。
%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求符号函数在某一点的函数值,
如:
>> 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二分法,单点弦截法,牛顿切线迭代法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复