用牛顿法计算根号a的Matlab 程序.急.
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/17 13:34:39
用牛顿法计算根号a的Matlab 程序.急.
![用牛顿法计算根号a的Matlab 程序.急.](/uploads/image/z/2877443-35-3.jpg?t=%E7%94%A8%E7%89%9B%E9%A1%BF%E6%B3%95%E8%AE%A1%E7%AE%97%E6%A0%B9%E5%8F%B7a%E7%9A%84Matlab+%E7%A8%8B%E5%BA%8F.%E6%80%A5.)
function root=NewtonRoot(f,a,b,eps)
% 用牛顿法求方程的一个根
% 方程的表达式:f
% 区间的左端点:a
% 区间的右端点;b
% 根的精度:eps
% 求得的根:root
if(nargin==3)
eps=1.0e-4;
end
f1=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;
end
if(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
tol=1;
fun=diff(sym(f));
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
dfa=subs(sym(fun),findsym(sym(fun)),a);
dfb=subs(sym(fun),findsym(sym(fun)),b);
if(dfa>dfb)
root=a-fa/dfa;
else
root=b-fb/dfb;
end
while(tol>eps)
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
dfx=subs(sym(fun),findsym(sym(fun)),r1);
root=r1-fx/dfx;
tol=abs(root-r1);
end
end
如求根号115的根,命令如下
root=NewtonRoot('x^2-115',10,12)
结果:root =
10.7238
再问: 如果是根号3呢
再答: 命令如下 root=NewtonRoot('x^2-3',1,5) 结果 root = 1.7321
% 用牛顿法求方程的一个根
% 方程的表达式:f
% 区间的左端点:a
% 区间的右端点;b
% 根的精度:eps
% 求得的根:root
if(nargin==3)
eps=1.0e-4;
end
f1=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;
end
if(f1*f2>0)
disp('两端点函数值乘积大于0!');
return;
else
tol=1;
fun=diff(sym(f));
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
dfa=subs(sym(fun),findsym(sym(fun)),a);
dfb=subs(sym(fun),findsym(sym(fun)),b);
if(dfa>dfb)
root=a-fa/dfa;
else
root=b-fb/dfb;
end
while(tol>eps)
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
dfx=subs(sym(fun),findsym(sym(fun)),r1);
root=r1-fx/dfx;
tol=abs(root-r1);
end
end
如求根号115的根,命令如下
root=NewtonRoot('x^2-115',10,12)
结果:root =
10.7238
再问: 如果是根号3呢
再答: 命令如下 root=NewtonRoot('x^2-3',1,5) 结果 root = 1.7321