从变量列表生成约束以在NMaximize中使用

时间:2011-09-18 18:29:16

标签: wolfram-mathematica constraints

我有一个关于约束的问题,这些约束应该从变量列表中动态生成。

假设我有一个包含在变量R中的表达式,它本身具有不同数量的变量,如x[1]*5+x[3]*x[2]。如果我事先知道这个数字,我会使用NMaximize[{R, 1 > x[1] > -1 && 1 > x[2] > -1 && 1 > x[3] > -1}, f] f是由x构建的变量f = Array[x,n]的列表,n是变量的数量我用。

由于其他人似乎没有类似的问题,我认为这不是通常在mathematica中解决这些问题的方式......但是,如果有办法轻松解决这个问题,我会很高兴听到它(否则我也很高兴听到绕过整个事情的方法)。

提前致谢!

1 个答案:

答案 0 :(得分:2)

假设这是你的表达:

In[1]:= r = x[1]*5+x[3]*x[2];

如果你知道它们的基本符号,那么提取变量列表相对容易:

In[5]:= vars = Union@Cases[r,x[_],Infinity]
Out[5]= {x[1],x[2],x[3]}

现在,您可以使用动态生成的约束来调用NMaximize

In[7]:= NMaximize[{r,And@@Map[Greater[1,#,-1]&,vars]},vars]
Out[7]= {6.,{x[1]->1.,x[2]->-1.,x[3]->-1.}}

代码And@@Map[Greater[1,#,-1]&,vars]专门回答您的问题,生成约束。你可以独立执行它来查看它们。