[问题] 牛顿法求值问题

楼主: 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