1

我正在解决 Mathematica 中的优化问题。我想生成额外的方程,其中变量 z_k 用 (z_k - 1) 或 (z_k + 1) 代替。

我怎样才能自动化这个并将这些方程添加到 Maximize[] 函数中?

谢谢!

4

1 回答 1

3

定义

vars = {z1, z2, z3, z4};
shifts = {-1, 0, 1};

生成所有替换规则的一种方法如下:首先制作一个包含每个变量(Outer位)的所有可能新值的列表,然后从每个列表中选择一个元素的所有组合(使用Tuples)。

rules = Tuples[Outer[#1 -> #1 + #2 &, vars, shifts]];

然后你可以这样做:

Union[eq12 /. rules] 

Union[]是必需的,因为某些转换不会影响eq12.

或者您可以定义一个函数来一次性完成所有操作:

generateAdditionalEqs[eq_, vars_, shifts_] := (eq /. 
  Tuples[Outer[#1 -> #1 + #2 &, vars, shifts]]) // Union
于 2012-07-05T12:45:28.207 回答