发现mathematica在求函数最值时的一个漏洞
mathematica吧
全部回复
仅看楼主
level 7
云淡风轻_2024
楼主
如题,用maximize命令求函数最值时,软件无法给出所有的最大值点。举例:
Maximize[{x^2, -2 <=x <= 2}, x]
显然这个函数最大值为4,并且有两个最大值点:x=-2和x=2.
但是mathematica输出的结果是:
{4, {x -> -2}}
软件把另一个最大值点x=2漏掉了。
不知道大家有木有发现这个问题?有解决的办法吗?求指教,谢谢!
2018年09月22日 23点09分
1
level 1
Wonderlands09
确实如此,这个更清楚:
Maximize[{Sin[x],0<=x<=6 Pi},x]
得到
{1,{x->(9 \[Pi])/2}} 。
而且这个不像是计算精度问题。
2018年09月23日 02点09分
2
level 12
Alexander0620
端点是特殊点,需要单独考虑吧
而且 Maximize 的 Documentation 里说的是 "maximizes f with respect to x",重点在 f 的最大值上,而不在 x 取多少。
2018年09月23日 04点09分
3
云淡风轻_2024
那你知道怎么用mathematica求函数在一个区间上的最大值点么?能求出所有最大值点的办法?
2018年09月23日 13点09分
Alexander0620
@云淡风轻_2024
其实已经说了,我会单独考察端点
2018年09月24日 02点09分
Wonderlands09
@Alexander0620
不行的,见我上面楼中给的例子。
2018年09月25日 09点09分
云淡风轻_2024
@Alexander0620
不是端点的问题,问题在于Mathematica在找到第一个最大值点以后就不再找了,它会直接输出这个最大值点和最大值。所以你即使再单独考察端点也无法找全所有的最大值点,因为最大值点还有可能是其他的内点解。
2018年09月26日 14点09分
level 5
流水肯定了石头
这个不叫问题,你加上约束条件即可。就像lingo一样,它只给你取得最大值和一个对应的x值
2018年09月24日 08点09分
4
云淡风轻_2024
那请问有什么办法可以求出一个函数所有的最大值点呢?我现在遇到的问题不光要求出最大值还要求出所有的最大值点(目标函数是个超越函数)
2018年09月24日 19点09分
流水肯定了石头
@云淡风轻_2024
如果确信还有其他最大值点,那么我一般会加强条件,比如 In[38]:= Maximize[{x^2,-2<=x<=2,x!=-2},x] Out[38]= {4,{x->2}} 或者干脆 In[39]:= Maximize[{x^2,-2<x<=2},x] Out[39]= {4,{x->2}}
2018年09月25日 06点09分
吧务
level 13
隨意超
原生函数没有带这种功能?那就解出来好了
{$max = MaxValue[##],
Reduce
@@
MapAt[$max == # &, {##}, {1, 1}]} &[{x^2, -2 <= x <= 2},
x]
2018年09月26日 05点09分
5
1