2011-05-20 37 views
7

在Mathematica 8中使用简单相等的约束时,最小化不起作用。例如。在Mathematica中使用等式约束的函数最小化8

FindMinimum[{x^2 + y^2, y == 1}, {x, y}] 

在Mathematica 6中可以正常工作,但在版本8中出现错误。任何人都可以确认(或解释)它吗?看起来像修复其中一个参数约束混淆了版本8.将xy==1设置为OK,也是不平等。

对此有任何简单的解决方法?我试图改变Method,没有运气。我想保留参数列表中的所有参数,但用简单约束保留其中一些参数,而不是从列表中删除参数名称。我在6版本运行的代码,这并不在8

+2

这似乎是对我的bug;考虑将其报告给Wolfram。 – Cassini 2011-05-20 12:59:50

回答

2

工作了你的语法似乎是不正确的:它要求用的y值开始x

FindMinimum[{x^2 + y^2, y == 1}, {x, y}] 

。这对我来说没有多大意义。

也许你正在尝试做的事:

Minimize[{x^2 + y^2, y == 1}, {x, y}] 
Out: {1, {x -> 0, y -> 1}}

显然你的语法有效。考虑如上所示的Minimize,以解决您的问题。

+2

该文档表明他的语法是合理的。这里有一个例子: FindMinimum [{x + y,x + 2 y> = 3 && x> = 0 && y> = 0 && y \ [Element] Integers},{x,y}] – Cassini 2011-05-20 12:42:36

+0

@Cassini to my惊喜你是对的!我从来没有以这种方式使用FindMinimum。我仍然不知道这是有道理的。我想这里工作还有另一个问题,但我没有时间去搜索它。 – 2011-05-20 12:48:03

+2

我同样惊讶;从语法着色来看,似乎Mathematica前端也感到惊讶(注意x的绿色和y的蓝色的有趣组合)。 – Cassini 2011-05-20 12:49:46

1
In[31]:= NMinimize[{x^2 + y^2, y == 1}, {x, y}] 

Out[31]= {1., {x -> -3.20865*10^-9, y -> 1.}} 

In[32]:= FindMinimum[{x^2 + y^2, 1 - 10^-10 <= y <= 1 + 10^-10}, {x, y}] 

Out[32]= {1., {x -> 0., y -> 1.}} 

不过,我不知道如何强制MMA到继续搜索即使遇到一个无限的表达?任何人都可以分享你的想法吗?

感谢^ _^

3

另一个解决办法是使用版本9

In[1]:= FindMinimum[{x^2 + y^2, y == 1}, {x, y}] 
Out[1]= {1., {x -> 0., y -> 1.}} 

这就是说,你在上面显示什么是慷慨的固定本身在未来版本的bug。

丹尼尔Lichtblau 沃尔夫勒姆研究

+0

谢谢Daniel Lichtblau。您能否帮我测试版本9中的以下优化代码? a =((x-50)^ 2 +(y-50)^ 2)^(1/2)+ E; f = Sin [a]/a + 1; NMinimize [{f,0 <= x <= 100,0 <= y <= 100},{x,y}] – FreshApple 2011-05-20 14:15:27

+1

您是否建议v9版本在附近? – 2011-05-20 19:43:06