牛頓迭代法:
function[x0,n]=newton(fx,dfx,x0,tol,N)
% 牛頓迭代法
% 第一個參數 fx 是關於變數x的所要的函數表達式.
% 第二個參數 dfx 是fx的一階導數.
% x0 是迭代初始值.
% tol 是迭代誤差限.
% N 最大迭代次數.
x=x0;f0=eval(fx);df0=eval(dfx);
n=0;
disp('[ n xn xn 1 delta ]');
while n
x1=x0-f0/df0;
x=x1;f1=eval(fx);df1=eval(dfx);
delta=abs(x0-x1);
% X=[n,x0,x1,delta];
disp(X); %用於顯示中間結果
if delta
fprintf('迭代計算成功')
return
else
n=n 1;
x0=x1;f0=f1;df0=df1;
end
end
if n==N 1
fprintf('迭代計算失敗 ')
end
另外兩個在此基礎上稍作改動就可以了。
給你一個完整版:
% 牛頓法解非線性方程組
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
N = 500;
end
if nargin
e = 1e-7;
end
x = x0; % 初值
x0 = x 2*e; % 浮動
k = 0; % 步數
fprintf('x[%d]= .9f\n', k, x) % 列印訊息
while abs(x0-x)>e & k
k = k 1; % 記錄步數
x0 = x;% 更新x(k)
x = x0 - feval(fname,x0)/feval(dfname,x0); % 更新x(k 1)
fprintf('x[%d]= .9f\n', k, x) % 列印訊息
end
if k == N
fprintf('已達迭代次數上限'); % 迭代結束
#end
結果:
#以上是詳解matlab下非線性方程組迭代法的實現方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!