Matlab - ceros funciones complejas

 
Vista:

ceros funciones complejas

Publicado por emilio (52 intervenciones) el 16/06/2011 17:59:34
hola:

Estoy trabajando en un problema numerico, para encontrar ceros en funciones f(x)=0 y f(i*x)=0, donde i es imaginario y f(x) es una funcion no lineal, ya he computado los ceros de esta funcion atraves de varios metodos numericos distintos, Newton, Secante, etc..., todo con muy buen resultado. Pero ahora me surgio una duda sobre como encontrar los ceros de f(z)=0, donde Z= a +ib. He buscado en la red para ver si hay algunos metodos o algoritmos ya preparados y no he encontrado nada.

Alguno tiene alguna sugerencia de como hallar ceros en funciones complejas en forma numerica??
conocen algun metodo numerico???

Cuaquier contribucion será valorada,

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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

ceros funciones complejas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/06/2011 16:31:04
hola Emilio.

El programa de newton que estoy pegando funciona para raices complejas y no para raices reales.
Para caso de raices de reales, eso algo comun, lo puedes encontrar en internet.

Revisa este material y luego ejecutas el programa que te estoy copiando
www.math.arq.uva.es/~cmunuera/MaterialDocente/Fractales/Fractal_6.pdf

%================================================
clear
syms z
fun=input('Ingrese la funcion f(z)=');
f=inline(fun);
d=diff(fun);
df=inline(d);
po=input('Ingrese el valor inicial po=');
No=input('Ingrese numero maximo de iteraciones N=');
tol=input('Ingrese la tolerancia tol=');
P(1)=po;
i=1;
while i<= No %Haga los Pasos 3-6
p=po-f(po)/df(po); %(Calcule pi)
P(i+1)=p;
if imag(p)~=0 && norm(p-po,2)<tol
fprintf('la solucion aproximada es %s\n',num2str(p));
disp('Procedimiento terminado satisfactoriamente');
for i=1:length(P)
fprintf(' %d\t%s\n',i-1,num2str(P(i)));
end

return
else
i=i+1;
po =p; %(Redefina po )
end
end

fprintf('El método fracasó después de %d, iteraciones\n',No);
disp('Procedimiento terminado sin éxito')
%=====================================

EJECUCION:
%========================================
>> newtoncomplejo
Ingrese la funcion f(z)=z^3-1
Ingrese el valor inicial po=i
Ingrese numero maximo de iteraciones N=100
Ingrese la tolerancia tol=10^-5
la solucion aproximada es -0.5+0.86603i
Procedimiento terminado satisfactoriamente
0 0+1i
1 -0.33333+0.66667i
2 -0.58222+0.92444i
3 -0.50879+0.86817i
4 -0.50007+0.86598i
5 -0.5+0.86603i
6 -0.5+0.86603i

%=================================

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

ceros funciones complejas

Publicado por emilio (52 intervenciones) el 17/06/2011 18:55:19
Muchas gracias, voy a comenzar a trabajar con eso, aver si se puede mejorar, ya que normalmente trabajo con sistemas donde no puedo calcular su derivada, pero lo voy a mezclar con diferencias finitas.
saludos y 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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

ceros funciones complejas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/06/2011 22:51:46
hola Emilio.
A que tipo de sistemas te refieres?.
Si no puedes derivar puedes aproximarlo con la definicion de derivada.
Tambien por eso camino es resultado obtenido es muy bueno.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

ceros funciones complejas

Publicado por emilio (52 intervenciones) el 22/06/2011 12:40:57
Es que estoy trabajando con sistemas de ecuaciones acopladas no lineales.
Es decir buscos ceros en determinantes de de matrices desde 6x6 hasta 12x12. Cuando se calcula este determinante de manera simbolica la expresión es demasiado incomoda ya que es muy extensa, y su derivada es más extensa aún y es muy y vuelve al programa demasiado lento. Ademas el toolbox symbolic no lo tengo por lo que las funciones y sus derivadas las calculo en mathematica y las copio como hand functions en matlab, cosa que en sistemas de 6x6 y 12x12 se vuelve impracticable.

saludos y gracias de nuevo
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

ceros funciones complejas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 22/06/2011 16:37:20
Hola Emilio.
Siento curiosidad con que tipo de sisteamas estas trabajando.
Si puedes me envias un ejemplo de tu sistema ami , para poder ver.
Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

ceros funciones complejas

Publicado por emilio (52 intervenciones) el 22/06/2011 17:49:12
mira a qui va un ejemplo:

Esta es un sistema de 6 equaciones acopladas que genera una matrix de 6x6, y lo que yo busco son todas las posibles soluciones de ql2, donde ql2 es un vector de ondas que puede tomar valores reales, Imaginarios y/o complejos. Para este sistema he resuelto más o menos bien los valores reales e imaginarios. Pero aún no los valores complejos ni tampoco valores imaginarios para "q" muy grandes.

algunos datos:

q es un vector de onda paralelo que toma valores reales entre 0 a hasta infinito, pero en este caso particular solo lo necesito hasta 100

Por cada valor de "q" debo encontrar todos los posibles valores de ql2 ,infinitos valores de ql2

%%Tabla de constantes:

ST1=3766;
ST2=5845;
SL1=5973;
SL2=8433;
R1=2270;
R2=2330;
S1 =(SL1^2-2*ST1^2)/(SL1^2);
S2 =(SL2^2-2*ST2^2)/(SL2^2);
RT = R2*ST2^2/(R1*ST1^2);
RL = R2*SL2^2/(R1*SL1^2);
a=28*10^-9;
b=1*10^-9
pa=(a+2*b)/(2*a);


System:

la ideal es para un "q" fijo, que valores debe tomar ql2 para que el det ( M1) = 0,

ql2 = valor a encontrar;
ql1 = sqrt(SL2^2/SL1^2*(q^2+ql2^2)-q^2);
qt2 = sqrt(SL2^2/ST2^2*(q^2+ql2^2)-q^2);
qt1 = sqrt(SL2^2/ST1^2*(q^2+ql2^2)-q^2);


M1=[-2*q*ql1*sin(pa*ql1) (q^2-qt1^2)*sin(pa*qt1) 2*q*ql1*cos(pa*ql1) ...
(-q^2+qt1^2)*cos(pa*qt1) 0 0; (-(ql1^2+q^2*S1))*cos(pa*ql1) ...
(-q)*qt1*(-1+S1)*cos(pa*qt1) (-(ql1^2+q^2*S1))*sin(pa*ql1) ...
(-q)*qt1*(-1+S1)*sin(pa*qt1) 0 0; -((2*q*ql1*sin(ql1/2))/RT) ...
((q^2-qt1^2)*sin(qt1/2))/RT (2*q*ql1*cos(ql1/2))/RT ...
-(((q^2-qt1^2)*cos(qt1/2))/RT) 2*q*ql2*sin(ql2/2) ...
(-q^2+qt2^2)*sin(qt2/2); -(((ql1^2+q^2*S1)*cos(ql1/2))/RL) ...
-((q*qt1*(-1+S1)*cos(qt1/2))/RL) -(((ql1^2+q^2*S1)*sin(ql1/2))/RL) ...
-((q*qt1*(-1+S1)*sin(qt1/2))/RL) (ql2^2+q^2*S2)*cos(ql2/2) ...
q*qt2*(-1+S2)*cos(qt2/2); q*cos(ql1/2) qt1*cos(qt1/2) q*sin(ql1/2) ...
qt1*sin(qt1/2) (-q)*cos(ql2/2) (-qt2)*cos(qt2/2); (-ql1)*sin(ql1/2) ...
q*sin(qt1/2) ql1*cos(ql1/2) (-q)*cos(qt1/2) ql2*sin(ql2/2) (-q)*sin(qt2/2);]; %%matrix de 6x6

%% w = SL2/a*sqrt( q^2+ql2^2); una vez encontrado el ql2 lo reemplazo aqui y obtengo las frecuencias del sistema

más informacion aqui: http://dx.doi.org/10.1063/1.2208849

Saludos y muchas gracias por tu interes
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