【问题标题】:Function minimization with equality constraints in Mathematica 8Mathematica 8 中具有等式约束的函数最小化
【发布时间】:2011-05-20 11:52:05
【问题描述】:

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

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

在 Mathematica 6 中工作正常,但在版本 8 中出现错误。其他人可以确认(或解释)这一点吗?看起来用约束来修复其中一个参数会混淆版本 8。放置xy==1 是可以的,任何不等式也是可以的。

有什么简单的解决方法吗?我曾尝试更改Method,但不走运。我想将所有参数保留在参数列表中,但使用简单的约束保留其中一些参数,而不是从列表中删除参数名称。我在版本 6 中有一个工作代码,在 8 中不再工作。

【问题讨论】:

  • 这对我来说似乎是一个错误;考虑将其报告给 Wolfram。

标签: wolfram-mathematica mathematica-8


【解决方案1】:

另一种解决方法是使用版本 9。

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

也就是说,您在上面显示的是一个错误,它已经在未来的版本中修复了。

丹尼尔·利希特布劳 Wolfram 研究

【讨论】:

  • 谢谢,丹尼尔·利希特布劳。请您帮我在版本 9 中测试以下优化代码吗? a = ((x - 50)^2 + (y - 50)^2)^(1/2) + E; f = Sin[a]/a + 1; NMinimize[{f, 0
  • 你建议 v9 版本在附近吗?
【解决方案2】:

您的语法似乎不正确:

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

它要求以 y 的值开始 x。这对我来说没有多大意义。

也许你正试图这样做:

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

显然你的语法有效的。考虑如上所示的 Minimize 可能是解决您的问题的方法。

【讨论】:

  • 文档表明他的语法是合理的。下面是一个例子: FindMinimum[{x + y, x + 2 y >= 3 && x >= 0 && y >= 0 && y [Element] Integers}, {x, y}]
  • @Cassini 令我惊讶的是你是对的!我从来没有那样使用过FindMinimum。我仍然不知道这是否有意义。我猜这里工作中还有一个问题,但我没有时间去搜索它。
  • 我同样感到惊讶;从语法着色来看,Mathematica 前端似乎也很惊讶(注意绿色代表 x 和蓝色代表 y 的有趣组合)。
  • 我试图做一个“最简单的例子”。我实际上使用带有起点的符号,但它并没有改变这样一个事实,即过去在 6 中工作的代码在 8 中被破坏了。我会检查 Minimize 是否是一个很好的替代品,谢谢你的提示。我越来越怀疑这是 Mathematica 8 中的一个错误。
  • @Boocko,作为参考,我使用 Mathematica 7,我也收到错误,并且您的测试用例没有输出。
【解决方案3】:
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 继续搜索?有人可以分享你的想法吗?

谢谢^_^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2019-07-06
    • 2021-08-28
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多