0

最大化によって (閉じた形式で) 最大値を導き出すことができない場合に、2 つの引数と 1 つの外生パラメーターを持つ関数の最大化の結果を計算して保存することを目指しています。たとえば、

f[x_,y_,a_]=Max[0,Min[a-y,1-x-y]

は正の目的関数aです。最大化は で行われる[0,1]^2ため、設定します

m[a_]=Maximize[{f[x, y, a], 0 <= x <= 1 && 0 <= y <= 1 && 0 <= a}, {x,y}]

明らかmに任意の点で評価できるため、次を使用しaて最大化をプロットできます。x

Plot[x /. m[a][[2]], {a, 0.01, 1}]

いくつかのプロットと最適解を含むさらなる導出を行う必要があるためx(yもちろんこれは の関数ですa)、今後の使用のために最適化の結果を保存/保存したいと思います。これを行うエレガントな方法はありますか、それとも値を自分で抽出するためにある種のループを書く必要がありますか?

4

2 に答える 2

0

元のコメントに対するあなたのコメントの全文を見たので、 と の違いを十分に理解していると思いSetますSetDelayed。あなたが探しているのはメモ化であると思いますが、このように実装されることもあります。

f[x_,y_] := f[x,y] = Max[0,Min[a-y,1-x-y]]

たとえばf[3,4]、初めて評価すると、 の右側の式全体が評価され:=ます。rhs は割り当てf[3,4] = Max[0,Min[a-y,1-x-y]]です。次に評価するとき,f[3,4]Mathematica はすでにその値を持っているので再計算する必要はなく,それを呼び出すだけです.この例では、保存された値はMax[0,Min[a-4,-6]]もちろんです。

私はあなたが何をしようとしているのか少し不確かなままなので、この答えはあなたにとってまったく役に立たないかもしれません.

于 2012-09-25T13:25:23.593 に答える
0

シンプルなアプローチ

results = Table[{x, y, a} /. m[a][[2]], {a, 0.01, 1, .01}]
ListPlot[{#[[3]], #[[1]]} & /@ results, Joined -> True]

(「a」が事前に定義されていない限り、ここで Set = は問題ありません)

Plot[] の自動評価を利用したい場合は、Reap[]/Sow[] を見てください。

{p, data} = Reap[Plot[x /. Sow[m[a]][[2]], {a, 0.01, 1}]];
Show[p]

(関数の出力が混乱しているため、これには数分かかります..)。

うーん、これをもう一度試してください: x、y、a と最小値が必要であると仮定します。

{p, data} = Reap[Plot[x /. Sow[{a, m[a]}][[2, 2]], {a, 0.01, .1}]];
Show[p]
results = {#[[1]], x /. #[[2, 2]], y /. #[[2, 2]], #[[2, 1]]} & /@  data[[1]]

ところで、関数はいくつかの範囲で x に依存していないように見えるため、プロットが混乱しています..

于 2012-09-25T13:26:59.137 に答える