C语言求正弦函数的极值点,下面的程序输入的大一些会死循环,求解释

C语言求正弦函数的极值点,下面的程序输入的大一些会死循环,求解释,第1张

楼主的算法在数学上是没有问题的,但在计算机上就不一样了.

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12528208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存