使用包含随机变量的函数进行NMinimize

时间:2012-08-23 15:35:18

标签: wolfram-mathematica mathematica-8

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


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

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

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}}]

错误信息是:“RandomVariate :: realprm:NormalDistribution [mu,0.9]中位置1的参数mu应该是真实的。>>”

0 个答案:

没有答案
相关问题