Matlab - Solución de ecuaciones complejas en matlab

   
Vista:

Solución de ecuaciones complejas en matlab

Publicado por Carlos (4 intervenciones) el 18/07/2016 05:11:39
Saludos a todos, tengo un problema de resolver una ecuación compleja de dos incógnitas con matlab, la ecuación que quiero solucionar es:

A*sin(N*K*T)-sin[(N-1)*K*T]=0

donde A, N y T son constantes fijas y K es una función que depende de 2 variables (B y W).
EL problema que tengo es que yo quiero conocer todos los valores de B y W que me hacen valida la ecuación anterior, entonces genero dos ciclos for para que me hagan un corrimiento en ambas variables, es decir, para cada valor de B resuelvo la ecuación para todos los valores de W, y el problema que tengo es que la igualdad nunca se cumple, es decir ningún valor cumple que la ecuación sea igual a 0, en otras palabras, cumple que la parte real sea igual a cero pero la parte imaginaria es diferente de cero o dicho de otro modo, el modulo de la respuesta al evaluar la ecuación es diferente de 0,

Aqui les dejo parte del programa, desde antes ya declaro todas mis constantes, las variables BETA y OMEGA son B y W respectivamente.

for be2=1:be1
BETA2s=zeros(1,w1);
OMEGA2s=zeros(1,be1);
for w2=1:w1
Qns(:,:)=eye(2);

wn1=(w(1,w2).*n1).^2;
wn2=(w(1,w2).*n2).^2;

q=(((be(1,be2)).^2)-wn1).^(1/2);
p=(wn2-((be(1,be2)).^2)).^(1/2);

A=(exp(q.*a1)).*(cos(p.*b1)-((1/2)*((p./q)-(q./p)).*sin(p.*b1)));
B=(exp(-q.*a1)).*(-(1/2)*((p./q)+(q./p)).*sin(p.*b1));
C=(exp(q.*a1)).*((1/2)*((p./q)+(q./p)).*sin(p.*b1));
D=(exp(-q.*a1)).*(cos(p.*b1)+((1/2)*((p./q)-(q./p)).*sin(p.*b1)));


KA=acos(0.5.*(A+D));

t=A.*(sin(N.*KA));
r=sin((N-1).*KA);


condicion=t-r;
if abs(condición)=0;
if be(1,be2)<=n2*w(1,w2) && be(1,be2)>=n1*w(1,w2);
BETA2s(1,w2)=be(1,be2).*(periodo/pi);
OMEGA2s(1,w2)=w(1,w2).*(periodo/pi);
condicion
end
else
BETA2s(1,w2)=NaN;
OMEGA2s(1,w2)=NaN;
end


end %for para w2

BETA1s(be2,:)=BETA2s;
OMEGA1s(be2,:)=OMEGA2s;

end %for para be2

Espero que me puedan ayudar, 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 JOSE JEREMIAS CABALLERO

Solución de ecuaciones complejas en matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 18/07/2016 15:22:10
Cierta vez un chofer llevó parte de su auto al mecanico y le dijo "Sr Mecanico mi auto no funciona". ¿El mecánico podrá ayudarle al chofer?, pueda que si o pueda que no. Todo depende de la parte que haya llevado al mecánico.

Es común denominador que muchos usuarios solo ponen parte de su código y esa parte de su código depende de los datos anteriores. Y por lo general le damos sugerencias (que pueden servir o no, porque es una sugerencia casi a ciegas y muchas veces el usuario queda descontento con las sugerencias que le damos en el foro). En otras ocaciones simplemente no se les puede ayudar y su pregunta queda sin contestar. Hay ocaciones con el poco dato brindan al hacer sus preguntas, al tener problemas en su código, puedo rehacer todo el código completo, pero muy pocas veces se hace eso, porque implica tiempo hacerlo.

Esta pregunta lo pude reproducir de la información brindada, pero se invirtió en hacerlo, hubiera sido mas fácil si el usuario hubiera puesto su guide tanto el fig y el m al foro.
http://www.lawebdelprogramador.com/foros/Matlab/1558697-Deshabilitar-escritura-en-Uitable.html


Este pregunta quiero ejecutarlo pero no hay datos de V y T y se dificulta la ejecución y ver donde se puede arreglar, justo por eso motivo pido esos datos necesarios al usuario que preguntó, pero el usuario no da mas información. Bueno sigo probando con datos aleatorios para poder ejecutar el codigo, pero aun no encuentro los matrices adecuadas.
http://www.lawebdelprogramador.com/foros/Matlab/1558487-Vector-como-variable-de-entrada-en-un-programa-que-funciona-en-base-a-una-variable.html



Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Programador en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
El correo es para servicios de programación, toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Solución de ecuaciones complejas en matlab

Publicado por Carlos (4 intervenciones) el 18/07/2016 15:42:59
Saludos, pongo todo el código del programa, con todos los datos necesarios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
clear all
clc
n1=2.89;
n2=3.38;
a1=5;
b1=5;
periodo=a1+b1;
beta0=input('Valor inicial de beta');  %&&normalmente uso de valor unicial 0 o eps
beta1=input('Valor final de beta');    %% por lo regular propongo 1 o 2
omega0=input('Valor inicial de la frecuencia');%&&normalmente uso de valor unicial 0 o eps
omega1=input('Valor final de la frecuencia');%% por lo regular propongo 1 o 2
%delta=0;
N=2;
p=input('Número de pasos'); %%hago unos 500 puntos
 
 
BETA0=beta0*(pi/periodo);
OMEGA0=omega0*(pi/periodo);
BETA=beta1*(pi/periodo);
OMEGA=omega1*(pi/periodo);
 
be=[BETA0:(BETA-BETA0)/p:BETA];
w=[OMEGA0:(OMEGA-OMEGA0)/p:OMEGA];
 
be1=size(be,2);
w1=size(w,2);
 
BETA1s=zeros(be1,w1);
OMEGA1s=zeros(be1,w1);
 
for be2=1:be1
    BETA2s=zeros(1,w1);
    OMEGA2s=zeros(1,be1);
    for w2=1:w1
        Qns(:,:)=eye(2);
 
            wn1=(w(1,w2).*n1).^2;
            wn2=(w(1,w2).*n2).^2;
 
            q=(((be(1,be2)).^2)-wn1).^(1/2);
            p=(wn2-((be(1,be2)).^2)).^(1/2);
 
            A=(exp(q.*a1)).*(cos(p.*b1)-((1/2)*((p./q)-(q./p)).*sin(p.*b1)));
            B=(exp(-q.*a1)).*(-(1/2)*((p./q)+(q./p)).*sin(p.*b1));
            C=(exp(q.*a1)).*((1/2)*((p./q)+(q./p)).*sin(p.*b1));
            D=(exp(-q.*a1)).*(cos(p.*b1)+((1/2)*((p./q)-(q./p)).*sin(p.*b1)));
 
            Qs(:,:)=[A B; C D];
 
 
            KA=acos(0.5.*(A+D));
 
            t=A.*(sin(N.*KA));
            r=sin((N-1).*KA);
 
 
        condicion=t-r;
        if  (condicion)<=eps;
            if be(1,be2)<=n2*w(1,w2) && be(1,be2)>=n1*w(1,w2);
                    BETA2s(1,w2)=be(1,be2).*(periodo/pi);
                    OMEGA2s(1,w2)=w(1,w2).*(periodo/pi);
                    condicion
            end
        else
            BETA2s(1,w2)=NaN;
            OMEGA2s(1,w2)=NaN;
        end
 
 
    end %for para w2
 
    BETA1s(be2,:)=BETA2s;
    OMEGA1s(be2,:)=OMEGA2s;
 
end %for para be2
figure(4)
OMEGA3s=OMEGA1s(:);
BETA3s=BETA1s(:);
plot(BETA3s,OMEGA3s,'r*')
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

Solución de ecuaciones complejas en matlab

Publicado por Carlos (4 intervenciones) el 18/07/2016 16:00:39
Una disculpa, el código anterior estaba erróneo en una linea abajo de donde dice condicion=t-r, en el condicional if no debe ser <=eps si no igual a 0, aquí esta el código con el error corregido:

clear all
clc
n1=2.89;
n2=3.38;
a1=5;
b1=5;
periodo=a1+b1;
beta0=input('Valor inicial de beta'); %&&normalmente uso de valor unicial 0 o eps
beta1=input('Valor final de beta'); %% por lo regular propongo 1 o 2
omega0=input('Valor inicial de la frecuencia');%&&normalmente uso de valor unicial 0 o eps
omega1=input('Valor final de la frecuencia');%% por lo regular propongo 1 o 2
%delta=0;
N=2;
p=input('Número de pasos'); %%hago unos 500 puntos


BETA0=beta0*(pi/periodo);
OMEGA0=omega0*(pi/periodo);
BETA=beta1*(pi/periodo);
OMEGA=omega1*(pi/periodo);

be=[BETA0:(BETA-BETA0)/p:BETA];
w=[OMEGA0:(OMEGA-OMEGA0)/p:OMEGA];

be1=size(be,2);
w1=size(w,2);

BETA1s=zeros(be1,w1);
OMEGA1s=zeros(be1,w1);

for be2=1:be1
BETA2s=zeros(1,w1);
OMEGA2s=zeros(1,be1);
for w2=1:w1
Qns(:,:)=eye(2);

wn1=(w(1,w2).*n1).^2;
wn2=(w(1,w2).*n2).^2;

q=(((be(1,be2)).^2)-wn1).^(1/2);
p=(wn2-((be(1,be2)).^2)).^(1/2);

A=(exp(q.*a1)).*(cos(p.*b1)-((1/2)*((p./q)-(q./p)).*sin(p.*b1)));
B=(exp(-q.*a1)).*(-(1/2)*((p./q)+(q./p)).*sin(p.*b1));
C=(exp(q.*a1)).*((1/2)*((p./q)+(q./p)).*sin(p.*b1));
D=(exp(-q.*a1)).*(cos(p.*b1)+((1/2)*((p./q)-(q./p)).*sin(p.*b1)));

Qs(:,:)=[A B; C D];


KA=acos(0.5.*(A+D));

t=A.*(sin(N.*KA));
r=sin((N-1).*KA);


condicion=t-r;
if abs(condición)==0;
if be(1,be2)<=n2*w(1,w2) && be(1,be2)>=n1*w(1,w2);
BETA2s(1,w2)=be(1,be2).*(periodo/pi);
OMEGA2s(1,w2)=w(1,w2).*(periodo/pi);
condicion
end
else
BETA2s(1,w2)=NaN;
OMEGA2s(1,w2)=NaN;
end


end %for para w2

BETA1s(be2,:)=BETA2s;
OMEGA1s(be2,:)=OMEGA2s;

end %for para be2
figure(4)
OMEGA3s=OMEGA1s(:);
BETA3s=BETA1s(:);
plot(BETA3s,OMEGA3s,'r*')


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

Solución de ecuaciones complejas en matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 26/07/2016 02:42:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
clear all
close all
clc
n1=2.89;
n2=3.38;
a1=5;
b1=5;
periodo=a1+b1;
%beta0=input('Valor inicial de beta'); %&&normalmente uso de valor unicial 0 o eps
beta0=0;
%beta1=input('Valor final de beta'); %% por lo regular propongo 1 o 2
beta1=2;
%omega0=input('Valor inicial de la frecuencia');%&&normalmente uso de valor unicial 0 o eps
omega0=eps;
%omega1=input('Valor final de la frecuencia');%% por lo regular propongo 1 o 2
omega1=1;
%delta=0;
N=2;
%p=input('Número de pasos'); %%hago unos 500 puntos
p=500;
 
 
BETA0=beta0*(pi/periodo);
OMEGA0=omega0*(pi/periodo);
BETA=beta1*(pi/periodo);
OMEGA=omega1*(pi/periodo);
 
be=[BETA0:(BETA-BETA0)/p:BETA];
w=[OMEGA0:(OMEGA-OMEGA0)/p:OMEGA];
 
be1=size(be,2);
w1=size(w,2);
 
BETA1s=zeros(be1,w1);
OMEGA1s=zeros(be1,w1);
 
for be2=1:be1
BETA2s=zeros(1,w1);
OMEGA2s=zeros(1,be1);
for w2=1:w1
Qns(:,:)=eye(2);
 
wn1=(w(1,w2).*n1).^2;
wn2=(w(1,w2).*n2).^2;
 
q=(((be(1,be2)).^2)-wn1).^(1/2);
p=(wn2-((be(1,be2)).^2)).^(1/2);
 
A=(exp(q.*a1)).*(cos(p.*b1)-((1/2)*((p./q)-(q./p)).*sin(p.*b1)));
B=(exp(-q.*a1)).*(-(1/2)*((p./q)+(q./p)).*sin(p.*b1));
C=(exp(q.*a1)).*((1/2)*((p./q)+(q./p)).*sin(p.*b1));
D=(exp(-q.*a1)).*(cos(p.*b1)+((1/2)*((p./q)-(q./p)).*sin(p.*b1)));
 
Qs(:,:)=[A B; C D];
 
 
KA=acos(0.5.*(A+D));
 
t=A.*(sin(N.*KA));
r=sin((N-1).*KA);
condicion=t-r;
if abs(condicion)<0.04;
    if be(1,be2)<=n2*w(1,w2) && be(1,be2)>=n1*w(1,w2);
    BETA2s(1,w2)=be(1,be2).*(periodo/pi);
    OMEGA2s(1,w2)=w(1,w2).*(periodo/pi);
    condicion
    end
else
BETA2s(1,w2)=NaN;
OMEGA2s(1,w2)=NaN;
end
 
 
end %for para w2
 
BETA1s(be2,:)=BETA2s;
OMEGA1s(be2,:)=OMEGA2s;
 
end %for para be2
figure(4)
OMEGA3s=OMEGA1s(:);
BETA3s=BETA1s(:);
plot(BETA3s,OMEGA3s,'r*')


Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Programador en Matlab
Servicios de programación matlab
jjcc94@hotmail.com
El correo es para servicios de programación, toda ayuda gratuita es vía foro
.

http://matlabcaballero.blogspot.com
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

Solución de ecuaciones complejas en matlab

Publicado por Carlos (4 intervenciones) el 26/07/2016 05:29:55
Muchísimas gracias por la ayuda, ya esta funcionando el programa como debe de ser, en verdad se lo agradezco.
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