x和x+h完全可能相等,
当x+h==x+0并且y(x-h)==y(x+h),然后就是死循环了.
建议楼主把程序中的float都改雹换为差歼皮double再试一试.
或者把&&y(x-h)<y(x+h)换成&&y(x-h)<=y(x+h).
再者,我虚差搞不明白bool
bRet存在的意义是什么,望楼主释疑.
花了两天时间,终于研究明白了!function hh
global dy1 dy2
y='x^2*sin(x^2-x-2)'
dy1=diff(y)
dy2=diff(y,2)
subplot(3,1,1)
ezplot(y,[-2 2])
subplot(3,1,2)
ezplot(dy1,[-2 2]),hold on,plot(-2:2,zeros(length(-2:2)))
subplot(3,1,3)
ezplot(dy2,[-2 2]),hold on,plot(-2:2,zeros(length(-2:2)))
x01=fsolve(@myfun1,[-1.5 -0.7 0 1.6])
x02=fsolve(@myfun2,[-1.9 -1.3 -0.5 1.3])
function f1=myfun1(x)
global dy1
f1=subs(dy1)%very inportamt!!!!!
function f2=myfun2(x)
global dy2
f2=subs(dy2)%very inportamt!!!!!
结果:
y =
x^2*sin(x^2-x-2)
dy1 =
2*x*sin(x^2-x-2)+x^2*cos(x^2-x-2)*(2*x-1)
dy2 =
2*sin(x^2-x-2)+4*x*cos(x^2-x-2)*(2*x-1)-x^2*sin(x^2-x-2)*(2*x-1)^2+2*x^2*cos(x^2-x-2)
Optimization terminated: first-order optimality is less than options.TolFun.
x01 =
-1.5326 -0.7315 01.5951
Optimization terminated: first-order optimality is less than options.TolFun.
x02 =
-1.9240 -1.2650 -0.47421.2404
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)