如何在Matlab中计算概率密度函数(PDF)的数值偏导数?我不是在寻找使用自动差异或符号解决方案的解决方案。
给出以下示例:
arg = (-1:.01:1)';
mu = 0;
sigma = 0.5;
f = normpdf(arg,mu,sigma);
是否可以计算df/dsigma
的数字偏导数?还是我不得不使用自动差异或符号数学工具箱?
答案 0 :(得分:3)
我假设实际功能不是正态分布的PDF。如果您只需要一阶导数,则可以尝试使用complex step differentiation:
mu = 0;
sigma = 0.5;
f = @(x)normpdf(x,mu,sigma);
x = -1:0.01:1;
h = 2^-28;
dx = imag(f(x+1i*h))/h;
或者,如果您按住x
和mu
不变并改变sigma
:
mu = 0;
x = 0;
g = @(sigma)normpdf(x,mu,sigma);
sigma = 0.25:0.01:0.75;
h = 2^-28;
dsigma = imag(g(sigma+1i*h))/h;
这种技术快速,简单,非常准确。您可以从我的GitHub下载这个方便的函数cdiff
。
答案 1 :(得分:1)
我的理解是arg和mu是不变的,而sigma是不同的。这是一个明显的近似值:
arg = 0;
mu = 0;
incr = 0.0001;
sigma = incr:incr:1.5;
f = normpdf(arg,mu,sigma);
d = diff(f) / incr;
plot(sigma(2:end), d, '.')
set(gca, 'XLim', [0.05 1.5])