Effacer les filtres
Effacer les filtres

Fit returns Imaginary Coefficients

12 vues (au cours des 30 derniers jours)
Chris
Chris le 20 Mar 2013
Commenté : Matt J le 24 Avr 2022
I am fitting a complex function to complex data, but the coefficients must be real. However, when fitting I get complex valued coefficients. Most of the time its fine, because the complex part is several orders of magnitude smaller than the real part, but sometimes beta(1) has a complex part that is of the same order of magnitude as the real part. I have tried using both nlinfit and lsqcurvefit. What fitting function and options can I use to force the coefficients to stay real? I cannot just ignore the complex data because it is important, and I cannot fit the imaginary and real data separately because the coefficients must be the same for the real and imaginary part.
F = @(beta,k) beta(1)*beta(2)*exp(-beta(2)^2/2*(k - beta(3)).^2 - 1i*beta(4)*(beta(3) - k))
  2 commentaires
Matt J
Matt J le 20 Mar 2013
Modifié(e) : Matt J le 20 Mar 2013
You haven't mentioned what code you're using to perform the fit.
Chris
Chris le 20 Mar 2013
I have tried nlinfit and lsqcurvefit. Both yield the same result.

Connectez-vous pour commenter.

Réponses (2)

Matt J
Matt J le 20 Mar 2013
Modifié(e) : Matt J le 20 Mar 2013
Change F to
model= @(beta,k) beta(1)*beta(2)*exp(-beta(2)^2/2*(k - beta(3)).^2 - 1i*beta(4)*(beta(3) - k))
F=@(beta,k) [real(model(beta,k)); imag(model(beta,k))];
and split your ydata into real and imaginary parts similarly.
  2 commentaires
Chris
Chris le 21 Mar 2013
and then just fit the real part?
Matt J
Matt J le 21 Mar 2013
Modifié(e) : Matt J le 21 Mar 2013
No, as you can see from my modification of F, the imaginary part is included as well
imag(model(beta,k))

Connectez-vous pour commenter.


Miranda Jackson
Miranda Jackson le 23 Avr 2022
Use real() on all the coefficients in the fitting function so the imaginary part won't have any effect on the solution. Then use real() on the resulting coefficients you get from lsqcurvefit. Even if the coefficients go complex, only the real part will affect the result of the fit.
  1 commentaire
Matt J
Matt J le 24 Avr 2022
Note that with this approach, you will not be able to apply bounds on the coefficients.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Least Squares dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by