ALGEBRA LINEAL CON OCTAVE
Números complejos y Sistemas de ecuaciones lineales.
¿Qué es Octave?
Es un lenguaje de programación de alto nivel, orientado al cálculo numérico. Y su vez es un programa que permite interpretar este lenguaje de forma interactiva, mediante órdenes o comandos. Estas órdenes pueden ser introducidas a través de un entorno en forma de terminal o consola de texto. Por supuesto, Octave incluye, además, la posibilidad de ser utilizado de forma no interactiva, interpretando las órdenes contenidas en un fichero. Estas características se pueden resumir diciendo que Octave es un lenguaje interpretado orientado al cálculo numérico matricial.
Desde sus orígenes, Octave es software libre, gracias a lo cual, su comunidad de desarrolladores y usuarios ha ido creciendo hasta llegar a ser muy significativa. Su lenguaje de programación es altamente compatible con el de Matlab, el conocido entorno de cálculo numérico (con licencia privativa) desarrollado por The MathWorks, Inc. Está disponible en numerosas plataformas, entre ellas sistemas Unix (para los que fue originalmente desarrollado), Windows y MacOsX. Su código fuente contiene una potente librería de cálculo matricial para C++. De hecho, ha sido diseñado de forma que sea extensible dinámicamente, a través de nuevos procedimientos escritos en C++. Estas extensiones son programas “especiales” que tienen la extensión.oct y, como programas compilados, cuentan con un rendimiento mucho mayor que las funciones escritas en el lenguaje interpretado de Octave.
Octave en línea
OPERACIONES CON NUMEROS COMPLEJOS
Octave por defecto define la unidad imaginaria con i o j, como 0 + 1i;
Práctica 1. Ejecute en Octave en línea lo siguiente:
z = sqrt(-1);
z1 = i;
z2 = j;
z3 = complex(0,1);
¿Qué puede concluir?
sqrt(n); función propia del lenguaje para calcular raíz cuadrada de una cantidad n.
complex(a, b); función propia del lenguaje para crear un número complejo, cuya parte real se
representa por el argumento a y la parte imaginaria con el argumento b.
Práctica 2. Ejecute en Octave en línea lo siguiente:
z2 = -5 + 3i
z3 = -7 -10i
z4 = 7 – 4i
luego utilice el comando
compass(z1)
¿Qué sucedió?
Números complejos en forma polar y de Euler
Práctica 3. Ejecute en Octave en línea lo siguiente:
m = abs(z1)
a = angle(z1)
zp = m*(cos(a) + i*sen(a))
ze = m*exp(i*a)
Práctica 4. Realice las operaciones con complejos desarrolladas en clase.
Práctica 5. Calcular y graficar las n raíces de un número complejo.
1. Copie o transcriba el siguiente código en un archivo de Notepad (block de notas):
% CALCULO Y GRAFICACION DE LAS N RAICES DE UN COMPLEJO
% AUTOR: NELSON O. CACERES MUÑOZ.
% ©2018 www.nelsoncaceres.com
z = input('Numero complejo en forma cartesiana :');
a = angle(z)
modulo = abs(z)
n = input('Indice de la raíz :');
zm = modulo.^(1/n)
for m = 1:n
ze(m) = zm*exp(i*(a + 2*m*pi)/n);
compass(ze)
end
ze’
fprintf('\t\t%s%d%s','GRAFICA DE LAS ', n , ' RAICES DEL COMPLEJO '), disp(z)
2. Cree una carpeta temporal en el escritorio de Windows.
3. Guarde el archivo anterior con el nombre rcomplejas.m
4. Inicie sesión en
Octave en línea
5. Entre en la opción menú
6. Ingrese con su cuenta de Gmail, Google o Correo electrónico.
7. Suba el archivo rcomplejas.m
8. Ejecútelo.
¿Qué aparece?
SISTEMAS DE m ECUACIONES LINEALES CON n VARIABLES
Práctica 6. Operaciones con matrices.
Operaciones con matrices en Octave
1. Copie o transcriba el siguiente código en un archivo de Notepad (block de notas):
% OPERACIONES CON MATRICES
% AUTOR: NELSON O. CACERES MUÑOZ.
% ©2018 www.nelsoncaceres.com
disp('Digite los valores entre corchetes rectangulares [ ]. ');
disp('Hágalo por filas, separando cada valor con un espacio ');
disp('y finalizando cada fila con ;');
%A = input('Matriz :')
A = [3 6 7 9; 5 9 6 4; 4 0 6 8; 1 6 8 -4];
% Ubicación de un elemento de la matriz
disp('Elemento ubicado en la fila 1 columna 3');
m = A(1,3)
disp('Elemento ubicado en la fila 4 columna 2');
n = A(4,2)
disp('Intercambiar una fila, fila 4 por fila 1 ');
aux = A(1,:);
A(1,:) = A(4,:);
A(4,:) = aux
disp('Multiplicar una fila por un escalar y sumar o restar a otra fila ');
disp('Multiplicar por -5 la fila 1 y sumarla a la fila 2');
A(2,:) = -5*A(1,:)+A(2,:);
A
2. Analice cada línea.
3. Termine de completar la matriz de tal forma que en la diagonal principal solo queden 1s y
arriba y abajo 0s, si es posible.
SOLUCIÓN DE UN SISTEMA DE m ECUACIONES LINEALES CON n VARIABLES CON LA FUNCIÓN
LINSOLVE
Práctica 7. Resolver la siguiente situación.
Una embotelladora de refrescos desea cotizar la publicidad de sus productos en televisión, radio y revista, se tienen tres propuestas del plan de medios de acuerdo con el presupuesto asignado acerca de la cantidad de anuncios por medio en el transcurso de un mes. En el primer presupuesto cada anuncio en televisión tiene un coste de $250 000, en radio $5 000 y en revista $30 000. En el segundo presupuesto $310 000, $4 000 y $15 000 y en el último presupuesto $560 000, $10 000 y $35 000. Los totales por presupuesto son los siguientes: $2 795 000, $3 437 000 y $6 225 000. Determine la cantidad de anuncios cotizados por cada medio.
Solución: PRODUCTOS INSUMOS A. TELEVISION x1 A. RADIO x2 A. REVISTAS x3 CAPACIDAD PRESUPUESTO 1 250000 5000 30000 2795000 PRESUPUESTO 2 310000 4000 15000 3437000 PRESUPUESTO 3 560000 10000 35000 6225000 Sistema de ecuaciones 250000x1 + 5000x2 + 30000x3 = 2795000 310000x1 + 4000x2 + 15000x3 = 3437000 560000x1 + 10000x2 + 35000x3 = 6225000 Matriz de coeficientes 250000 5000 30000 310000 4000 15000 560000 10000 35000
Matriz de términos independientes
2795000 3437000 6225000
Solución con linsolve de Octave
Digite en Octave en línea
A = [250000 5000 30000; 310000 4000 15000; 560000 10000 35000] b = [2795000; 3437000; 6225000]
sol = linsolve(A,b)
¿Cómo se interpreta él resultado? Verifique los resultados.
Práctica 8. Resolver la siguiente situación.
El departamento de pesca y caza proporciona tres tipos de comida a un lago que alberga tres especies de peces. Cada pez de la especie 1 consume cada semana un promedio de 1 unidad del alimento 1, 1 unidad del alimento 2 y 2 unidades del
alimento 3. Cada pez de la especie 2 consume cada semana un promedio de 3 unidades del alimento 1, 4 unidades del alimento 2 y 5 unidades del alimento 3. Cada pez de la especie 3 consume cada semana un promedio de 2 unidades del alimento 1, 1 unidad del alimento 1 y 5 unidades del alimento 3. Cada semana se proporciona al lago 25000 unidades del alimento 1, 20000 unidades del alimento 2 y 55000 unidades del alimento 3. Si se supone que los peces consumen todo el alimento, ¿Cuántos peces de cada especie pueden coexistir en el lago?
PRODUCTOS INSUMOS PEZ ESPECIE 1 x1 PEZ ESPECIE 2 x2 PEZ ESPECIE 3 x3 CAPACIDAD ALIMENTO 1 1 3 2 25000 ALIMENTO 2 1 4 1 20000 ALIMENTO 3 2 5 5 55000 Matriz reducida 1 0 5 40000 0 -1 1 5000 0 0 0 0
El sistema tiene infinitas soluciones
x1 + 5x3 = 40000 x1 = 40000 – 5x3
-x2 + x3 = 5000 -x2 = 5000 – x3 x2 = x3 – 5000 Sol = (40000 – 5x3 , x3 – 5000, x3)
x3 tiene que ser restringida.
No puede tomar cualquier valor, puesto que las 3 especies de peces deben coexistir. Luego,
40000 – 5x3 > 0 y x3 – 5000 > 0 8000 > x3 y x3 > 5000 Por lo tanto,
5000 < x3 < 8000
x3 solo puede tomar valor entre 5000 y 8000, sin inclusive. Si x3 = 6000, x2 = 3000, x1 =10000
Si x3 = 6500, x2 = 1500, x1 = 7450
Práctica 9. Solución de un sistema homogéneo (Balanceo de una reacción química)
Al balancear reacciones químicas tales como la de la Fotosíntesis: CO2 + H2O C6H12O6 + O2
Se buscan enteros positivos x1, x2, x3 y x4, que no tengan un divisor común diferente de 1, de manera que en
el número de átomos de cada elemento químico involucrado es el mismo en cada lado de la reacción. El número de átomos de un elemento químico lo indica un subíndice; por ejemplo, en CO2 hay un átomo de C (carbono) y dos átomos de O (oxígeno). Esto nos lleva a un sistema homogéneo de ecuaciones.
Solución C: x1 = 6x3 O: 2x1 + x2 = 6x3 + 2x4 H: 2x2 = 12x3 Sistema homogéneo x1 - 6x3 = 0 2x1 + x2 – 6x3 – 2x4 = 0 2x2 – 12x3 = 0 Matriz de coeficientes 1 0 -6 0 2 1 -6 -2 0 2 -12 0 Digite en Octave octave:1> A = [1 0 -6 0; 2 1 -6 -2; 0 2 -12 0] A = 1 0 -6 0 2 1 -6 -2 0 2 -12 0 octave:2> R = rref(A) R = 1.00000 0.00000 0.00000 -1.00000 0.00000 1.00000 0.00000 -1.00000 0.00000 0.00000 1.00000 -0.16667 octave:3> format rat
octave:4> R R =
1 0 0 -1 0 1 0 -1 0 0 1 -1/6 Matriz reducida, de dónde
x3 – 1/6x4 = 0 x3 = 1/6x4 x2 – x4 = 0 x2 = x4 x1 – x4 = 0 x1 = x4
x4 = x4
Si x
4= 6, entonces
x
1= 6
x
2= 6
x
3= 1
x
4= 6
De tal forma que la reacción queda balanceada si:
6(CO2) + 6(H2O) 1(C6H12O6) + 6(O2)
18 O = 18 O 6 C = 6 C 12 H = 12 H
Práctica 10. Aplicación de la inversa de una matriz. (Análisis estructural
1)
Aplicaciones:
Solución
y = D*f
octave:1> D = [0.011 0.003 0.001;0.003 0.009 0.003;0.001 0.003 0.011] D = 0.0110000 0.0030000 0.00100000.0030000 0.0090000 0.0030000 0.0010000 0.0030000 0.0110000 octave:6> f = [40; 50; 30] f = 40 50 30 octave:7> y = D*f y = 31/50 33/50 13/25
octave:8> format short octave:9> y
y =
0.62000 0.66000 0.52000
Las deflexiones en los puntos 1, 2 y 3 respectivamente son:
0.62, 0.66 y 0.52 pulgadas.
Solución
D
-1(Matriz de rigidez)
octave:10> Dinv = inv(D) Dinv =
1.0000e+02 -3.3333e+01 1.3878e-15 -3.3333e+01 1.3333e+02 -3.3333e+01 1.3878e-15 -3.3333e+01 1.0000e+02 octave:11> format rat
octave:12> Dinv
100 -100/3 0 -100/3 400/3 -100/3 0 -100/3 100
Otra forma (Matriz ampliada)
octave:13> Da = 1000*D Da = 11 3 1 3 9 3 1 3 11 octave:14> I = eye(3) I = Diagonal Matrix 1 0 0 0 1 0 0 0 1 octave:15> C = [Da I] C = 11 3 1 1 0 0 3 9 3 0 1 0 1 3 11 0 0 1 octave:16> C(1,:) = (1/11)*C(1,:) C = 1 3/11 1/11 1/11 0 0 3 9 3 0 1 0 1 3 11 0 0 1 octave:17> C(2,:) = -3*C(1,:)+C(2,:) C = 1 3/11 1/11 1/11 0 0 0 90/11 30/11 -3/11 1 0 1 3 11 0 0 1 octave:18> C(3,:) = -1*C(1,:)+C(3,:) C = 1 3/11 1/11 1/11 0 0 0 90/11 30/11 -3/11 1 0 0 30/11 120/11 -1/11 0 1 octave:19> C(2,:) = (11/90)*C(2,:) C =
1 3/11 1/11 1/11 0 0 0 1 1/3 -1/30 11/90 0 0 30/11 120/11 -1/11 0 1 octave:20> C(1,:) = -C(1,2)*C(2,:)+C(1,:) C = 1 0 0 1/10 -1/30 0 0 1 1/3 -1/30 11/90 0 0 30/11 120/11 -1/11 0 1 octave:21> C(3,:) = -C(3,2)*C(2,:)+C(3,:) C = 1 0 0 1/10 -1/30 0 0 1 1/3 -1/30 11/90 0 0 0 10 0 -1/3 1 octave:22> C(3,:) = (1/10)*C(3,:) C = 1 0 0 1/10 -1/30 0 0 1 1/3 -1/30 11/90 0 0 0 1 0 -1/30 1/10 octave:23> C(2,:) = -C(2,3)*C(3,:)+C(2,:) C = 1 0 0 1/10 -1/30 0 0 1 0 -1/30 2/15 -1/30 0 0 1 0 -1/30 1/10 octave:24> Dinv2 = [C(1,4) C(1,5) C(1,6);C(2,4) C(2,5) C(2,6);C(3,4) C(3,5) C(3,6)] Dinv2 = 1/10 -1/30 0 -1/30 2/15 -1/30 0 -1/30 1/10 octave:25> Dinv3 = 1000*Dinv2 Dinv3 = 100 -100/3 0 -100/3 400/3 -100/3 0 -100/3 100
y = D*f
f = D
-1*y
y = (0; 0; 0.04)
octave:26> y = [0; 0; 0.04] y =0 0 1/25 octave:27> f = Dinv*y f = 0 -4/3 4