normpdf and integral: non-scalalr arguments must match in size
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (1)
Torsten
le 11 Oct 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 commentaires
Torsten
le 12 Oct 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
Voir également
Catégories
En savoir plus sur Graphics Object Programming dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!