Hi, I am trying to use fminsearch to fit two curves with common arguments. the two equations are :
function F1 = fun1(params,freqs)
F1= params(2) - ((2.* pi.* freqs).^2.*params(5).^2.*params(3))./(params(3).^2 + (2.* pi.* freqs).^2.*params(5).^2)...
-(params(4).*(1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4))...
+ ((2.* pi.* freqs).*params(7).*params(6).*params(4)).*((2 * pi.* freqs).*params(7).*params(4)+ (2 * pi.* freqs).*params(7).*params(6)+(2 * pi.* freqs).*params(1).*params(4)))...
./((1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)).^2 +((2.* pi.* freqs).*params(7).*params(4)+ (2.* pi.* freqs).*params(7).*params(6)+(2.* pi.* freqs).*params(1).*params(4)).^2);
end
function F2 = fun2(params,freqs)
F2 = ((2.* pi.* freqs).*params(5).*params(3).^2)./(params(3).^2 + (2.* pi.* freqs).^2.*params(5).^2)...
-(params(4).*((2 * pi.* freqs).*params(7).*params(4)+ (2 * pi.* freqs).*params(7).*params(6)+(2 * pi.* freqs).*params(1).*params(4)) - ((2.* pi.* freqs).*params(7).*params(6).*params(4))...
.*(1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)))...
./((1-(2.* pi.* freqs).^2.*params(1).*params(7).*params(6).*params(4)).^2 ...
+ ((2.* pi.* freqs).*params(7).*params(4)+ (2.* pi.* freqs).*params(7).*params(6)+(2.* pi.* freqs).*params(1).*params(4)).^2);
end
the fit function is :
function errors = fitfun(params, freqs, tt, hh)
tt_cal= fun1(params, freqs);
hh_cal= fun2(params, freqs);
errors = sqrt(sum((tt - tt_cal).^2 + (hh - hh_cal).^2));
end
lb = [0, 0, 0, 0, 1e10, 0, 0];
up = [inf,inf,inf,inf,inf,inf,inf];
params0 = [ 6e-8, 1.07e-7, 15, 10, 27e10, 0.29, 0.43e-6];
f = @(params)fitfun(params, freqs, tt, hh);
params = fminsearch(f, params0);
disp(params);
the fitting results are too bad. as shown in the code, all the arguments should be positive. but the results are negative or 0. this really makes me confused.
I also tried use lsqnonlin to fit the two equations, but faied. the test data have been attached.
any suggetions are appreciated!
Thanks
0 件のコメント
サインインしてコメントする。