Find real valued parameters of a complex equation/model by using optimization or curve fitting.
I am trying to replicate finding the optimized parameters of a Lorentz model defined in the paper titled, "EXTRACTION OF EFFECTIVE METAMATERIAL PARAMETERS BY PARAMETER FITTING OF DISPERSIVE MODEL" (linked here). I’ve provided the equation and table of paramters below:
I’ve tried the curve fitting tool and get different results especially when I try to change the bounds. Sometimes I am able to get paramters that match the table above but my confidence in repeatbility isn’t high. I’ve also tried scripting code to use the "fittype", "lsqnonlin", or "fminsearch" but also get different answers as well. In the code below, I’m comparing the fit to the real and imaginary parts of the Lorentz model. The fit to the real data is way off and even though the fit to the imaginary values looks qualitatively good. For the fit to the imaginary part, I get different values for the estimated parameters compared to what’s reported in the paper.
%% Parameters in Table
e_inf = 1.62;
wp = 2*pi*14.63*1e9; % GHz
vc = 30.69*1e6; %MHz
mu_s = 1.26;
mu_inf = 1.12;
wo = 2*pi*9.67*1e9; % GHz
delta = 1.24*1e9; % GHz
%%
fo = [7:0.01:12].*1e9; % GHz
w = 2*pi*fo;
mu_eff = mu_inf + ((mu_s – mu_inf)*wo.^2)./(wo.^2 + 1i*w*delta – w.^2); % equation in paper / Lorentz model
real_mu_eff = real(mu_eff);
imag_mu_eff = imag(mu_eff);
x = fo;
y = real_mu_eff;
x2 = fo;
y2 = imag_mu_eff;
myfittype = fittype("real(a+((b-a)*(2*pi*1e9*c).^2)./((2*pi*1e9*c).^2+1i*2*pi*x*d*1e9-x.^2))",…
dependent="y",independent="x",…
coefficients=["a" "b" "c" "d"])
myfit = fit(x’,y’,myfittype)
figure
plot(myfit,x,y)
myfittype2 = fittype("imag(a2+((b2-a2)*(2*pi*1e9*c2).^2)./((2*pi*1e9*c2).^2+1i*2*pi*x2*d2*1e9-x2.^2))",…
dependent="y2",independent="x2",…
coefficients=["a2" "b2" "c2" "d2"])
myfit2 = fit(x2′,y2′,myfittype2)
figure
plot(myfit2,x2,y2)
The results I was expecting were: a=1.12, b=1.26, c=9.67, and d=1.24. I ‘ve atttached my attempts with using "lsqnonlin", "lsqcurvefit", and "fminsearch"; however I didn’t have success in using those methods either. What is best way to find the parameters of the Lorentz model to get the values in the table above?I am trying to replicate finding the optimized parameters of a Lorentz model defined in the paper titled, "EXTRACTION OF EFFECTIVE METAMATERIAL PARAMETERS BY PARAMETER FITTING OF DISPERSIVE MODEL" (linked here). I’ve provided the equation and table of paramters below:
I’ve tried the curve fitting tool and get different results especially when I try to change the bounds. Sometimes I am able to get paramters that match the table above but my confidence in repeatbility isn’t high. I’ve also tried scripting code to use the "fittype", "lsqnonlin", or "fminsearch" but also get different answers as well. In the code below, I’m comparing the fit to the real and imaginary parts of the Lorentz model. The fit to the real data is way off and even though the fit to the imaginary values looks qualitatively good. For the fit to the imaginary part, I get different values for the estimated parameters compared to what’s reported in the paper.
%% Parameters in Table
e_inf = 1.62;
wp = 2*pi*14.63*1e9; % GHz
vc = 30.69*1e6; %MHz
mu_s = 1.26;
mu_inf = 1.12;
wo = 2*pi*9.67*1e9; % GHz
delta = 1.24*1e9; % GHz
%%
fo = [7:0.01:12].*1e9; % GHz
w = 2*pi*fo;
mu_eff = mu_inf + ((mu_s – mu_inf)*wo.^2)./(wo.^2 + 1i*w*delta – w.^2); % equation in paper / Lorentz model
real_mu_eff = real(mu_eff);
imag_mu_eff = imag(mu_eff);
x = fo;
y = real_mu_eff;
x2 = fo;
y2 = imag_mu_eff;
myfittype = fittype("real(a+((b-a)*(2*pi*1e9*c).^2)./((2*pi*1e9*c).^2+1i*2*pi*x*d*1e9-x.^2))",…
dependent="y",independent="x",…
coefficients=["a" "b" "c" "d"])
myfit = fit(x’,y’,myfittype)
figure
plot(myfit,x,y)
myfittype2 = fittype("imag(a2+((b2-a2)*(2*pi*1e9*c2).^2)./((2*pi*1e9*c2).^2+1i*2*pi*x2*d2*1e9-x2.^2))",…
dependent="y2",independent="x2",…
coefficients=["a2" "b2" "c2" "d2"])
myfit2 = fit(x2′,y2′,myfittype2)
figure
plot(myfit2,x2,y2)
The results I was expecting were: a=1.12, b=1.26, c=9.67, and d=1.24. I ‘ve atttached my attempts with using "lsqnonlin", "lsqcurvefit", and "fminsearch"; however I didn’t have success in using those methods either. What is best way to find the parameters of the Lorentz model to get the values in the table above? I am trying to replicate finding the optimized parameters of a Lorentz model defined in the paper titled, "EXTRACTION OF EFFECTIVE METAMATERIAL PARAMETERS BY PARAMETER FITTING OF DISPERSIVE MODEL" (linked here). I’ve provided the equation and table of paramters below:
I’ve tried the curve fitting tool and get different results especially when I try to change the bounds. Sometimes I am able to get paramters that match the table above but my confidence in repeatbility isn’t high. I’ve also tried scripting code to use the "fittype", "lsqnonlin", or "fminsearch" but also get different answers as well. In the code below, I’m comparing the fit to the real and imaginary parts of the Lorentz model. The fit to the real data is way off and even though the fit to the imaginary values looks qualitatively good. For the fit to the imaginary part, I get different values for the estimated parameters compared to what’s reported in the paper.
%% Parameters in Table
e_inf = 1.62;
wp = 2*pi*14.63*1e9; % GHz
vc = 30.69*1e6; %MHz
mu_s = 1.26;
mu_inf = 1.12;
wo = 2*pi*9.67*1e9; % GHz
delta = 1.24*1e9; % GHz
%%
fo = [7:0.01:12].*1e9; % GHz
w = 2*pi*fo;
mu_eff = mu_inf + ((mu_s – mu_inf)*wo.^2)./(wo.^2 + 1i*w*delta – w.^2); % equation in paper / Lorentz model
real_mu_eff = real(mu_eff);
imag_mu_eff = imag(mu_eff);
x = fo;
y = real_mu_eff;
x2 = fo;
y2 = imag_mu_eff;
myfittype = fittype("real(a+((b-a)*(2*pi*1e9*c).^2)./((2*pi*1e9*c).^2+1i*2*pi*x*d*1e9-x.^2))",…
dependent="y",independent="x",…
coefficients=["a" "b" "c" "d"])
myfit = fit(x’,y’,myfittype)
figure
plot(myfit,x,y)
myfittype2 = fittype("imag(a2+((b2-a2)*(2*pi*1e9*c2).^2)./((2*pi*1e9*c2).^2+1i*2*pi*x2*d2*1e9-x2.^2))",…
dependent="y2",independent="x2",…
coefficients=["a2" "b2" "c2" "d2"])
myfit2 = fit(x2′,y2′,myfittype2)
figure
plot(myfit2,x2,y2)
The results I was expecting were: a=1.12, b=1.26, c=9.67, and d=1.24. I ‘ve atttached my attempts with using "lsqnonlin", "lsqcurvefit", and "fminsearch"; however I didn’t have success in using those methods either. What is best way to find the parameters of the Lorentz model to get the values in the table above? optimization, curve fitting, physics, electrical, material characterization, debye, lorentz MATLAB Answers — New Questions