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

Wolfram mathematica 从变量列表中生成约束以在NMaximize中使用,wolfram-mathematica,constraints,Wolfram Mathematica,Constraints,我有一个关于约束的问题,约束应该从变量列表中动态生成 假设我有一个表达式,它包含在变量R中,它本身有不同数量的变量,比如x[1]*5+x[3]*x[2]。如果我事先知道这个数字,我就用n最大化[{R,1>x[1]>-1&&1>x[2]>-1&&1>x[3]>-1},f]其中f是由f=Array[x,n]构造的变量列表x,其中n是我使用的变量数 由于其他人似乎没有类似的问题,我认为这不是通常在数学中解决这些问题的方式。。。然而,如果有一种方法可以很容易地解决这个问题,我会很高兴听到它(否则我也会很

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

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

由于其他人似乎没有类似的问题,我认为这不是通常在数学中解决这些问题的方式。。。然而,如果有一种方法可以很容易地解决这个问题,我会很高兴听到它(否则我也会很高兴听到一种绕过整个问题的方法)


提前谢谢

假设这是您的表达式:

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.}}

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

Re:
“我假设这不是mathematica通常解决此类问题的方式。”
。不,这是相当标准的,你是在良好的路径上的回应和之前的评论是在目标。我要补充的是,你也可以使用弱不等式,例如LessEqual,因为严格不等式会被它们的弱等价物所取代。