# Lsqnonlin_Fitting Data

1 view (last 30 days)
Fredic on 8 Oct 2020
Commented: Fredic on 11 Oct 2020
Hello Guys!!
I am performing a fitting of different curves using lsqnonlin. My fitting equation is composed of six parameters. When I run my script I obtained one set of parameters for each curve.
It is possible to perform the fitting using only one set of parameters for each curve??
In the attachment my script:
x0 = [10.07 5.89 21.62 0.116 0.493 47.99];
coeff = zeros(6,mm);
LB=[0 0 0 0 0 0];
UB=[inf inf inf 1 0.5 90];
sig_fit_11 = zeros(nn,mm);
sig_fit_22 = zeros(nn,mm);
for i=1:mm
options = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective');
[x,resnorm,residual,exitflag]=lsqnonlin(@(x)f_const(Lam11(:,i), Lam22(:,i), x) - [sigma11(:,i); sigma22(:,i)],x0,LB,UB,options);
coeff (:,i) = x;
sigma = f_const(Lam11(:,i), Lam22(:,i), x);
sig_fit_11(:,i) = sigma(1:nn);
sig_fit_22(:,i) = sigma((nn+1):end);
end
Thank you very much

Alex Sha on 8 Oct 2020
Hi, if possible, please post out your data of each curve, as well as the fitting equation.

Show 1 older comment
Alex Sha on 9 Oct 2020
Where is your fitting equation which is composed of six parameters?
Fredic on 9 Oct 2020
function [sigOutput]=f_const(Lam11,Lam22,x)
c=x(1);
k1=x(2);
k2=x(3);
kip=x(4);
kop=x(5);
alpha=x(6);
A=2*kop*kip;
B=2*kop*(1-2*kip);
lam3 = 1./(Lam11.*Lam22);
I1=(Lam11.^2+Lam22.^2+lam3.^2);
I4=Lam11.^2.*cosd(alpha).^2+Lam22.^2.*sind(alpha).^2;
In=lam3.^2;
E4=A.*I1+B.*I4+(1-3*A-B).*In-1;
sig1=(c+4.*(A+B.*cosd(alpha).^2).*k1.*E4.*exp(k2.*E4.^2)).*Lam11.^2-(c+4*(1-2*A-B).*k1.*E4.*exp(k2.*E4.^2)).*lam3.^2;
sig2=(c+4.*(A+B.*sind(alpha).^2).*k1.*E4.*exp(k2.*E4.^2)).*Lam22.^2-(c+4*(1-2*A-B).*k1.*E4.*exp(k2.*E4.^2)).*lam3.^2;
sigOutput=[sig1;sig2];
end
Fredic on 11 Oct 2020
do you have an idea?