Fitting a convolution

26 visualizzazioni (ultimi 30 giorni)
Niles Martinsen
Niles Martinsen il 7 Giu 2012
Hi
I have the following piece of code:
------------------------------------------------------------------------------------------
dataX = -4:1:4;
dataY = [0 -1 -10 -40 -55 10 40 10 1];
figure(1)
plot(dataX, dataY, '*');
x = -2:0.01:2;
plot(-4:0.01:4, 1*conv(exp(-x).*heaviside(x),sin(x)), dataX, dataY, '*')
mdl = @(a, x)(a(1)*conv(exp(-x).*heaviside(x),sin(x)));
par=[1];
[fitted_par, r, J, cov, mse] = nlinfit(dataX, dataY, mdl, par);
------------------------------------------------------------------------------------------
What I am trying to do is to fit the function (a convolution) to the data set. However, I get an error due to vector size mismatch. I'm not sure what is going on here: The fitting routine should not care about how many data points I have?
Regards, Niels.

Risposte (2)

Andrei Bobrov
Andrei Bobrov il 8 Giu 2012
Try
mdl = @(a, x)a*conv(exp(-x).*heaviside(x),sin(x),'same');
[fitted_par, r, J, cov, mse] = nlinfit(dataX, dataY, mdl, 1);
  1 Commento
Niles Martinsen
Niles Martinsen il 8 Giu 2012
Hi
Thanks for replying. It runs now, but the fit gives me the amplitude 48.17, which is a horrible guess. Is something wrong with the program, or is it just a difficult function to fit?
Best regards,
Niels.

Accedi per commentare.


Niles Martinsen
Niles Martinsen il 8 Giu 2012
Andrei's suggestion works, but when I increase the resolution of x, then the convolution changes as well. Is this just a property on conv, or have I made an error?

Categorie

Scopri di più su Statistics and Machine Learning Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by