1

Mathematica で最適化問題を解いています。変数 z_k が (z_k - 1) または (z_k + 1) に置き換えられる追加の方程式を生成したいと考えています。

これを自動化し、これらの方程式を Maximize[] 関数に追加するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

3

定義する

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

すべての置換規則を生成する 1 つの方法は次のとおりです。まず、各変数 (ビット) のすべての可能な新しい値を含むリストを作成しOuter、次に各リストから 1 つの要素を選択するすべての組み合わせを取得します (を使用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 に答える