Matlab - fsolve y soluciones imaginarias

 
Vista:

fsolve y soluciones imaginarias

Publicado por emilio (51 intervenciones) el 09/07/2010 18:29:38
Hola amigos, estoy trabajando un una famila de ecuaciones no lineales, y necesito calcular para cada una sus raices en cierto intervalo, he utilizado un pequeño m file, para que vaya corriendo un fsolve y calcule algo asi:

for r=0:10 ptos de inicio para fsolve

C = fsolve ( f(x) , r )

end,

las raices las guardo y todo funciona bien pero ocurre lo siguiente, que cuando grafico f(x), me di cuenta que varias de las soluciones q ponía el fsolve eran imaginarias y medaba la siguiente advertencia:

No solution found.

fsolve stopped because the problem appears regular as measured by the gradient,
but the vector of function values is not near zero as measured by the
default value of the function tolerance.

<stopping criteria details>

pero me arroja igual un valor numerico, que es modulo del imaginario, este valor no es advertido como imaginario, osea no trae una i, y no se como puedo filtrar estos valores para q no aparezcan

he intentado ver la condicón dentro del m file del fsolve para filtrarlo a traves de un if pero no lo encontré, si alguien me puede ayudar sería de mucha ayuda, o si alguien tiene una mejor idea de como poder manejar estas eqs. de otra forma. SALUDOS
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:fsolve y soluciones imaginarias

Publicado por Jorge (226 intervenciones) el 11/07/2010 18:18:53
No entiendo si quieres resolver sistemas de ecuaciones o si quieres encontrar raíces de ecuaciones no lineales individuales.

Suponiendo que quieras resolver un sistema, primero defines el sistema y la condición que quieres conseguir; por ejemplo:

function y = nls1(x)
y1 = 2 * x;
y2 = 4* x^2 + x;
y3 = exp(2 * x) - 1;
y = norm(y1-y2-y3, 2);

Allí tienes 3 ecuaciones, y quieres encontrar el valor que las hace iguales (encontrando el valor de y1-y2-y3, que debería ser 0).

Luego, utilizas 'fminsearch' así:

fx = 'nls1';
x0 = -5
[x_sol, f, EF, out] = fminsearch(fx, x0)


El valor x0 es el punto de arranque. La solución puede cambiar con diferentes puntos de arranque iniciales.

Aquí hay 3 enlaces con ejemplos relacionados, que te pueden servir

http://www.matrixlab-examples.com/simultaneous-equations-nonlinear.html
http://www.matrixlab-examples.com/nonlinear-programming.html
http://www.matrixlab-examples.com/mathematical-optimization.html
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:fsolve y soluciones imaginarias

Publicado por emilio (51 intervenciones) el 12/07/2010 00:09:37
Con respecto a las ecuaciones, en realidad es solo una pero q depende de 2 variables (qx, qt), y lo que estoy haciendo es darle distintos valores de qx, para los valores de qt donde la función se hace cero, dentro de un intervalo arbitrario

es algo asi:
for qx=0: 0.001 :20 (un limite arbitrario)

for i=0:20 (i es el valor de inicio para q el fsolve encuentre un cero)

fsolve(@(qt) A(qt.,qx),i) (aqui busco ceros, haciendo correr el fsolve por diferentes ptos)

y a qui por cada valor de qx, encuentro unos 21 ceros por el recorrido del fsolve, aqui puedo facilmente filtrar las soluciones iguales, pero no puedo sacar las imaginarias, pq el fsolve no me dice q son imaginarias, pero cuando yo grafico A(qt,i) (i un valor arbitrario), en 2d A v/s qt, me doy cuanta que algunas de las soluciones q propone el son IMAGINARIAS, y no sé como quitarlas.

El problema no es resolver 3 o cuatro ecs. no lineales, sino que una familia de ecuaciones casi iguales (más de 100 ecs.), por eso debo contruir un pequeño programita, q está listo pero con ese detalle de las sol. imaginarias.

Igual voy a intertar hacer con lo q me sugieres arriba, y vere como lo puedo programar, pero con el fminsearch encuentro minimos, y no es la idea pq muchos de esos minimos no son ceros y tendria que buscar como filtrarlos,

Igual gracias por tu ayuda
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:fsolve y soluciones imaginarias

Publicado por Jorge (226 intervenciones) el 12/07/2010 00:43:12
fminsearch encuentra mínimos locales, efectivamente.

El asunto es plantear el problema de tal manera que ese mínimo sea la solución.
Esto es la definición de la función objetivo.

Por ejemplo, si después de definir las ecuaciones y1 e y2, encuentras norm(y1 - y2) y lo minimizas con fminsearch, lo que estás encontrando es el valor que hace que y1 e y2 sean lo más similares posible, o sea cuando son iguales las funciones. Efectivamente, no necesariamente son 0, pero se asemejan en un valor dado.

También recuerda que los métodos numéricos incluyen necesariamente una tolerancia que debes considerar. Nunca tienes que buscar que tu sistema sea exactamente 0, sino +/- cierto valor que definas arbitrariamente.

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