跳至內容

詳解matlab下非線性方程組迭代法的實現方法

更新時間
快连VPN:速度和安全性最佳的VPN服务
快连VPN:速度和安全性最佳的VPN服务

非線性方程組迭代法的matlab實現詳細說明

牛頓迭代法:

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

另外兩個在此基礎上稍作改動就可以了。

MATLAB用牛頓迭代解非線性方程的程序

給你一個完整版:

% 牛頓法解非線性方程組

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]=%12.9f', 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]=%12.9f', k, x) % 打印信息

end

if k == N

fprintf('已達到迭代次數上限'); % 迭代結束

end

結果:

以上就是詳解matlab下非線性方程組迭代法的實現方法的詳細內容,更多請關注本站其它相關文章!

更新時間

發表留言

請注意,留言須先通過審核才能發佈。