Wolfram mathematica n使用包含随机变量的函数最小化

Wolfram mathematica n使用包含随机变量的函数最小化,wolfram-mathematica,mathematica-8,Wolfram Mathematica,Mathematica 8,我想知道是否有可能将mathematica中的NMINIMIMIZE用于包含随机变量的目标函数?例如,我有一个函数,其参数遵循分布(正态和截断正态)。我想将它的直方图与我所拥有的数据相匹配,并构建一个目标函数,现在我需要最小化它(因此,目标函数取决于参数的mus和sigmas,需要确定)。如果我运行我的代码,会出现一条错误消息:它声称正态分布的参数需要为正(如果我手动插入目标函数的mus和sigmas的数字,我不会得到错误消息)。 所以,我想知道NMinimize是否不可能处理非解析函数。 谢谢

我想知道是否有可能将mathematica中的NMINIMIMIZE用于包含随机变量的目标函数?例如,我有一个函数,其参数遵循分布(正态和截断正态)。我想将它的直方图与我所拥有的数据相匹配,并构建一个目标函数,现在我需要最小化它(因此,目标函数取决于参数的mus和sigmas,需要确定)。如果我运行我的代码,会出现一条错误消息:它声称正态分布的参数需要为正(如果我手动插入目标函数的mus和sigmas的数字,我不会得到错误消息)。 所以,我想知道NMinimize是否不可能处理非解析函数。 谢谢 这里,我给你一个示例代码(请注意,原来的函数更复杂)


listS和listT都是事件时间的列表。我想将我的统计模型的时间曲线(这里是一个非常简单的曲线,它由一个截断的正态分布组成)拟合到我的数据中。 为此,我比较了生存曲线,需要最小化最小二乘和。 我的问题是NMinimize函数似乎不起作用。(请注意,原始目标函数由一个更复杂的函数组成,其参数为随机变量)

(*两个列表都应该是时间列表*)


错误消息是:“RandomVariate::realprm:正态分布[mu,0.9]中位置1处的参数mu预计为实数。>>”

有一个专门的站点,我们大多数人都搬到了那里。如果你愿意,我们也可以把问题移过去。n最小化[objectiveF[mu,.9],{{mu,.4}}不是正确的结构。尝试类似nmimimize[objectiveF[mu,.9],{mu,.2,1.2}这样的方法。另外,可能需要通过objectiveF[mu_?NumberQ…]:=,将objectiveF限制为仅数值参数。。。最后,您可能会考虑记忆objectiveF,因为它的评估成本可能相对较高。也可以在一个或多个地方使用Compile来进一步提高速度。rcollyer:是的,请将它移动到mathematica的专用站点!丹尼尔:谢谢你的评论,我会试试。。。
SurvivalS[listeS_, x_] := Module[{res, survivald},
survivald = SurvivalDistribution[listeS];
res = SurvivalFunction[survivald, x];
res]
Residuum[listeT_, listeS_] := 
Table[(SurvivalS[listeT, listeT[[i]]] - SurvivalS[listeS, listeT[[i]]]), {i,
 1, dataN}];
LeastSquare[listeT_, listeS_] := 
Total[Function[x, x^2] /@ 
Residuum[listeT, 
 listeS]];(* objective function, here ist is the sum of least square *)

objectiveF[mu_, sigma_] := 
Piecewise[{{LeastSquare[listeT, listeS[mu, sigma]], mu > 0 && sigma > 0}}, 
20 (1 + (sigma + mu)^2)];

pool = 100; (* No. points from MonteCarlo *)

listeS[mu_, sigma_] := RandomVariate[TruncatedDistribution[{0, 1}, NormalDistribution[mu, sigma]],pool];(* simulated data *)
listeT = Sort[RandomVariate[TruncatedDistribution[{0, 1}, NormalDistribution[.5, .9]],60]]; (* list of "measured" data *)
dataN = Length[listeT];
NMinimize[objectiveF[mu, .9], {{mu, .4}}]