MATLAB — интегральная функция с несколькими аргументами

Я хотел спросить, как я могу вычислить следующий интеграл в MATLAB.

integral( PN(x,m,s), x(-Inf,Inf) , m>0 , s>0.

Я создал файл функции pn, а именно:

function PN = pn(x,m,s)
    PN = exp(-(x-m).^2 ./ (2*s.^2)) ./ sqrt(2*pi*s.^2);
end

и скрипт begin.m:

%ezplot(@(x)pn(x,0,1),[-3,3])  --> This is OK!
quad(pn(x,m,s),x,-Inf,Inf)     --> I can't manipulate this, I tried several ways.

Ответ на интеграл должен быть «1».


person George    schedule 12.02.2011    source источник


Ответы (2)


quad и другие подпрограммы интеграции ожидают дескриптор функции в первом слоте . Кроме того, эта функция должна исключать векторный ввод и возвращать векторный вывод. Чтобы решить проблему, попробуйте следующее:

m=0;
s=1;
F = @(x) pn(x,m,s);  % a function handle
quadgk(F,-inf,inf)   % quadgk excepts -inf to inf as limits

Это должно делать то, что вы хотите.

person MarkV    schedule 12.02.2011
comment
Спасибо! Это работает нормально! Но мы берем m = 0 и s = 1. Я хочу m > 0 и s > 0. Это одно и то же? - person George; 12.02.2011
comment
да, сделайте замену переменных z = (x - m)/(sqrt(2) s) под интегралом, чтобы свести его к случаю, когда m=0, s=1. - person MarkV; 12.02.2011

Я бы рекомендовал разбить его на сумму двух интегралов: один от -Inf до нуля, а другой от нуля до +Inf.

person duffymo    schedule 12.02.2011