function main()
clc; clear all;
f = @(x)log(x+sin(x)); % 測試函數
df = @(x)(1+cos(x))/(x+sin(x)); % 導數函數
x0 = 0.1; % 叠代初值
x = TestNewton(f, df, x0) % 牛頓法求解
function x = TestNewton(fname, dfname, x0, e, N)
% 用途:Newton叠代法解非線性方程f(x)=0
% fname和dfname分別表示f(x)及其導函數的M函數句柄或內嵌函數表達式
% x0為叠代初值,e為精度(默認值1e-7)
% x為返回數值解,並顯示計算過程,設置叠代次數上限N以防發散(默認500次)% 輸入參數
if nargin < 5
N = 500;
end
if nargin < 4
e = 1e-7;
end
x = x0; % 初值
x0 = x+2*e; % 浮動
k = 0; % 步數
fprintf('x[%d]=%12.9f\n', k, x) % 打印信息
while abs(x0-x)>e && k<N % 循環叠代條件
k = k+1; % 記錄步數
x0 = x; % 更新x(k)
x = x0 - feval(fname,x0)/feval(dfname,x0); % 更新x(k+1)
fprintf('x[%d]=%12.9f\n', k, x) % 打印信息
end
if k == N
fprintf('已達到叠代次數上限'); % 叠代結束
end
結果: