Matlab - problemas con lsqcurvefit

 
Vista:

problemas con lsqcurvefit

Publicado por Virginia (2 intervenciones) el 20/01/2015 21:44:17
Hola a todos,

estoy intentando utilizar la función ''lsqcurvefit'' para hacer un ajuste no lineal, pero me da error y por mas que lo reviso no entiendo que puede pasar. Adjunto el programa que he hecho y a continuación el error que sale, por si alguien puede ayudarme. Muchas gracias por adelantado.

y=[0.000269 0.0019 0.0048 0.0083 0.014 0.0183 0.0218 0.0118 0.0070 0.0038 0.0019];
t=[-19.17 -18.47 -17.37 -16.45 -15.46 -14.52 -13.48 -12.47 -11.6 -10.65 -9.42];
plot(t,y,'bo')
F = @(x,t)(0.4/log10(exp(1)))*x(1)*10.^(-0.4*(-1.22+1)*(t-x(2)))*exp(-10.^(-0.4*(t-x(2)))); %incógnita: x=[x(1) x(2)]
x0=[1 1]; %condición inicial
x = lsqcurvefit(F,x0,t,y)
hold on
plot(t,F(x,t))
hold off


El error que sale:

??? Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==>
@(x,t)(0.4/log10(exp(1)))*x(1)*10.^(-0.4*(-1.22+1)*(t-x(2)))*exp(-10.^(-0.4*(t-x(2))))

Error in ==> lsqcurvefit at 209
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});

Error in ==> adjustment at 9
x = lsqcurvefit(F,x0,t,y)

Caused by:
Failure in initial user-supplied objective function evaluation. LSQCURVEFIT cannot continue.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

problemas con lsqcurvefit

Publicado por Daniel (264 intervenciones) el 21/01/2015 18:14:08
Primero que nada, aclaro que nunca usé LSQCURVEFIT pero veo algunas cosas que quizá esten fallando (pido disculpas si me equivoco en lo que digo)

Reemplaza la definición de F por esta (creo que le falta un punto antes del producto de la segunda exponencial)
1
F = @(x,t)(0.4/log10(exp(1)))*x(1)*10.^(-0.4*(-1.22+1)*(t-x(2))).*exp(-10.^(-0.4*(t-x(2)))); %incógnita: x=[x(1) x(2)]

yo cambié esto y "anduvo"...

...Pero indica que x0 es un mínimo local y el método se detiene. Cambié el x0 y sigue con lo mismo
Grafiqué la función para algunos valores de x0 distintos y la verdad que es muy distinta a los datos
Particularmente es una función que crece muy rápidamente a partir del valor de x(2) y no decrece
Creo que deberías chequear si es la función correcta con la que quieres ajustar.

Por otro lado, yo usualmente utilizo cftool para realizar ajustes (ya sea lineales o no), ahí podes hacer una "custom equation" y hacer lo mismo. La ventaja que yo veo al usar cftool es que vas viendo de manera mas interactiva como va ajustando

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con lsqcurvefit

Publicado por Virginia (2 intervenciones) el 23/01/2015 11:20:44
Muchas gracias, ese era el error. He probado con varios valores iniciales y efectivamente el ajuste no es bueno. Voy a comprobar la calidad de las observaciones por si tengo que excluir mas puntos. He realizado algunas pruebas con cftool (que no lo conocía), y esta francamente bien.

Gracias de nuevo y un saludo,
Virginia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

matlab-ajsute de una doble exponencial.problemas con lsqcurvefit

Publicado por David (1 intervención) el 14/04/2016 07:32:12
Muy Buenas noches

Quiero saber si alguien tiene idea de como encontrar unos parámetros específicamente a b c d; de una ecuación de doble exponencial de la forma V(t)= a*(1*exp((x-d)/b)-1*exp((x-d)/c)) [Volts], cuento con los datos experiementales para x y V(t), es decir cuento con los vectores de tiempo (x) y de tensión (V(t)), cerca de 512 datos para cada uno.

me han dicho que con optimizacion, con mínimos cuadrados se hace largo según creo, alguien que maneje simulated annealing de matlab. se cuentan con varias pruebas realizadas por tal motivo hay que encontrar a, b, c y d, para cada muestra (1 muestra = 512 datos)

Gracias si alguien sabe de esto y quiera compartirlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar