建立m檔案:
function [result ,k] = newton(fun,x0,e)
% 呼叫形式:
% [x k] = newton(fun,x0,e)
% 功能:
% 用差商求導的牛頓法求解一元非線性方程的根
% 輸入:
% -- fun 字串,f(x)的表示式,以x作為自變數,以字串形式輸入
% -- x0 標量,求解的起始點
% -- e 標量,精度要求
% 輸出:
% -- x 標量,所求得的解
% -- k 標量,求解過程的迭代次數
% 袁怡圃,2003/4/3
m = x0;
h=0.000001;
f=inline(fun,"x");
k=0;
f0=feval(f,m);
f2=feval(f,m+h);
f1=feval(f,m-h);
n=m-2*h*f0/(f2-f1);
while abs(1-m/n)>e
m=n;
k=k+1;
if k>999
break
end
if k==1000
disp("沒找到方程的根!");
result = "zero";
else
result = n;
在命令視窗輸入:
fun = "2*x^3+x^2-3*x+4=0";
x0 = 1;
[result ,k] = newton(fun,x0,0.00001)
建立m檔案:
function [result ,k] = newton(fun,x0,e)
% 呼叫形式:
% [x k] = newton(fun,x0,e)
% 功能:
% 用差商求導的牛頓法求解一元非線性方程的根
% 輸入:
% -- fun 字串,f(x)的表示式,以x作為自變數,以字串形式輸入
% -- x0 標量,求解的起始點
% -- e 標量,精度要求
% 輸出:
% -- x 標量,所求得的解
% -- k 標量,求解過程的迭代次數
% 袁怡圃,2003/4/3
m = x0;
h=0.000001;
f=inline(fun,"x");
k=0;
f0=feval(f,m);
f2=feval(f,m+h);
f1=feval(f,m-h);
n=m-2*h*f0/(f2-f1);
while abs(1-m/n)>e
m=n;
f0=feval(f,m);
f2=feval(f,m+h);
f1=feval(f,m-h);
n=m-2*h*f0/(f2-f1);
k=k+1;
if k>999
break
end
end
if k==1000
disp("沒找到方程的根!");
result = "zero";
else
result = n;
end
在命令視窗輸入:
fun = "2*x^3+x^2-3*x+4=0";
x0 = 1;
[result ,k] = newton(fun,x0,0.00001)