normpdf and integral: non-scalalr arguments must match in size
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I want to compute a numerical integration problem, the code for which is as follows
mu=0;
sig2_tmp=1;
k=100;
samps=normrnd(mu,sig2_tmp,[k,1]);
func=@(x)prod(normpdf(samps,mu,x));
c(j)=integral(func,0,inf);
It gives the following error message:
Error using normpdf (line 36)
Non-scalar arguments must match in size.
Error in @(x)prod(normpdf(samps,mu,x))
But when I evaluate func at x=1, it works fine. So, I don't know how to fix this error.
Please help.
0 Kommentare
Antworten (1)
Torsten
am 11 Okt. 2018
Does it make sense to integrate the pdf's over the standard deviation ?
In any case:
Try
func=@(x)prod(normpdf(samps,ones(size(x))*mu,x));
Best wishes
Torsten.
2 Kommentare
Torsten
am 12 Okt. 2018
This code works for me:
function main
mu=0;
sig2_tmp=1;
k=100;
samps=randn(k,1);
samps=mu+sig2_tmp*samps;
func=@(x)prod(normpdf_gnu(samps,mu,x));
c=integral(func,0,inf)
end
function p = normpdf_gnu(x,m,s);
% NORMPDF returns normal probability density
%
% pdf = normpdf(x,m,s);
%
% Computes the PDF of a the normal distribution
% with mean m and standard deviation s
% default: m=0; s=1;
% x,m,s must be matrices of same size, or any one can be a scalar.
%
% see also: NORMCDF, NORMINV
% Reference(s):
% $Revision: 1.6 $
% $Id: normpdf.m,v 1.6 2003/03/13 16:00:33 schloegl Exp $
% Version 1.28 Date: 13 Mar 2003
% Copyright (c) 2000-2003 by Alois Schloegl <a.schloegl@ieee.org>
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
if nargin==1,
m=0;s=1;
elseif nargin==2,
s=1;
end;
% allocate output memory and check size of argument
z = (x-m)./s; % if this line causes an error, input arguments do not fit.
%p = ((2*pi)^(-1/2))*exp(-z.^2/2)./s;
SQ2PI = 2.5066282746310005024157652848110;
p = exp(-z.^2/2)./(s*SQ2PI);
p((x==m) & (s==0)) = inf;
p(isinf(z)~=0) = 0;
p(isnan(x) | isnan(m) | isnan(s) | (s<0)) = nan;
end
Siehe auch
Kategorien
Mehr zu Graphics Object Programming finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!