我正在解决 Mathematica 中的优化问题。我想生成额外的方程,其中变量 z_k 用 (z_k - 1) 或 (z_k + 1) 代替。
我怎样才能自动化这个并将这些方程添加到 Maximize[] 函数中?
谢谢!
我正在解决 Mathematica 中的优化问题。我想生成额外的方程,其中变量 z_k 用 (z_k - 1) 或 (z_k + 1) 代替。
我怎样才能自动化这个并将这些方程添加到 Maximize[] 函数中?
谢谢!
定义
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