Curve fitting with integral involved

2 visualizaciones (últimos 30 días)
lvenG
lvenG el 19 de Sept. de 2021
Editada: lvenG el 20 de Sept. de 2021
Hello. I am having trouble generating an equation to estimate parameters given a set of data for B and T. I am about to use lsqcurve fitting but for some reason i could not make the code run.
The equation should be in the form of :
See below:
T = [120,210,400,540,650];
B = [-344,-157,-17.5,-0.85,10.5];
fun = @(constant,T)(int(((2.*pi.*(constant(1)).^3)./3).*(1-exp((-4.*constant(2)./T)*((1./y.^4)-(1./y.^2)))),y,0,10));
T0 = [110,200]; %I just entered a random number, but don't know what this is for
T = lsqcurvefit(fun,T0,T,B);
The error I am getting is:
Unrecognized function or variable 'y'.
Error in
samplesept19>@(constant,T)(int(((2.*pi.*(constant(1)).^3)./3).*(1-exp((-4.*constant(2)./T)*((1./y.^4)-(1./y.^2)))),y,0,10))
(line 9)
fun =
@(constant,T)(int(((2.*pi.*(constant(1)).^3)./3).*(1-exp((-4.*constant(2)./T)*((1./y.^4)-(1./y.^2)))),y,0,10));
Error in lsqcurvefit (line 225)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in samplesept19 (line 12)
T = lsqcurvefit(fun,T0,T,B);
Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.
Hoping for answers and help. :) Thank you so much!

Respuesta aceptada

Walter Roberson
Walter Roberson el 19 de Sept. de 2021
format long g
T = [120,210,400,540,650];
B = [-344,-157,-17.5,-0.85,10.5];
syms t y
syms constant [1 2]
expr = ((2.*pi.*(constant(1)).^3)./3).*(1-exp((-4.*constant(2)./t)*((1./y.^4)-(1./y.^2))))
expr = 
intexpr = int(expr, y, 0, 10)
intexpr = 
RHS = 2/3.*pi.*(constant(1)).^3 .* intexpr;
fun = matlabFunction(RHS, 'vars', {constant, t})
fun = function_handle with value:
@(in1,t)in1(:,1).^3.*pi.*integral(@(y)in1(:,1).^3.*pi.*(exp((in1(:,2).*(1.0./y.^2-1.0./y.^4).*4.0)./t)-1.0).*(-2.0./3.0),0.0,1.0e+1).*(2.0./3.0)
obj = @(P,T) arrayfun(@(t) fun(P,t), T)
obj = function_handle with value:
@(P,T)arrayfun(@(t)fun(P,t),T)
P0 = [110,200]; %I just entered a random number, but don't know what this is for
P = lsqcurvefit(obj, P0, T(:), B(:))
Local minimum possible. lsqcurvefit stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
P = 1×2
1.6038792022093 184.707909161448
B2_predicted = obj(P,T(:));
plot(T, B, 'k*', T, B2_predicted, 'b-+')
legend({'original B', 'predicted B'}, 'location', 'best')
  3 comentarios
Walter Roberson
Walter Roberson el 20 de Sept. de 2021
P(1) is constant(1) and P(2) is constant(2)
lvenG
lvenG el 20 de Sept. de 2021
@Walter Roberson, thank you so much Sir. This worked.... Really, thanks for the help and enlightenment... Hope you are having a great day! Stay safe.

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by