MatLab中的数值偏导数

时间:2013-11-28 04:06:43

标签: matlab numerical-methods

如何在Matlab中计算概率密度函数(PDF)的数值偏导数?我不是在寻找使用自动差异或符号解决方案的解决方案。

给出以下示例:

arg = (-1:.01:1)';
mu = 0;
sigma = 0.5;

f = normpdf(arg,mu,sigma);

是否可以计算df/dsigma的数字偏导数?还是我不得不使用自动差异或符号数学工具箱?

2 个答案:

答案 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;

或者,如果您按住xmu不变并改变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])