Предположим, это ваше выражение:
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]
специально отвечает на ваш вопрос, генерируя ограничения.Вы можете выполнить его отдельно, чтобы увидеть их.