How to fit to an infinite series function when the independent variable contains an undetermined parameter?

5 views (last 30 days)
qt is a dependent variable; t is an independent variable; qe B h are undetermined parameters.
Procedure code is as follows.
x=[0 5 10 15 20 30 45 60 75 90 105 120];
y=[0 3.87 4.62 4.98 5.21 5.40 5.45 5.50 5.51 5.52 5.54 5.53];
plot(x,y,'bo');
hold on
pause(0.1);
beta0=[39,0.002];
% syms n t
% fun=@(beta,t) beta(1)*(1-6/(pi^2)*symsum((1./n.^2).*exp(-beta(2)*(n.^2).*t.^(-h)),n,1,Inf));
% betafit = nlinfit(x,y,fun,beta0);
beta1=beta0;
delta = 1e-8; % desired objective accuracy
R0=Inf; % initial objective function
for K=1:10000
fun=@(beta,t) beta(1)*(1-6/(pi^2)*sum((1./(1:K)'.^2).*exp(-beta(2)*((1:K)'.^2).*t.^(-h)),1));
[betafit,R] = nlinfit(x,y,fun,beta1);
R = sum(R.^2);
if abs(R0-R)<delta
break;
end
beta1=betafit;
R0 = R;
end
plot(x,fun(betafit,x),'.-r');
xlabel('x');
ylabel('y');
legend('experiment','model');
title(strcat('\beta=[',num2str(betafit),'];----stopped at--','K=',num2str(K)));

Accepted Answer

Alan Stevens
Alan Stevens on 12 Apr 2021
fminsearch seems to do ok:
x=[0 5 10 15 20 30 45 60 75 90 105 120];
y=[0 3.87 4.62 4.98 5.21 5.40 5.45 5.50 5.51 5.52 5.54 5.53];
b0 = [5, 1, -1]; % b = [qe, B, h]
b = fminsearch(@(b) fn(b,x,y), b0);
disp(b)
t = 0:120;
qt = qt_fn(t,b);
plot(x,y,'bo',t,qt), grid
xlabel('t'),ylabel('qt')
function F = fn(b,x,y)
q = qt_fn(x, b);
F = norm(y - q);
end
function qt = qt_fn(t, b)
N = 100;
term = 0;
qt = 1;
err = 1;
n = 1;
while (err>10^-8) & (n<=N)
oldterm = term;
term = -(6/pi^2)*exp(-(b(2)*n^2.*t.^(-b(3))));
qt = term + qt;
n = n+1;
err = abs(term-oldterm);
end
qt = b(1)*qt;
end

More Answers (0)

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!