作者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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1411451924.A.D62.html
1F:→ Rasin: 宣告x是符号就不该在指定x=1 09/24 11:48
2F:→ Rasin: f(x)没有这种东西 09/24 11:50
3F:→ Rasin: eps是关键词 建议不要用 09/24 11:51
4F:推 alamabarry: 有一本数值方法 MATLAB的书~~可以参考 09/24 12:29
5F:→ alamabarry: 去图书馆借来看程式码吧~~ 09/24 12:29
6F:→ alamabarry: 看久了大概语法就会熟悉 09/24 12:30
7F:推 profyang: 你的eps是定义x跟前一个x的差喔? 怎麽好像跟一般的不太 09/24 14:40
8F:→ profyang: 一样 09/24 14:40
9F:→ profyang: 一般是定义函数值跟0的差为某个err值吧? 09/24 14:41
10F:→ QurtMP3: 他定义的应该是相对误差,作为收敛判断的... 09/25 21:17
11F:→ SheWow: 谢谢各位的建议 09/25 23:47