[英]How do I plot functions involving integration in Matlab?
我有一個可用的特征函數CF(t, param1, param2, ...)
(這里param
s是某種分布的參數,被認為是固定的)。 我想使用Gil-Pelaez公式來獲取CDF,所以我寫了以下內容:
function [ F ] = CDF( x, param1, param2, ... )
integrand = @(v) imag(exp(-1i.*v.*x) .* CF(t, param1, param2, ...)) ./ v;
F = 0.5 - (1./pi) .* integral(integrand, 0, 100);
end
這適用於單個值,例如CDF(0.1, param1, param2, ...)
給我想要的結果。 現在我想針對x
的范圍繪制CDF
,所以我做了
x = linspace(-1,1,100);
y = CDF(x, param1, param2, ...)
plot(x, y)
我最終遇到了以下錯誤:
Not enough input arguments.
Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
但是y = CDF(x, param1, param2, ...)
確實起作用,所以罪魁禍首似乎是被積數的exp(-1i.*v.*x)
部分,因為v
和x
的大小不起作用比賽。 但我不確定如何解決此問題。
您已經猜對了,v和x的大小不匹配會導致錯誤。 integral
將向量值傳遞到函數句柄,以通過一次計算多個點的函數值來加快計算速度。
但是在這種情況下,您應該在CDF函數中對積分的調用中將參數'ArrayValued'
為true
。 這將迫使積分將v的標量值傳遞給函數句柄,然后CDF將能夠為向量x
返回向量y
的向量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.