我正在解决Mathematica中的优化问题。我想生成其他方程,其中变量z_k被(z_k - 1)或(z_k + 1)代替。
如何自动执行此操作并将这些方程式添加到Maximize []函数中?
谢谢!
答案 0 :(得分: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