MATLAB: Using fminsearch to tiffing distribution

distributionfittingfminsearchMATLAB

Hi all, my problem is this: i have a function F composed by Noise(gaussian distribution) + Value(lognormal distribution). The function F is the convolution of the two distributions. In my first script i have the function convolution.
function f = convol(mus,sis)
x=(1:16384);
mur=1643.7; %Mean
sir=93.94; %Sigma
%****Noise Normal****
frum = exp( (-(x-mur).^2)./(2*sir*sir) );
frum = frum / sum(frum); %Normalized



%****SignalLognormal****
fsig = exp( (-(log(x)-mus).^2)./(2*sis*sis) );
fsig = fsig / sum(fsig); %Normalized
f = conv(fsig,frum,'full');
f = f(1:16384);
f = f / sum(f); %Normalized
In this second script i calculate the ols error, fitting this distribution F with one that i have (called mySignal)
function diff = errorconv(PAR)
f2 = mySignal./ sum(mySignal); %Normalized
mus = PAR(1);
sis = PAR(2);
f = convol( mus, sis ); %Call the first script
diff = sum( (f- f2 ).^2 ); %Calculate the ols
My question is: is there a method to use fminsearch to make this calculation automatically? Something like fminsearch(diff, PAR); beacause my target is find the mu and sigma of function fsig such that convolution f is the best fit of f2 (my signal) starting from PAR = [value,value]; Thanks for help Luca

Best Answer

function main
par0(1)=value1;
par0(2)=value2;
par=fminsearch(@(par)errorconv(par,mySignal),par0);
function diff = errorconv(PAR,mySignal)
f2 = mySignal./ sum(mySignal); %Normalized



mus = PAR(1);
sis = PAR(2);
f = convol( mus, sis ); %Call the first script
diff = sum( (f- f2 ).^2 ); %Calculate the ols
function f = convol(mus,sis)
x=(1:16384);
mur=1643.7; %Mean
sir=93.94; %Sigma
%****Noise Normal****
frum = exp( (-(x-mur).^2)./(2*sir*sir) );
frum = frum / sum(frum); %Normalized
%****SignalLognormal****
fsig = exp( (-(log(x)-mus).^2)./(2*sis*sis) );
fsig = fsig / sum(fsig); %Normalized
f = conv(fsig,frum,'full');
f = f(1:16384);
f = f / sum(f); %Normalized
Best wishes
Torsten.