Matlab - COMANDO lsqcurvefit

 
Vista:
sin imagen de perfil
Val: 96
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

COMANDO lsqcurvefit

Publicado por Jorge Ivan (65 intervenciones) el 04/08/2017 19:34:47
Hola buenas tardes, tengo la siguiente situación:
con lsqcurvefit el comando para hacer ajustes de datos en para una ecuación no lineal por ejemplo

f(x)= a sin (bx) y ajustar los parámetros a y b de unos datos yo lo uso asi:

[a,b] = lsqcurvefit (model1,startingVals1,xdata,ydata,lb,ub,options)

lo cual me funciona perfectamente para ecuaciones he incluso integrales en una dimensión, PERO MI PROBLEMA ES COMO DEBE IR EL COMANDO sqcurvefit CUANDO LA FUNCIÓN ES f(x,y) o cuando TENGO QUE AJUSTAR UNA INTEGRAL DE LA FORMA INTEGRAL f(x,y)) dx dy , REPITO ME FUNCIONA PERFECTAMENTE PARA UNA INTEGRAL DE UNA f(x)dx pero para una f(x,y)dx dy presenta un error:


QUIEN SABE ARTO SOBRE ESE COMANDO lsqcurvefit o uno similar??
GRACIAS
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 JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

COMANDO lsqcurvefit

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 04/08/2017 20:45:10
mira este ejemplo que acabo de hacer :

en xdata tengo mis dos variables, una en cada columna en ydata tengo la variable de salida que sería una columna y en la función mis parámetros son x(1) x(2) x(3) y x(4) que son los que voy a buscar mediante lsqcurvefit

1
2
3
4
5
6
xdata = [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3; 1 2 3 4 5 6 7 8 9 10]';
ydata =  [0.9965  1.3350 1.6790 2.4822 3.6969 5.5127 8.2226 12.2663 18.2991 27.2991]';
fun = @(x,xdata)x(1).*exp(x(2).*xdata(:,1))+x(3).*exp(x(4).*xdata(:,2));
x0 = [0.5,-1,0.2,0.2];
fun(x0,xdata)
  x = lsqcurvefit(fun,x0,xdata,ydata)


Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.

<stopping criteria details>


x =

0.3001 -0.2002 0.5000 0.4000




ahí están los valores óptimos de los parámetros de esa función que tiene dos variables de entrada y una de salida

espero te sea de ayuda


https://www.facebook.com/royethmatlab/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 96
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

COMANDO lsqcurvefit

Publicado por Jorge Ivan (65 intervenciones) el 04/08/2017 22:59:03
ASK

hola, no es precisamente lo que necesito, comprendo la idea que me han dado, en la imagen trato de explicar tal vez mas claro mi problema, muchas gracias
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

COMANDO lsqcurvefit

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 04/08/2017 23:29:07
me tomé el trabajo de colocarte ese ejemplo y el ejemplo funciona perfectamente , si deseas agregarle una integral solo debes editarlo un poco, parametriza la integral, aquí puedes encontrar una buena documentación de cómo parametrizar la ecuación https://www.mathworks.com/help/matlab/ref/integral.html


el problema no está en lsqcurvefit, solo debes editar la función fun y colocarle que tus datos estén en función de una integral , cosa que puedes lograr con el link que te adjunté anteriormente
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
sin imagen de perfil
Val: 96
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

COMANDO lsqcurvefit

Publicado por Jorge Ivan (65 intervenciones) el 04/08/2017 23:32:31
Amigo, yo tengo escrita bien la función ( la integral doble) incluso puedo sacar columnas de datos de ella, incluso si lo hago con una integral sencilla me funciona perfectamente la regresión con slqcurvefit , pero como he comentado no se como para una integral doble ( la regresión )
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

COMANDO lsqcurvefit

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 05/08/2017 00:14:26
eso depende de la función que tengas te recomiendo :

comprueba que ese model2 que tienes ahí te está dando la misma cantidad de datos que tienes en x y en y , a veces hasta por no poner un punto en la multiplicación y división tu función puede que no resulte ser la que consideres que tienes bien escrita, de igual manera comprueba que puedas varias tu parámetro en esa misma función que depende de dos integrales

el método depende de los valores iniciales que le des , si a mi ejemplo anterior le hubiese dado valores muy diferentes probablemente lsqcurvefit me hubiese dado una respuesta totalmente diferente que no era la óptima global , para esto puedes valerte de una aproximación numérica de tu integral

ahora bien si trabajas con integral doble debes hacer una táctica , puedes definir dos funciones como por ejemplo :
1
2
fun1=@(x,y,c)  c./( sqrt(x + y) .* (1 + x + y).^2 );
fun =@(x,c) integral2(@(x,c) fun1(x(1),x(2),c),1,c,4,5);

porque para lsqcurvefit en x deben ir tus variables y en c tus parámetros
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