牛頓迭代法:
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用牛頓迭代解非線性方程式的程式
以上是詳解matlab下非線性方程組迭代法的實現方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!