Matlab - Obtención de ecuación a partir de puntos experimen

   
Vista:

Obtención de ecuación a partir de puntos experimen

Publicado por Edu Ruiz de Eguilaz (2 intervenciones) el 16/02/2010 09:52:52
Deseo obtener una ecuación tipo "y = a - ((x^c)/b)" para implementarla en un programa de elementos finitos.
He obtenido experimentalmente los valores (x,y) de 12 puntos y deseo hacer una aproximación por medio de una ecuación de la forma que he comentado.
He probado con otros programas tipo "Maxima" pero no acierto a sacar las constantes "a, b y c"

Agradecería si alguien me puede ayudar, porque estoy atascado y sin estas constantes no puedo continuar.

Gracias por adelantado
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

RE:Obtención de ecuación a partir de puntos experi

Publicado por Jorge (226 intervenciones) el 16/02/2010 20:52:22
Puedes intentar un ajuste de curvas y para ello utilizar la función ' fminsearch '.

Si tienes acceso a la toolbox de Optimización, hay otras funciones para lograrlo, pero fminsearch es una función estándar, por ello la menciono.

Lo primero es definir la ' función objetivo '. Esta función encuentra un valor que mide la diferencia entre tu un resultado de tu función (que incluye a, b y c) y los puntos dados.

fminsearch corre iterativamente esa función objetivo, automáticamente va modificando los valores de tus variables (a, b y c) y minimiza la diferencia, de tal manera que al final, el resultado son los valores óptimos de a, b y c, o sea los que mejor cumplen tu objetivo.
A ese proceso también se le llama ' extracción de parámetros '.

Mi sugerencia es que estudies la función fminsearch (help fminsearch).
Después, ve la página

http://iteso.mx/~erayas/cir_opt.htm y revisa los ejemplos en la sección que dice

5. Circuit parameter extraction using classical optimization methods

Eso te puede servir.

Suerte!
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

RE:Obtención de ecuación a partir de puntos experi

Publicado por Edu Ruiz de Eguilaz (2 intervenciones) el 17/02/2010 11:02:54
A ver si lo he comprendido,
he creado una función del tipo que estoy buscando "y = a - ((x)^c) / b"
A continuación he creado dos matrices con los valores experimentales que he obtenido, es decir: x=[x1 x2 ... x12] e y=[y1 y2 ... y12]

Lo que no veo claro en los ejemplos es cómo debo especificar al comando "fminsearch" dónde debe buscar los los valores.

es decir, yo he escrito lo siguiente:

function f=myfun(x,a,b,c)
f=a - ((x)^c) / b

y ahora cómo le indico que busque en las matrices de los valores x e y que he creado en el main program?

fminsearch (@(x) myfun (x,a,b,c),???

Gracias por tu atenció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

RE:Obtención de ecuación a partir de puntos experi

Publicado por Jorge (226 intervenciones) el 17/02/2010 20:57:23
Lo que quieres hacer no es sencillo. Me temo que vas a batallar un rato si no estás familiarizado con la instrucción fminsearch o similares...

Te sugiero que primero veas la descripción de fminsearch, para entender todos los parámetros que puede tener (son muchos, no es trivial).

fminsearch la llamarías desde el programa principal, posiblemente así:

[x_opt, FunVal, EF, output] = fminsearch('OF_fun', x0, options);

o, lo mínimo sería así:

[x_opt] = fminsearch('OF_fun', x0);

En donde :
x_opt es tu vector óptimo (la solución a, b, c)
FunVal, EF, output son valores que te da fminsearch para verificar qué tan bien terminó la minimización. Puede que no haya convergido a un buen valor y así te lo indica. Tienes que estar consciente de que lo más probable es que haya muchas soluciones.

OF_fun es la función objetivo, que está definida en un archivo m.
x0 es el vector de arranque. Son los valores iniciales que das a a, b y c.
x0 = [a0 b0 c0].
options son valores que defines con la instrucción optimset. Se puede afinar la búsqueda de fminsearch. Puede ser que inicialmente no lo necesites, pero la respuesta cambia si cambias las tolerancias de búsqueda (que se definen con optimset).

La función OF_fun la tienes que definir posiblemente así:

function OFValue = OF_fun(x)
a = x(1);
b = x(2);
c = x(3);

% Ref es tu referencia, los puntos que ya tienes y contra los que vas a comparar
Ref_x = [x1 x2 x3 ...];
Ref_y = [y1 y2 y3 ...];

% Aquí evalúas la función, con los parámetros a, b y c, que fminsearch actualiza en
% cada iteración
fun_y = a - ((Ref_x).^c) / b;

% Sacas la diferencia (vector de error) y la normalizas para retroalimentar a
% fminsearch y evaluar qué tan bien va el algoritmo

OFValue = norm(Ref_y - fun_y, 1);

fminsearch encuentra los valores de a, b y c que hacen que |Ref_y - fun_y| sea el mínimo posible. Esto significa que se busca que tu función (con a, b y c) sea lo más parecido a Ref_y.

Este es el concepto general. Lo vas a tener que perfeccionar para tu caso.
Suerte!
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

RE:Obtención de ecuación a partir de puntos experi

Publicado por ramiro (54 intervenciones) el 17/02/2010 23:12:32
Si tienes la herramienta de ajustes de curvas de matlab, la cual se invoca escribiendo cftool en la ventana de comandos, puedes proponer varios ajustes de los que vienen ahí o el tuyo propio y hacer las comparaciones entre ellos.
>> cftool
abre una ventana donde te va a pedir los datos y después el tipo de ajuste que quieres.
Espero que te sirva.
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