首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mathematica中保存Maximize的结果?

如何在Mathematica中保存Maximize的结果?
EN

Stack Overflow用户
提问于 2012-09-25 20:47:35
回答 2查看 1.3K关注 0票数 0

我的目标是计算并保存具有两个自变量和一个外生参数的函数的最大化结果,当最大值不能通过最大化(以封闭形式)导出时。例如,让我们

代码语言:javascript
复制
f[x_,y_,a_]=Max[0,Min[a-y,1-x-y]

a为正的目标函数。最大化将发生在[0,1]^2上,因此我设置了

代码语言:javascript
复制
m[a_]=Maximize[{f[x, y, a], 0 <= x <= 1 && 0 <= y <= 1 && 0 <= a}, {x,y}]

显然,m可以在任何点a上求值,因此可以通过以下方法绘制最大化的x

代码语言:javascript
复制
Plot[x /. m[a][[2]], {a, 0.01, 1}]

因为我需要做几个包含最优解xy (当然是a的函数)的绘图和进一步的派生,所以我想保存/保存优化的结果以备将来使用。有没有一种很好的方法来做到这一点,或者我必须自己编写某种循环来提取这些值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-25 21:25:24

现在我已经看到了您对我最初的评论的全文,我想您已经足够理解SetSetDelayed之间的区别了。我认为您可能正在寻找的是memoisation,有时实现的有点像这样;

代码语言:javascript
复制
f[x_,y_] := f[x,y] = Max[0,Min[a-y,1-x-y]]

例如,当您第一次计算f[3,4]时,它将计算到:=右侧的整个表达式。rhs是assignment f[3,4] = Max[0,Min[a-y,1-x-y]]。下一次你评估f[3,4]的时候,它已经有了一个值,所以不需要重新计算它,它只需要回忆它。在本例中,存储的值当然是Max[0,Min[a-4,-6]]

我仍然有点不确定你想要做什么,所以这个答案可能对你没有任何用处。

票数 0
EN

Stack Overflow用户

发布于 2012-09-25 21:26:59

简单方法

代码语言:javascript
复制
results = Table[{x, y, a} /. m[a][[2]], {a, 0.01, 1, .01}]
ListPlot[{#[[3]], #[[1]]} & /@ results, Joined -> True]

(只要没有预先定义'a‘,Set =在这里就可以了)

如果您想利用Plot[]的自动求值功能,可以查看Reap[]/Sow[]

代码语言:javascript
复制
{p, data} = Reap[Plot[x /. Sow[m[a]][[2]], {a, 0.01, 1}]];
Show[p]

(这需要几分钟的时间,因为函数输出很混乱。)

嗯,再试一次:假设你想要x,y,a和最小值:

代码语言:javascript
复制
{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无关,这就是为什么这个图很混乱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12583276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档