Unidad 2
Análisis de circuitos eléctricos y electrónicos con MATLAB
2.1 Manejo de números complejos
Matlab permite números complejos en la mayoría de sus operacones y funciones. Hay tres formas de introducir
matrices complejas:
>> B=[1 2 ; 3 4]+i*[5 6 ; 7 8]
B =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
>> B = [1+5i 2+6i ; 3+7i 4+8i]
B =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
>> B = complex([1 2 ; 3 4] , [5 6 ; 7 8])
B =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
La i o la j pueden ser usadas como unidad imaginaria: i = √ , j = √ . Si se usa la i o la j como variable y se
sobrescriben sus valores, se puede generar una unidad imaginaria con, por ejemplo, ii = sqrt(‐1). También se
puede usar 1i o 1j, los cuales no pueden ser reasignados y siempre son iguales a la unidad imaginaria.
Así, B = [1 2 ; 3 4]+1i*[5 6 ; 7 8] genera la misma matriz B, aún si i ha sido reasignada
Ejemplo de introducción de un vector columna complejo:
>> a = [1;2;3;4];
b = [2;2;7;7];
c = complex(a,b)
c =
1.0000 + 2.0000i
2.0000 + 2.0000i
3.0000 + 7.0000i
4.0000 + 7.0000i
1
abs(X)
Devuelve un arreglo Y donde cada elemento es el valor absoluto del elemento correspondiente en X. Si X es
complejo, abs(X) devuelve el módulo o magnitud del complejo, que es lo mismo que
sqrt(real(X).^2 + imag(X).^2)
Ejemplos:
abs(-5)
ans =
5
abs(3+4i)
ans =
5
abs([1+3i, -3+6i, 0+9i])
ans =
3.1623 6.7082 9.0000
angle(Z)
Devuelve el ángulo de fase, en radianes, de cada complejo del arreglo Z. Los ángulos están entre ±π.
Para un Z complejo, la magnitud R y el ángulo de fase teta están dados por:
R = abs(Z)
teta = angle(Z)
y la sentencia
Z = R.*exp(i*teta)
Hace la conversion inversa al Z complejo original.
Ejemplos:
Z = [ 1 - 1i 2 + 1i 3 - 1i 4 + 1i
1 + 2i 2 - 2i 3 + 2i 4 - 2i
1 - 3i 2 + 3i 3 - 3i 4 + 3i
1 + 4i 2 - 4i 3 + 4i 4 - 4i ];
P = angle(Z)
P =
-0.7854 0.4636 -0.3218 0.2450
1.1071 -0.7854 0.5880 -0.4636
-1.2490 0.9828 -0.7854 0.6435
1.3258 -1.1071 0.9273 -0.7854
2
Fasores de voltaje de un sistema trifásico balanceado
>> x=[1 -0.5 -0.5];
>> y=[0 -sqrt(3)/2 sqrt(3)/2];
>> v=complex(x,y)
v =
1.0000 -0.5000 - 0.8660i -0.5000 + 0.8660i
>> magnitud=abs(v)
magnitud =
1.0000 1.0000 1.0000
>> angulo=angle(v)*180/pi
angulo =
0 -120.0000 120.0000
>> v=magnitud .* exp(j*angulo*pi/180)
v =
1.0000 -0.5000 - 0.8660i -0.5000 + 0.8660i
sign(X)
Devuelve un arreglo Y del mismo tamaño que X, donde cada elemento de Y es:
• 1 si el elemento correspondiente de X es mayor que 0.
• 0 si el elemento correspondiente de X es igual a 0.
• ‐1 si el elemento correspondiente de X es menor que 0.
Para un complejo X que no es cero, sign(X) = X./abs(X)
>> c=(1-3i);
>> sign(c)
ans =
0.3162 - 0.9487i
imag(Z)
Devuelve la parte imaginaria de los elementos del arreglo Z.
Ejemplo:
>> imag([2+3i, 3-5i])
ans =
3 -5
3
real(Z)
Devuelve la parte real de los elementos del arreglo Z.
Ejemplo:
>> real([2+3i, 3-5i])
ans =
2 3
conj(Z)
Devuelve el complejo conjugado de los elementos de Z.
Si Z es un arreglo complejo:
conj(Z) = real(Z) – i*imag(Z)
Ejemplo:
>> conj([2+3i, 3-5i])
ans =
2.0000 - 3.0000i 3.0000 + 5.0000i
isreal(A)
Devuelve un lógico 1 (true) si A no tiene una parte imaginaria. En caso contrario devuelve un lógico 0 (false).
Ejemplo 1:
Si un cálculo resulta en un componente con parte imaginaria cero, isreal devuelve true.
x=3+4i;
y=5-4i;
isreal(x+y)
ans =
1
Ejemplo 2:
Estos ejemplos usan isreal para detectar la presencia o ausencia de números imaginarios en un arreglo.
Haga
x = magic(3);
y = complex(x);
4
isreal(x) devuelve true porque ningún elemento de x tiene un componente imaginario.
isreal(x)
ans =
1
isreal(y) devuelve false, porque cada elemento de x tiene un componente imaginario, aún cuando el valor
del componente imaginario es 0.
isreal(y)
ans =
0
La siguiente expresión detecta estrictamente arreglos reales, es decir, los elementos con
componentes imaginarios de valor 0 son tratados como reales.
~any(imag(y(:)))
ans =
1
Ejemplo 3:
Dadas las siguientes celdas de arreglo,
C{1} = pi; % double
C{2} = 'John Doe'; % char array
C{3} = 2 + 4i; % complex double
C{4} = ispc; % logical
C{5} = magic(3); % double array
C{6} = complex(5,0) % complex double
C =
[3.1416] 'John Doe' [2.0000+ 4.0000i] [1] [3x3 double] [5]
isreal muestra que todas, excepto C{1,3} y C{1,6} son arreglos reales.
for k = 1:6
x(k) = isreal(C{k});
end
x =
1 1 0 1 1 0
5
CONVERSIONES DE RECTANGULAR-POLAR Y POLAR-RECTANGULAR EN
MATLAB
USAR [ANGULO,MAG] = cart2pol(X,Y) PARA CONVETIR DE RECTANGULAR A POLAR
(Ojo.- el valor del ANGULO lo da en radianes)
USAR [X,Y] = pol2cart(ANGULO,MAG) PARA CONVERTIR DE POLAR A RECTANGULAR
(Ojo.- el valor del ANGULO se tiene que insertar en radianes)
NOTA: LAS VARIABLES ANGULO, MAG, X y Y PUEDEN TENER OTROS NOMBRES.
Ejemplo:
Convertir(3+4i), a su forma polar:
Solución:
[ANGULO,MAG] = cart2pol(3,4)
ANGULO =
0.9273 (% está en Radianes)
MAG =
>> ANGULO_G=0.9273*180/pi ( pasamos a grados)
ANGULO_G=
53.1304
Ejemplo: Convertir 5 ∟53.13034
Solución:
Primero convertimos los 53.13034 a radianes:
ANGULO_R= 53.13034*pi/180
ANGULO _R=
0.9273
[X,Y] = pol2cart(0.9273,5) o también podemos poner [X,Y] = pol2cart(ANGULO_R,5)
>> [X,Y] = pol2cart(0.9273,5)
X=
3.0000
Y=
4.0000
O también;
>> [X,Y] = pol2cart(53.1304*pi/180,5)
X=
3.0000
Y=
4.0000
Otra manera de convertir de POLAR A RECTANGULAR es:
Ejemplo: 15 ángulo de 60°, sería:
15*exp(j*60*pi/180) % el pi/180 es para convertir los 60 a radianes.
ans =
7.5000 +12.9904i
Y para convertir de RECTANGULAR A POLAR:
Guardamos en una variable el número en RECTANGULAR:
Ejemplo: Va_rec=7.5000 +12.9904i
Va_polar= [abs(Va_rec), angle(Va_rec)*180/pi]
Va_polar =
15.0000 60.0000
OTRO MANERA SERÍA
Puedes hacer una función que los convierta, basándote en trigonometría.
Las entradas son la magnitud y el ángulo en grados.
Las salidas son los valores de x e y.
function [x,y]= polar2cart (mag, ang_in_deg)
x = mag * cos(ang_in_deg*pi/180);
y = j * mag * sin(ang_in_deg*pi/180);
OTRA MANERA ES:
z = x + y*i ; DE RECTANGULAR A POLAR
r = sqrt(x^2+y^2);
theta = atan2(y,x);
z = r*exp(i*theta);
r = abs(z);
theta = angle(z);