matlab利用牛頓法求解非線性方程01

2021-10-01 03:14:25 字數 808 閱讀 2586

在如下鏈結中,本人看到了牛頓法求解非線性方程的乙個程式,給人耳目一新的感覺。

但不知何故,本人未能執行該博主寫的程式,於是我對原程式做了一定修改,程式得以執行,**如下:

牛頓法程式**: 

function gen=newton(f,x,tol)

%f為函式,x0為初值,tol為指定允差,如果預設,預設為1e-6

if(nargin==2)

tol=1e-6;

endx0=x;%給定初值

wucha=0.1;%給定乙個誤差初值,以方便進入迴圈計算

while(wucha>tol)

fx=double(subs(f,x0));%首先呼叫subs函式,將x0代入,計算f(x0);然後呼叫double函式,計算結果取小數

df=double(subs(diff(f),x0));%首先呼叫diff函式,對f求導;然後呼叫subs函式,將x0代入,計算f'(x0);最後呼叫double函式,計算結果取小數

gen=x0-fx/df;%牛頓法迭代公式,計算非線性方程的根

wucha=abs(gen-x0);%計算誤差絕對值

x0=gen;%把gen賦給x0,進行下一輪計算

endgen;%程式結果出口

函式程式**:

function y=f

syms x

y=x^2-4*x-5;

輸入

>> newton(f,5.5,tol)

計算結果如下: 

ans =

5.000000041578143

牛頓迭代法求解

牛頓迭代法又稱為牛頓 拉弗森方法,是牛頓在17世紀提出的一種在實數和複數域上近似求解方程的方法。牛頓迭代法的操作簡單來說就是通過不斷取切線,然後通過切線再不斷逼近相應的解,廢話不多說,我們來看例子。例如如下曲線 y x 2 1 我們在其上面任取一點,不妨取點 a 2,3 以該點做切線,切線方程為 y...

MATLAB牛頓迭代法

這裡是乙個一元函式的簡單 牛頓迭代法 function x,n,xn,yn newiteration fun,dfun,x0,eps fun為目標函式,dfun為目標函式的一階導數,x0為起始點,eps為精度 a feval fun,x0 b a 1 n 0 建立畫圖的點 xn zeros 5,1 ...

MATLAB之牛頓下山法

其中引數 它改進了牛頓法對初值的依賴性,當所選初值不合適時 不滿足單調性 f x k 1 下山因子 可用逐步搜尋法確定,即先令下山因子 1,判斷單 調性是否成立,若不成立將縮小1 2,直到單調性滿足為止。其他步驟與牛頓法相同,牛頓下山法為牛頓法的改進。bash clcclear syms x h x...