Fitting data to a polar equation

60 visualizaciones (últimos 30 días)
Omar Ashour
Omar Ashour el 14 de Feb. de 2021
Comentada: Omar Ashour el 16 de Feb. de 2021
I have some data that looks like this:
I have it in Cartesian coordinates but can convert it to polar coordinates of course. Now I need to fit it to a somewhat messy function of the form shown in the code below using the Curve Fitting Toolbox. The problem is that the function is in polar coordinates, and I have no clue how to write the custom fitting function to work with this (i.e. in the form y = f(x))
Here the fitting parameters should be kappa, k00, k01, etc. Any idea how to do this? The parameters in teh code snipped below are tuned to look somewhat similar to my data, but I need a more accurate fit not done by eye.
A = @(theta, kappa, mu, nu) cos(nu*kappa)*cos(mu*theta);
theta = linspace(0, 2*pi, 500);
kappa = 5.0;
k00 = 1.0;
k01 = 2.0;
k02 = -5.0;
k03 = -1.7;
k31 = 0.0;
k60 = 0.7;
k120 = 0.1;
FS = k00*A(theta, kappa, 0, 0) + k01*A(theta, kappa, 0, 1) + k02*A(theta, kappa, 0, 2) ...
+ k03*A(theta, kappa, 0, 3) + k31*A(theta, kappa, 3, 1) + k60*A(theta, kappa, 6, 0)...
+ k120*A(theta, kappa, 12, 0);
polarplot(theta, FS);
  3 comentarios
Omar Ashour
Omar Ashour el 14 de Feb. de 2021
Editada: Omar Ashour el 14 de Feb. de 2021
I just uploaded the file, thank you! I'll try what you suggested and let you know if I have some success.
EDIT: I tried it this way and it worked out! Thank you! Time to try it with the actual complicated data set and see what happens.
Omar Ashour
Omar Ashour el 14 de Feb. de 2021
Editada: Omar Ashour el 14 de Feb. de 2021
So to conclude, convert your data to polar coordinates using cart2pol and then do the fit using phi as the independent variable. What you'll see while fitting is something completely different from how you're used to looking at the data of course, but plot the fit afterwards in whichever way is appropriate to get the proper result.
Still open to better suggestions on how to do this.
Cheers.

Iniciar sesión para comentar.

Respuesta aceptada

John D'Errico
John D'Errico el 14 de Feb. de 2021
Editada: John D'Errico el 14 de Feb. de 2021
It seems from this last comment that you re making some progress. There are some points I should make.
First, when you convert to a polar form, remember that a tool like cart2pol works around the origin. So if your data is offset, then you would need to translate it, so the origin is directly in the center. A mean shift is probably good much of the time, but if that translation is not perfect, then you would probably see a sinusoidal bias introduced into the expression r(theta).
Next, in the case of the relationship you show, a simple model is probably not too bad. Essentially, you would be creating a simple Fourrier series approximation. But if that is inadequate, you might be forced to use other model forms, perhaps regression spline based models.
plot(kx,ky,'o')
The problem here, is that a simple fit of the form y=f(x) must fail, because this is not a single valued relationship.
After a polar transformation, we would see:
[theta,R] = cart2pol(px,py);
plot(theta,R,'o')
And this is now a single valued function, thus R = f(theta). So in theory, things can be done.
We might now wish to fit this data using what is essentially a fourier series approximation. There will be a DC bias in there, so a constant term. The model would be of the general form:
R(theta) = a0 + a1*sin(b1*theta) + a2*cos(b2*theta) + a3*sin(b3*theta) + a4*cos(b4*theta) + ...
You could use as many terms there as you can estimate. Good starting values would be important of course. Is all good now? NO! You still have a significant problem.
At least in this data, we see cusps at every peak. That corresponds to essential singularities in the derivative, but still singularities. Can a functional form on the one I showed above represent a function with singularities well? Sadly, no. No simple trig series can represent a function with singulariites in it without infinitely many terms. Those cusps become a problem. And sadly, any other tool you use, such as a regression spline will also see a problem, since most functions do not handle singularities well, even if they are only in the derivatives.

Más respuestas (0)

Categorías

Más información sobre Spline Postprocessing en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by