normpdf and integral: non-scalalr arguments must match in size

12 views (last 30 days)
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.

Answers (1)

Torsten
Torsten on 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 Comments
Torsten
Torsten on 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

Sign in to comment.

Categories

Find more on Graphics Object Programming in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!