作者SheWow (123)
看板MATLAB
標題[問題] 牛頓法求值問題
時間Tue Sep 23 13:58:41 2014
大家好 小弟我是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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.46.240
※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1411451924.A.D62.html
→ Rasin: 宣告x是符號就不該在指定x=1 09/24 11:48
→ Rasin: f(x)沒有這種東西 09/24 11:50
→ Rasin: eps是關鍵詞 建議不要用 09/24 11:51
推 alamabarry: 有一本數值方法 MATLAB的書~~可以參考 09/24 12:29
→ alamabarry: 去圖書館借來看程式碼吧~~ 09/24 12:29
→ alamabarry: 看久了大概語法就會熟悉 09/24 12:30
推 profyang: 你的eps是定義x跟前一個x的差喔? 怎麼好像跟一般的不太 09/24 14:40
→ profyang: 一樣 09/24 14:40
→ profyang: 一般是定義函數值跟0的差為某個err值吧? 09/24 14:41
→ QurtMP3: 他定義的應該是相對誤差,作為收斂判斷的... 09/25 21:17
→ SheWow: 謝謝各位的建議 09/25 23:47