Function value and YDATA sizes are not equal BUT THEY ARE

1 visualización (últimos 30 días)
Hi everyone,
I have a problem when I try to fit a non-linear function. The message I received says: FUNCTION VALUE AND Y DATA SIZES ARE NOT EQUAL"
BUT I already checked those sizes and seems to be equal. I don't know what is the problem. Hope somebody could help me.
This is the code:
%REFERENCE:
% "The physical chemistry of high-sensitivity differential scanning
% calorimetry of biopolymers" by Stephen Leharne in ChemTexts (2017)
% 3:1 [DOI 10.1007/s40828-016-0038-0]
clc, clear;
%--------------------------------- INPUT ---------------------------------
Data_Fig_7 = [303.58, 0.09
304.55, 0.56
305.56, 1.05
306.52, 1.48
307.52, 1.96
308.51, 2.56
309.43, 3.06
310.41, 3.55
311.43, 4.17
312.37, 4.76
313.36, 5.31
314.36, 5.95
315.39, 6.58
316.38, 7.14
317.36, 7.96
318.23, 8.46
318.94, 9.24
319.89, 10.01
320.80, 10.74
321.37, 11.47
322.08, 12.47
322.91, 13.69
323.48, 14.77
323.91, 15.72
324.31, 16.88
324.85, 18.19
325.36, 19.83
325.88, 21.70
326.39, 23.75
326.91, 26.10
327.43, 28.53
327.98, 31.62
328.50, 34.80
329.02, 38.64
329.53, 42.51
330.05, 46.64
330.47, 50.58
330.98, 54.15
331.50, 57.44
332.11, 59.66
332.82, 60.80
333.58, 60.23
333.55, 59.76
334.12, 57.88
334.64, 54.67
335.15, 50.73
335.71, 46.63
336.21, 42.70
336.63, 39.12
337.17, 35.88
337.68, 33.13
338.20, 30.93
338.71, 28.90
339.23, 27.30
339.74, 26.15
340.30, 25.23
341.00, 23.92
341.79, 23.11
342.69, 22.58
343.68, 22.23
344.67, 21.96
345.67, 21.77
346.66, 21.70
347.66, 21.63
348.64, 21.56
349.62, 21.48
350.61, 21.49
351.59, 21.51
352.52, 21.48
353.50, 21.47
354.50, 21.41
355.49, 21.32
356.46, 21.34
357.47, 21.32
358.46, 21.32
359.46, 21.11
360.47, 21.06
361.45, 20.93
362.26, 20.98];
Hvh = 400; %kJ mol-1
Hcal = 300; %kJ mol-1
R = 0.00831; %kJ mol-1 K-1
Tr = 332.4; %K Obtained form the Table 2
cp = 20; %kJ mol-1 Obtained from the Fig 7
%------------------------------- Calculations -----------------------------
%Figure 7
T7 = Data_Fig_7(:,1);
Cp7 = Data_Fig_7(:,2);
x(1) = Hvh;
x(2) = Hcal;
%K0 = 1*exp(-((x(1)/R) * (1./T7 + 1/Tr)) + ((cp/R)*((log(T7./Tr))-1+(Tr./T7))))
%fD0 = K0./(1+K0)
%Cp0 = ((x(1)*x(2))./(R.*(T7).^2)) .* (fD0.*(1-fD0)) + (fD0.*(x(2)/x(1))*cp)
K = @(T7,x) 1*exp(-((x(1)/R) * (1./T7 + 1/Tr)) + ((cp/R)*((log(T7./Tr))-1+(Tr./T7))))
Ka = K(T7,x)
fD = @(T7,x) K(T7,x)./(1+K(T7,x))
fDa = fD(T7,x)
Cp = @(T7,x) ((x(1)*x(2))./(R.*(T7).^2)) .* (fD(T7,x).*(1-fD(T7,x))) + (fD(T7,x).*(x(2)/x(1))*cp)
Cpa = Cp(T7,x)
[x,resnorm,~,exitflag,output] = lsqcurvefit(Cp,x,T7,Cp7)

Respuesta aceptada

John D'Errico
John D'Errico el 19 de Nov. de 2021
Editada: John D'Errico el 19 de Nov. de 2021
The expectation is that in the function (here, Cp) the data vector should be the SECOND argument.
It needs to be
Cp = @(x,T7) ((x(1)*x(2))./(R.*(T7).^2)) .* (fD(T7,x).*(1-fD(T7,x))) + (fD(T7,x).*(x(2)/x(1))*cp);
If you are not sure, read the help.
min sum {(FUN(X,XDATA)-YDATA).^2} where X, XDATA, YDATA and the
X values returned by FUN can be
vectors or matrices.
So the first argument to fun should have been x, and the second argument T7. MATLAB cares about the sequence you provide the arguments. :)
  1 comentario
Leonardo Gómez
Leonardo Gómez el 19 de Nov. de 2021
Thank you for answering ! It is working now! I completely missed that order.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by