Goodness of fit , residual plot for fminbnd fitting
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Anand Ra
el 27 de Jul. de 2021
Comentada: Anand Ra
el 29 de Jul. de 2021
I have the data fitting using fminbnd solver. I am wondering how to evaluate the goodness of the fit and obtain residual plots. I dont see any options to display the residuals for fminbnd solver like other solvers. Below is my code:
t1 = [0:300:28800]'; % input X data
% input Y data
y_obs = [
0
0.0350666
0.170773
0.298962
0.400482
0.481344
0.541061
0.588307
0.626498
0.657928
0.684406
0.705545
0.721963
0.738828
0.753222
0.765903
0.776001
0.786196
0.795698
0.804062
0.81206
0.820732
0.825598
0.832848
0.837778
0.8436
0.848495
0.852999
0.858091
0.863251
0.86657
0.870919
0.875362
0.879617
0.882049
0.884957
0.887106
0.889922
0.894813
0.896395
0.900105
0.903234
0.905787
0.907843
0.909099
0.913799
0.914104
0.916195
0.920424
0.922772
0.923837
0.922742
0.924935
0.927408
0.92851
0.930684
0.930988
0.933917
0.935012
0.938209
0.940926
0.942448
0.943642
0.942436
0.94564
0.946308
0.949709
0.950971
0.951911
0.954338
0.955225
0.958114
0.958801
0.962341
0.963808
0.965617
0.965214
0.966752
0.971954
0.971949
0.973827
0.977233
0.977157
0.980893
0.979747
0.981409
0.984914
0.986015
0.986951
0.990709
0.990882
0.991937
0.992701
0.996347
0.998733
0.999351
1
];
%************
% Guessing the initial assumption d0 by finding the minimum using min function
%Implementing fminbnd instead of lsqnonlin
pfun = @(d) norm( ypred(d, t1) - y_obs);
dsamps=linspace(0,15e-10,50);
[~,imin]=min( arrayfun(pfun,dsamps) );
[best_d,fval,exitflag,output]=fminbnd(pfun,dsamps(imin-1), dsamps(imin+1),...
optimset('TolX',1e-14))
exitflag,
best_d,
%****************
%************
t2 = [0:5/60:8]';
predicted_y = ypred(best_d, t1);
figure(2)
plot(t2, y_obs, 'ro', t2, predicted_y, 'b-');
grid on
set(gca,'XLim',[0 8])
set(gca,'XTick',(0:0.5:8))
ylim([ 0 1.4])
ylabel('At/Ainf')
xlabel('Time in h')
legend({'observed', 'predicted'})
title('fitting upto full 8 hours; thickness = 2.63')
%***************
%Plotting the verification of minimum
figure(1)
fplot(pfun,[0,4e-10])
hold on; plot(best_d*[1,1],ylim,'--rx');
title('Verification of whether minimum was correctly found by fminbnd solver')
hold off
%***** Fitting model equation
function y_pred = ypred(d, t1)
a=0.00263;
gama = 0.01005;
L2 = zeros(14,1);
L3 = zeros(100,1);
L4 = zeros(100,1);
L5 = zeros(100,1);
S= zeros(97,1);
y_pred = zeros(97,1);
% t = 0;
L1 = ((8*gama)/((pi*(1-exp(-2*gama*a)))));
format longE
for t = t1(:).'
for n=0:1:100
L2(n+1) = exp((((2*n + 1)^2)*-d*pi*pi*t)/(4*a*a));
L3(n+1) = (((-1)^n)*2*gama)+(((2*n+1)*pi)*exp(-2*gama*a))/(2*a);
L4(n+1)= ((2*n)+1)*((4*gama*gama)+((((2*n)+1)*pi)/(2*a))^2);
L5(n+1) = ((L2(n+1)*L3(n+1))/L4(n+1));
end
S((t/300) +1) = sum(L5);
y_pred((t/300)+1)= 1 -(L1*S((t/300) +1)); % predicted data
end
end
2 comentarios
Adam Danz
el 27 de Jul. de 2021
The prediction-observation plot does not look like a good fit to me.
Respuesta aceptada
Adam Danz
el 27 de Jul. de 2021
Editada: Adam Danz
el 29 de Jul. de 2021
See matlab's documentation on goodness of fit. There are lots of options and you've got all the variables you need to move forward.
The residuals are just the difference between the predicted y-values and the actual y values. Here's how to plot them:
figure()
tiledlayout(2,1)
nexttile
stem(t2, predicted_y-y_obs)
xlabel('t2')
ylabel('residuals')
nexttile()
histogram(predicted_y-y_obs)
xlabel('residual')
ylabel('frequency')
Más respuestas (0)
Ver también
Categorías
Más información sobre Digital Filter Analysis en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!