代码
新建文件 newton.m
function [x k]=newton(f,df,x0,ep,N)
k=0;
while k<N
x=x0-feval(f,x0)/feval(df,x0);
if abs(x-x0)<ep break end
x0=x;
k+=1;
end
endfunction
f : 传入的待求值函数
df : 待求值函数的导数
x0: 起始值
ep : 精度值,小于改值认为求得结果
N : 逼近最大次数,防止程序死掉
原理就是不断用切线进行逼近,直到小于要求的精度值。
例如我想求得sqrt(2) 的值等于几
先逆向构造一个函数 x=sqrt(2) 等价于对 x^2-2=0 求值
func=@(x) x.^2-2; %函数 x^2-2
dfunc=@(x) 2.*x; %导数 2x
[x k]=newton(func,dfunc,1,0.001,10) %对 x^2-2 进行求值
输出
----------
x = 1.4142
k = 3
可以看出,仅仅计算了3次便达到了想要的精度