matlab 语言 用弦截法任意实数方程求实根
答案:2 悬赏:0 手机版
解决时间 2021-02-27 18:12
- 提问者网友:欲劫无渡
- 2021-02-27 12:14
matlab 语言 用弦截法任意实数方程求实根
最佳答案
- 五星知识达人网友:由着我着迷
- 2021-02-27 13:50
弦截法这个方法一般用作学习,实际用的很少。这里我提供一个较完整的弦截法求根的函数。function root=Secant(f,a,b,eps)
if(nargin==3)
eps=1.0e-6;
endf1=subs(sym(f),findsym(sym(f)),a);
f2=subs(sym(f),findsym(sym(f)),b);
if(f1==0)
root=a;
end
if(f2==0)
root=b;
endif(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
tol=1;
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
root=a-(b-a)*fa/(fb-fa);
while(tol>eps)
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
s=fx*fa;
if(s==0)
root=r1;
else
if(s>0)
root=b-(r1-b)*fb/(fx-fb);
else
root=a-(r1-a)*fa/(fx-fa);
end
end
tol=abs(root-r1);
end
end
对于本题,输入:>> y=secant('0.15/y-y*sin(0.15^y)-1',0.1,5)结果:y = 0.1369
if(nargin==3)
eps=1.0e-6;
endf1=subs(sym(f),findsym(sym(f)),a);
f2=subs(sym(f),findsym(sym(f)),b);
if(f1==0)
root=a;
end
if(f2==0)
root=b;
endif(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
tol=1;
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
root=a-(b-a)*fa/(fb-fa);
while(tol>eps)
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
s=fx*fa;
if(s==0)
root=r1;
else
if(s>0)
root=b-(r1-b)*fb/(fx-fb);
else
root=a-(r1-a)*fa/(fx-fa);
end
end
tol=abs(root-r1);
end
end
对于本题,输入:>> y=secant('0.15/y-y*sin(0.15^y)-1',0.1,5)结果:y = 0.1369
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯