在如下鏈結中,本人看到了牛頓法求解非線性方程的乙個程式,給人耳目一新的感覺。
但不知何故,本人未能執行該博主寫的程式,於是我對原程式做了一定修改,程式得以執行,**如下:
牛頓法程式**:
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...