如何用MATLAB计算对数正态分布的积分

时间:2015-01-26 14:35:09

标签: matlab statistics integration distribution symbolic-math

我想通过以下方式计算对数正态分布的部分期望:

m = 1;
v = 2;
mu = log((m^2)/sqrt(v+m^2));
sigma = sqrt(log(v/(m^2)+1));

syms x;
d = x*lognpdf(x,mu,sigma);

int(d, x, 0, 10);

然而,MATLAB说:

  

使用symfun时出错> validateArgNames(第211行)第二个输入必须是a   标量或唯一符号变量的向量。

     

symfun出错(第45行)               y.vars = validateArgNames(inputs);

     

sym / subsasgn中的错误(第771行)                   C = symfun(B,[inds {:}]);

     

lognpdf中的错误(第36行)x(x <= 0)= Inf;

     

无标题错误(第7行)d = x * lognpdf(x,mu,sigma);

我甚至试图通过以下方式计算pdf的积分:

m = 1;
v = 2;
mu = log((m^2)/sqrt(v+m^2));
sigma = sqrt(log(v/(m^2)+1));

syms x;
d = lognpdf(x,mu,sigma);

int(d, x, 0, 10); 

但仍有错误,MATLAB说:

  

使用symfun时出错&gt; validateArgNames(第211行)第二个输入必须是a   标量或唯一符号变量的向量。

     

symfun出错(第45行)               y.vars = validateArgNames(inputs);

     

sym / subsasgn中的错误(第771行)                   C = symfun(B,[inds {:}]);

     

lognpdf中的错误(第36行)x(x <= 0)= Inf;

     

无标题错误(第7行)d = lognpdf(x,mu,sigma);

我真的不知道发生了什么。 pdf的积分应该是cdf吗?

1 个答案:

答案 0 :(得分:1)

an answer several months ago类似,统计工具箱目前不支持符号工具箱。 因此,您可以通过对PDF本身进行硬编码并对其进行集成来进行处理:

d = exp(-(log(x)-mu)^2/(2*sigma^2))/(x*sigma*sqrt(2*pi));
int(d, x, 0, 10);

或者你可以使用logncdf功能,它可能更干净。