simultaneously, fitting two functions with two databases

2 vues (au cours des 30 derniers jours)
Arad
Arad le 14 Août 2022
Commenté : Torsten le 15 Août 2022
I have two data sets y1(x00) and y2(x00) in the x00 range, as:
x00=[0,1,1.5,2,2.5,3,3.5,4,4.5,5]*2*pi/3;
y1=[0,1.082,2.27,3.91,5.93,8.24,10.69,13.02,14.83,15.55];
y2=[36.39,36.16,35.81,35.24,34.40,33.27,31.88,30.39,29.11,29.00];
I need fitting both functions f1=@(c1,c21,c22,c3,x) and f2=@(c1,c21,c22,c3,x), with these data in ranges x00.
Note that [c1,..,c4] are required constant coefficients and x is the varibale in range of the x00. I need to obtain the [c1,..,c4] parameters.
In my search, I found nonlinear least squre methodes with matlab, but please take into account that I am new to Matlab and can only curve fit very basic data points.
x00=[0,1,1.5,2,2.5,3,3.5,4,4.5,5]*2*pi/3;
y1=[0,1.082,2.27,3.91,5.93,8.24,10.69,13.02,14.83,15.55];
y2=[36.39,36.16,35.81,35.24,34.40,33.27,31.88,30.39,29.11,29.00];
f1=@(c1,c21,c22,c3,x) sqrt( 2.0*c21*cos(1.5*x) - 3.0*c3 - 2.0*c21 - 2.0*c22 - 3.0*c1 + 2.0*c22*cos(1.5*x) - 1.0*exp(-x*1.5i)*(c1*c3 + 2.0*c1^2*exp(x*4.5i) + 2.0*c1^2*exp(x*1.5i) + 5.0*c1^2*exp(x*3.0i) + 5.0*c3^2*exp(x*3.0i) + 2.0*c3^2*exp(x*6.0i) + 6.0*c21^2*exp(x*3.0i) + 6.0*c22^2*exp(x*3.0i) + 2.0*c3^2 - 8.0*c21^2*exp(x*3.0i)*cos(1.5*x) + 2.0*c21^2*exp(x*3.0i)*cos(3.0*x) - 8.0*c22^2*exp(x*3.0i)*cos(1.5*x) + 2.0*c22^2*exp(x*3.0i)*cos(3.0*x) + 6.0*c1*c3*exp(x*4.5i) + 6.0*c1*c3*exp(x*1.5i) + 4.0*c1*c3*exp(x*3.0i) + c1*c3*exp(x*6.0i) - 12.0*c21*c22*exp(x*3.0i) + 16.0*c21*c22*exp(x*3.0i)*cos(1.5*x) - 4.0*c21*c22*exp(x*3.0i)*cos(3.0*x))^(1/2));
f2=@(c1,c21,c22,c3,x) sqrt( 2.0*c21*cos(1.5*x) - 3.0*c3 - 2.0*c21 - 2.0*c22 - 3.0*c1 + 2.0*c22*cos(1.5*x) + exp(-x*1.5i)*(c1*c3 + 2.0*c1^2*exp(x*4.5i) + 2.0*c1^2*exp(x*1.5i) + 5.0*c1^2*exp(x*3.0i) + 5.0*c3^2*exp(x*3.0i) + 2.0*c3^2*exp(x*6.0i) + 6.0*c21^2*exp(x*3.0i) + 6.0*c22^2*exp(x*3.0i) + 2.0*c3^2 - 8.0*c21^2*exp(x*3.0i)*cos(1.5*x) + 2.0*c21^2*exp(x*3.0i)*cos(3.0*x) - 8.0*c22^2*exp(x*3.0i)*cos(1.5*x) + 2.0*c22^2*exp(x*3.0i)*cos(3.0*x) + 6.0*c1*c3*exp(x*4.5i) + 6.0*c1*c3*exp(x*1.5i) + 4.0*c1*c3*exp(x*3.0i) + c1*c3*exp(x*6.0i) - 12.0*c21*c22*exp(x*3.0i) + 16.0*c21*c22*exp(x*3.0i)*cos(1.5*x) - 4.0*c21*c22*exp(x*3.0i)*cos(3.0*x))^(1/2));
Any support will help me, thanks.
Please assist.
  3 commentaires
Star Strider
Star Strider le 14 Août 2022
Looking at ‘f1’ and ‘f2’, they appear to produce a complex result because of the complex exponential. They also seem to be the same except for the seventh terms that have opposite signs. Is one of the dependent variables supposed to fit one of the functions and the other dependent variable the other, or one the real part of the function and the other the imaginary part of the function, or something else?
Also, it might be better to square the independent variables and fit the functions without taking the square roots, for the obvious reason that there are going to be two square roots resulting from each function.
Arad
Arad le 14 Août 2022
Modifié(e) : Arad le 14 Août 2022
Thank you for your attentions.
  1. The f1 and f2 are roots of the 2-th equation and have same components in their terms. They have form as: F1=sqrt[A+sqrt[B]] and F2=sqrt[A-sqrt[B]].
  2. Although, they have complex terms in their boady, but they are real functions.
  3. You can neglicated the sqrt, and I change the database after it.
  4. the c1,c21,c22,c3 are real parameters.
A22= 2*c22*(2*cos((3*x)/2) - 2) - 3*c3 - 3*c1;
A21= 2*c21*(2*cos((3*x)/2) - 2) - 3*c3 - 3*c1;
B1=c1*(exp(x*1i) + 2*exp(-(x*1i)/2))
B3=c3*(2*exp(x*1i) + exp(-x*2i))
f1=sqrt((A11+A22)/2 - (abs(B1)^2 + abs(B3)^2 + B1*conj(B3) + B3*conj(B1) + ((A11-A22)/2)^2)^(1/2))
f2=sqrt((A11+A22)/2 + (abs(B1)^2 + abs(B3)^2 + B1*conj(B3) + B3*conj(B1) + ((A11-A22)/2)^2)^(1/2))
If needed, I calculate the functions analytically and write their real form which is based on the Cos(x)???

Connectez-vous pour commenter.

Réponse acceptée

Torsten
Torsten le 14 Août 2022
I think you will have to work on the representation of f1 and f2 without the imaginary unit:
c10 = 3.0;
c210 = 1.0;
c220 = -1.0;
c30 = 0.5;
C0 = [c10,c210,c220,c30];
x = [0,1,1.5,2,2.5,3,3.5,4,4.5,5]*2*pi/3;
y1 = [0,1.082,2.27,3.91,5.93,8.24,10.69,13.02,14.83,15.55];
y2 = [36.39,36.16,35.81,35.24,34.40,33.27,31.88,30.39,29.11,29.00];
f1 =@(c1,c21,c22,c3) real(2.0*c21*cos(1.5*x) - 3.0*c3 - 2.0*c21 - 2.0*c22 - 3.0*c1 + 2.0*c22*cos(1.5*x) - exp(-x*1.5i).*(c1*c3 + 2.0*c1^2*exp(x*4.5i) + 2.0*c1^2*exp(x*1.5i) + 5.0*c1^2*exp(x*3.0i) + 5.0*c3^2*exp(x*3.0i) + 2.0*c3^2*exp(x*6.0i) + 6.0*c21^2*exp(x*3.0i) + 6.0*c22^2*exp(x*3.0i) + 2.0*c3^2 - 8.0*c21^2*exp(x*3.0i).*cos(1.5*x) + 2.0*c21^2*exp(x*3.0i).*cos(3.0*x) - 8.0*c22^2*exp(x*3.0i).*cos(1.5*x) + 2.0*c22^2*exp(x*3.0i).*cos(3.0*x) + 6.0*c1*c3*exp(x*4.5i) + 6.0*c1*c3*exp(x*1.5i) + 4.0*c1*c3*exp(x*3.0i) + c1*c3*exp(x*6.0i) - 12.0*c21*c22*exp(x*3.0i) + 16.0*c21*c22*exp(x*3.0i).*cos(1.5*x) - 4.0*c21*c22*exp(x*3.0i).*cos(3.0*x))).^(1/2) - y1.^2;
f2 =@(c1,c21,c22,c3) real(2.0*c21*cos(1.5*x) - 3.0*c3 - 2.0*c21 - 2.0*c22 - 3.0*c1 + 2.0*c22*cos(1.5*x) + exp(-x*1.5i).*(c1*c3 + 2.0*c1^2*exp(x*4.5i) + 2.0*c1^2*exp(x*1.5i) + 5.0*c1^2*exp(x*3.0i) + 5.0*c3^2*exp(x*3.0i) + 2.0*c3^2*exp(x*6.0i) + 6.0*c21^2*exp(x*3.0i) + 6.0*c22^2*exp(x*3.0i) + 2.0*c3^2 - 8.0*c21^2*exp(x*3.0i).*cos(1.5*x) + 2.0*c21^2*exp(x*3.0i).*cos(3.0*x) - 8.0*c22^2*exp(x*3.0i).*cos(1.5*x) + 2.0*c22^2*exp(x*3.0i).*cos(3.0*x) + 6.0*c1*c3*exp(x*4.5i) + 6.0*c1*c3*exp(x*1.5i) + 4.0*c1*c3*exp(x*3.0i) + c1*c3*exp(x*6.0i) - 12.0*c21*c22*exp(x*3.0i) + 16.0*c21*c22*exp(x*3.0i).*cos(1.5*x) - 4.0*c21*c22*exp(x*3.0i).*cos(3.0*x))).^(1/2) - y2.^2;
F = @(c)[f1(real(c(1)),real(c(2)),real(c(3)),real(c(4))),f2(real(c(1)),real(c(2)),real(c(3)),real(c(4)))];
C = lsqnonlin(F,C0)
Local minimum possible. lsqnonlin stopped because the size of the current step is less than the value of the step size tolerance.
C =
61.9452 +11.9296i 1.4621 -43.5196i -1.8836 +33.6286i 56.3354 -80.1942i
norm(F(C))
ans = 3.3212e+03
C = real(C)
C = 1×4
61.9452 1.4621 -1.8836 56.3354
  2 commentaires
Arad
Arad le 14 Août 2022
Dear Torsten
Thank you very much.
Torsten
Torsten le 15 Août 2022
At least this gives you some hints on how to set up your problem. The fitting results itself are bad - so I think you will have to further modify f1 and f2.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Chemistry dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by