[問題] 牛頓法求值問題

作者: SheWow (123)   2014-09-23 13:58:41
大家好 小弟我是matlab新手
近日打算用牛頓法求解一個形式複雜的函數的根
為此小弟先設定一個簡單的函數(f=x^2-4)當作練習
試用牛頓法求根
但遇到程式上的問題一直無法解決 想請各位前輩幫幫我
以下是小弟的測試程式:
clear
syms x
n=0;
eps=1;
x=1;
p=0.000001;
while eps>p && n<10
f=x^2-4;
%df=2*x;
df=diff(f(x));
xnew=x-f(x)/df(x);
eps=abs(xnew-x);
x=xnew;
n=n+1;
end
run程式出現 Index exceeds matrix dimensions.
查資料後知道是矩陣數量不相符的關係 但我不知道怎麼修改才好 ><
若我把df=diff(f(x))替換成df=2*x (也就是自己手算微分)
是可以求出正確根植 +2,-2
但我真正想求根的函數 形式太複雜了
手動求微分再打到程式裡 有點不太實際
請問各位前輩這裡diff造成的問題要怎麼解決?
卡好幾天了 搞不太定 QQ
作者: Rasin (雷森)   2014-09-24 11:48:00
宣告x是符號就不該在指定x=1f(x)沒有這種東西eps是關鍵詞 建議不要用
作者: alamabarry (.............)   2014-09-24 12:29:00
有一本數值方法 MATLAB的書~~可以參考去圖書館借來看程式碼吧~~看久了大概語法就會熟悉
作者: profyang (prof)   2014-09-24 14:40:00
你的eps是定義x跟前一個x的差喔? 怎麼好像跟一般的不太一樣一般是定義函數值跟0的差為某個err值吧?
作者: QurtMP3   2014-09-25 21:17:00
他定義的應該是相對誤差,作為收斂判斷的...
作者: SheWow (123)   2014-09-25 23:47:00
謝謝各位的建議

Links booklink

Contact Us: admin [ a t ] ucptt.com