JustToThePoint English Website Version
JustToThePoint en español
JustToThePoint in Thai

Vectores, matrices, sistemas de ecuaciones lineales

Vectores

Un vector es un objeto o ente matemático que tiene un módulo, dirección y sentido. Geométricamente, podemos representar un vector como un segmento de recta orientado en el que diferenciamos los siguientes elementos: la recta soporte o dirección sobre la que se traza el vector; la longitud es el módulo o magnitud del vector; y una flecha que indica el sentido.

Usaremos Maxima para trabajar con vectores y matrices.

Operando con vectores en Maxima

Operando con vectores en Maxima

Vamos a usar Yacas, un sistema de álgebra computacional de propósito general, gratuito, sencillo e intuitivo. Se trata de un programa para la manipulación simbólica de expresiones matemáticas. También está disponible en línea.

Las instrucciones de instalación para Ubuntu, Debian y derivados son bastante simples: sudo add-apt-repository ppa:teoretyk/yacas, sudo apt-get update, sudo apt-get install yacas

[email protected]:~$yacas
This is Yacas version '1.3.6'.
To exit Yacas, enter  Exit(); or quit or Ctrl-c.
Type 'restart' to restart Yacas.
To see example commands, keep typing Example();
In> v:={3, 4, 5}; # Definimos dos vectores, v y w.
Out> {3,4,5}
In> w:={2, 7, 1};
Out> {2,7,1}
In> v+w; # Realizamos algunas operaciones sobre ellos.
Out> {5,11,6}
In> v-w;
Out> {1,-3,4}
In> 3*v;
Out> {9,12,15}
In> v.w; # Le pedimos a Yacas el producto escalar de ambos vectores.
Out> 39
In> sqrt(v.v); # Devuelve La magnitud o módulo de v.
Out> sqrt(50)
In> CrossProduct(v, w); # Devuelve el producto vectorial de los vectores v y w.
Out> {-31,7,13}
In> x:={4, 2, 4};
Out> {4,2,4}
In> Normalize(x); # Normaliza un vector, es decir, devuelve el vector normalizado (unitario o versor) paralelo a x; un vector que tiene la misma dirección y sentido que x pero de longitud 1.
Out> {2/3,1/3,2/3}

Trabajemos con vectores en Python. Lee nuestro artículo Vectores en Python para aprender más al respecto.

user@pc:~$ python 
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
>>> import numpy as np # NumPy es una biblioteca que nos da soporte para crear y manipular vectores y matrices. 
>>> v = np.array([3, 4, 5]) # La manipulación de datos en Python es casi siempre sinónimo de la manipulación de arrays con NumPy.
>>> w = np.array([2, 7, 1])
>>> np.add(v, w) # numpy.add suma elemento a elemento: v+w.
array([ 5, 11,  6])
>>> np.subtract(v, w) # numpy.subtract sustrae elemento a elemento: v-w.
array([ 1, -3,  4])
>>> v*3
array([ 9, 12, 15])
>>> np.dot(v, w) # Calcula el producto escalar o producto interno de v y w.
39
>>> np.linalg.norm(v) # Computa la magnitud o módulo de v.
7.0710678118654755 # = sqrt(50)
>>> np.cross(v, w) # numpy.cross devuelve el producto vectorial de v y w. 
array([-31,   7,  13])
>>> x = np.array([4, 2, 4])
>>> x/np.linalg.norm(x) # Normaliza el vector x. 
array([0.66666667, 0.33333333, 0.66666667]) # {2/3,1/3,2/3}

También podemos usar Wolfram Alpha. Por ejemplo, (3, 4, 5) * (2, 7, 1) o {3, 4, 5} * {2, 7, 1} calcula el producto vectorial (también nos muestra un gráfico vectorial, la magnitud o módulo del vector y su vector normalizado); y {3, 4, 5}. {2, 7, 1} calcula el producto escalar o interno. Además, podemos realizar algunos cálculos vectoriales: {3, 4, 5}+{2, 7, 1}, {3, 4, 5}-3*{2, 7, 1}; {3, 4, 5} ^ 3;

norma{3, 4, 5} calcula la magnitud o módulo de un vector; normalize {4, 2, 4} normaliza el vector. Finalmente, MatrixRank [{3, 4, 5}, {2, 7, 1}] = 2. MatrixRank [m] calcula el rango de la matriz “m” y encuentra el número de filas linealmente independientes, por lo que {3, 4, 5 } y {2, 7, 1} son independientes. Sin embargo, MatrixRank [{1, 4, 2}, {5, 20, 10}] devuelve 1 porque {1, 4, 2} y {5, 20, 10} son linealmente dependientes. Trabajando con vectores en WolframAlpha

Trabajando con vectores en WolframAlpha

Matrices

Octave es un programa y lenguaje de programación para realizar cálculos numéricos; está especialmente diseñado para manipular matrices. La forma más sencilla de definir matrices en Octave es escribir los elementos entre corchetes “[]”, cada elemento puede estar separada por una coma, y ​​debes reemplazar las comas “,” por puntos y comas “;” para identificar el fin de una fila, por ejemplo, a = [2 , 1, 1; 3, 2, 1; 2, 1, 2], b = [4, 5; 3, 6; 2, 9]. También puedes solicitar a Octave el que cree matrices y los rellene con elementos aleatorios: b = rand (3, 2).

Puede usar los operadores estándar para sumar (a + b), restar (a-b), multiplicar (a * b), calcular potencias (a^2) y transponer (a’) matrices. det(a) devuelve el determinante de una matriz e inv(a), la matriz inversa. Octave está diseñado para manipular matrices

Octave está diseñado para manipular matrices

Consideremos la transformación lineal Av = w donde A es una matriz cuadrada “n” por “n”. Si v y w son múltiplos escalares (Av = w = λv), entonces v es un vector propio o autovector de la transformación lineal A y el factor de escala λ es el valor propio o autovalor correspondiente o asociado a ese vector propio.

Av = λv puede expresarse de manera equivalente como (A -λI) v = 0 donde I es la matriz identidad y 0 es el vector cero. Esta ecuación tiene una solución distinta de cero (no trivial) “v” si y solo si el determinante de la matriz (A -λI) es cero (el sistema debe ser compatible indeterminado y la matriz de coeficientes del sistema (A -λI) debe ser singular, su determinante debe ser igual a cero), por lo que los valores propios son valores λ que satisfacen la ecuación |A - λI| = 0 . El lado izquierdo de esta ecuación se denomina el polinomio característico de A.

Así, |A - λI| = (λ1 -λ) (λ2 -λ)…(λn -λ) donde λ1, λ2, ….λn son los autovalores de A. En nuestro ejemplo, [v, h]=eig(a) devuelve los autovalores λ1 = 2 y λ2=-1, y |A - λI| = (λ1 -λ) (λ2 -λ) = (2 -λ)(-1 -λ) = λ2 -λ -2 (poly(a) devuelve el polinomio característico de a). Podemos comprobar los resultados: det(a-2*eye(2)) (eye(2) devuelve la matriz cuadrada 2*2 identidad) = 0, det(a+eye(2)) = 0, and det(a) = -2 = λ12. Octave está diseñado para manipular matrices

Octave está diseñado para manipular matrices

[email protected]:~$yacas # Podemos obtener los mismos resultados con Yacas
This is Yacas version '1.3.6'.
To exit Yacas, enter  Exit(); or quit or Ctrl-c.
Type 'restart' to restart Yacas.
To see example commands, keep typing Example();
In> matrixA := {{1, 2, 5}, {3, 8, 6}, {2, 5, 7}}; # Yacas puede manipular vectores, representados como listas y matrices, representados como listas de listas.
Out> {{1,2,5},{3,8,6},{2,5,7}}
In> matrixB := {{3, 4, 5}, {2, 4, 7}, {3, 1, 9}};
Out> {{3,4,5},{2,4,7},{3,1,9}}
In> matrixA + matrixB; # Los operadores aritméticos básicos funcionan con números enteros, vectores y matrices.
Out> {{4,6,10},{5,12,13},{5,6,16}}
In> 3*matrixA;
Out> {{3,6,15},{9,24,18},{6,15,21}}
In> Transpose(matrixA); # Obtiene la transposición de una matriz.
Out> {{1,3,2},{2,8,5},{5,6,7}}
In> Determinant(matrixA); # Devuelve el determinante de matrixA.
Out> 3
In> Inverse(matrixA); # Obtiene la matriz inversa de matrixA.
Out> {{26/3,11/3,(-28)/3},{-3,-1,3},{(-1)/3,(-1)/3,2/3}}
In> Trace(matrixA) # Devuelve la traza de matrizA, es decir, la suma de los elementos en su diagonal 1 + 8 + 7
Out> 16

Yacas también está disponible en línea. EigenValues​​(matriz) calcula los valores propios de una matriz y CharacteristicEquation(matriz, var) devuelve el polinomio característico de “matriz”. Calculando los valores propios y el polinomio característico con Yacas online

Calculando los valores propios y el polinomio característico con Yacas online

user@pc:~$ python # Trabajemos con matrices en Python
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
>>> import numpy as np # NumPy es una biblioteca que nos da soporte para crear y manipular vectores y matrices.
>>> matrixA=np.array([[1, 2, 5], [3, 8, 6], [2, 5, 7]]) # La manipulación de datos en Python es casi siempre sinónimo de la manipulación de arrays con NumPy.
>>> matrixB=np.array([[3, 4, 5], [2, 4, 7], [3, 1, 9]])
>>> np.add(matrixA, matrixB) # numpy.add suma sus argumentos elemento por elemento, es decir, estamos sumando matrices: matrixA + matrixB.
array([[ 4,  6, 10],
       [ 5, 12, 13],
       [ 5,  6, 16]])
>>> np.subtract(matrixA, matrixB) # numpy.subtract resta sus argumentos elemento por elemento: matrixA - matrixB.
array([[-2, -2,  0],
       [ 1,  4, -1],
       [-1,  4, -2]])
>>> np.dot(matrixA, matrixB) # Si ambos argumentos son matrices 2D, la función numpy.dot realiza la multiplicación de matrices.
array([[ 22,  17,  64],
       [ 43,  50, 125],
       [ 37,  35, 108]])
>>> 3*matrixA
array([[ 3,  6, 15],
       [ 9, 24, 18],
       [ 6, 15, 21]])
>>> matrixA.T # Usamos el método T para transponer una matriz.
array([[1, 3, 2],
       [2, 8, 5],
       [5, 6, 7]])
>>> matrixA.trace() # Usamos el método trace para calcular la traza de una matriz.
16
>>> np.linalg.matrix_rank(matrixA) # El método de álgebra lineal linalg.matrix_rank de NumPy devuelve el rango de matrixA.
3
>>> np.linalg.det(matrixA)  # El método de álgebra lineal np.linalg.det calcula el determinante de matrixA.
3.0000000000000018
>>> np.linalg.inv(matrixA)  # El método de álgebra lineal np.linalg.inv calcula la matriz inversa de matrixA.
array([[ 8.66666667,  3.66666667, -9.33333333],
       [-3. , -1. ,  3. ],
       [-0.33333333, -0.33333333,  0.66666667]])
>>> matrix=np.array([[4, -5], [2, -3]])
>>> eigenvalues, eigenvectors = np.linalg.eig(matrix) # Calculemos los autovalores y autovectores de una matriz cuadrada.
>>> eigenvalues
array([ 2., -1.])
>>> eigenvectors
array([[0.92847669, 0.70710678],
       [0.37139068, 0.70710678]])
>>> np.poly(matrix) # Devuelve los coeficientes del polinomio característico de una matriz.
array([ 1., -1., -2.])

Alternativamente, podemos trabajar con WolframAlpha. Transpose({{1, 2, 5}, {3, 8, 6}, {2, 5, 7}}) devuelve la matriz transpuesta de {{1, 2, 5}, {3, 8, 6}, {2, 5, 7}}. Det({{1, 2, 5}, {3, 8, 6}, {2, 5, 7}}) calcula el determinante de una matriz (3). Inverse({{1, 2, 5}, {3, 8, 6}, {2, 5, 7}}) computa la inversa de una matriz cuadrada.

Observa que la sintaxis es casi la misma que Python, Yacas u Octave. Otros ejemplos son: {{1, 2, 5}, {3, 8, 6}, {2, 5, 7}} * {{1,2,3},{3,2,1},{1,2,3}}, {{1, 2, 5}, {3, 8, 6}, {2, 5, 7}} + {{1,2,3},{3,2,1},{1,2,3}}, Trace{{1, 2, 5}, {3, 8, 6}, {2, 5, 7}} (= 16), Rank{{1, 2, 5}, {3, 8, 6}, {2, 5, 7}} (=3), etc. Cálculo matricial con WolframAlpha

Cálculo matricial con WolframAlpha

Sin embargo, puedes usar directamente el inglés para ingresar tus consultas en WolframAlpha: find the eigenvalues of the matrix {{4, -5}, {2, -3}} o calculate eigenvalues of the matrix {{4, -5}, {2, -3}}. CharacteristicPolynomial {{4, -5}, {2, -3}} devuelve el polinomio característico de la matriz {{4, -5}, {2, -3}}. Cálculo matricial con WolframAlpha

Cálculo matricial con WolframAlpha

Sistema de ecuaciones lineales

Un sistema de ecuaciones lineales (o sistema lineal) es un conjunto o colección de ecuaciones lineales. Observa que solo están incluidas las ecuaciones de primer grado, es decir x2, z3 y √x no están permitidas. Por ejemplo, Una solución de un sistema de ecuaciones lineales es un vector o una asignación de valores a las variables que es simultáneamente una solución de cada ecuación del sistema.

Un sistema de ecuaciones lineales es compatible si tiene, al menos, una solución. En cambio, un sistema lineal sin soluciones se denominará incompatible. Un sistema de ecuaciones lineales puede tener una única solución (compatible determinado: y + 6x = 8, y + 3x = -4; solución: x = 4, y = -16), infinitas soluciones (compatible indeterminado: 2x + y = 4, 6x + 3y = 12; soluciones: y = 4-2x), o ninguna solución (incompatible, por ejemplo, 2x + y = 4, 6x + 3y = 10).

Para cualquier sistema de ecuaciones lineales, hay tres matrices muy útiles: la matriz de coeficientes que contiene los coeficientes de las variables(A), la matriz aumentada que es la matriz de coeficientes con una columna adicional que contiene los términos constantes del sistema lineal (los coeficientes de las variables junto con los términos constantes) y el vector de columna (b) de términos constantes. El sistema de ecuaciones lineales es equivalente a una ecuación matricial que se expresa como Ax = b.

[email protected]:~$yacas
This is Yacas version '1.3.6'.
To exit Yacas, enter  Exit(); or quit or Ctrl-c.
Type 'restart' to restart Yacas.
To see example commands, keep typing Example();
In> A:={{6, 1}, {3, 1}} # Definimos la matriz de coeficientes. 6x + y = 8, 3x + y = -4; 
Out> {{6,1},{3,1}}
In> B:={8, -4} # Definimos la matriz o vector de términos constantes.
Out> {8,-4}
In> MatrixSolve(A, B) Resuelve la ecuación matricial Ax = b.
Out> {4,-16} # Nuestro sistema lineal presenta una solución única, a saber: x = 4, y = -16.

Microsoft Math Solver proporciona soluciones gratuitas, paso a paso, para una amplia variedad de problemas matemáticos.

Math Solver resuelve paso a paso sistemas de ecuaciones lineales

Math Solver resuelve paso a paso sistemas de ecuaciones lineales

Calculemos este sistema de ecuaciones

Calculemos este sistema de ecuaciones

[email protected]:~$yacas
In> A:={{5, 2, 0}, {-4, 0, -1}, {1, 1, 1}} # Definimos la matriz de coeficientes.
Out> {{5,2,0},{-4,0,-1},{1,1,1}}
In> B:={11,-9, 9} # Definimos la matriz o vector de términos constantes.
Out> {11,-9,9}
In> MatrixSolve(A, B) # Resuelve la ecuación matricial Ax = b.
Out> {1,3,5}

Wolfram Alpha también puede resolver sistemas de ecuaciones lineales: 5*x+2*y=11, -4*x-z=-9, x+y+z=9 Resolviendo sistemas de ecuaciones con WolframAlpha

Resolviendo sistemas de ecuaciones con WolframAlpha

La orden de Maxima algsys ([expr_1, …, expr_m], [x_1, …, x_n]) resuelve las ecuaciones polinómicas simultáneas expr_1, …, expr_m para las variables x_1, …, x_n, como, por ejemplo, algsys([5*x+2*y=11,-4*x-z=-9, x+y+z=9], [x, y, z]); Resolviendo sistemas de ecuaciones con Maxima

Resolviendo sistemas de ecuaciones con Maxima

El teorema de Rouché-Capelli determina el número de soluciones para un sistema de ecuaciones lineales. La condición necesaria y suficiente para que un sistema de m ecuaciones y n incógnitas tenga solución es que el rango de su matriz de coeficientes (r) y el de su matriz aumentada sean iguales (r’).

Si r = rang(A) ≠ r ‘= rang(A|b) entonces el sistema es incompatible. Si r = r’= n (el rango es igual al número de variables o incognitas), entonces el sistema es un sistema compatible determinado; es decir, tiene una única solución. Si r = r’≠ n el sistema es un sistema compatible indeterminado, es decir, tiene infinitas soluciones.

user@pc:~$ python # Resolvamos sistemas de ecuaciones lineales en Python
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
>>> import numpy as np # NumPy es una biblioteca que nos da soporte para crear y manipular vectores y matrices. 
>>> matrixA=np.array([[5, 2, 0], [-4, 0, -1], [1, 1, 1]]) # La manipulación de datos en Python es casi siempre sinónimo de la manipulación de arrays con NumPy. Definimos la matriz de coeficientes ...
>>> vectorB=np.array([11, -9, 9]) # ... y el vector de términos constantes.
>>> np.linalg.solve(matrixA, vectorB) # Resuelve una ecuación matricial lineal o un sistema de ecuaciones lineales.
array([1., 3., 5.])
>>> np.linalg.matrix_rank(matrixA) # El método de álgebra lineal linalg.matrix_rank de NumPy devuelve el rango de matrixA.
3
>>> matrixExtended = np.column_stack([matrixA, vectorB]) # numpy.column_stack apila matrices 1-D (nuestra matriz de términos constantes) como columnas en una matriz 2-D (nuestra matriz de coeficientes) para que podamos obtener la matriz aumentada A | b.
>>> matrixExtended
array([[ 5,  2,  0, 11],
       [-4,  0, -1, -9],
       [ 1,  1,  1,  9]])
>>> np.linalg.matrix_rank(matrixExtended) # Observa que rang(A) = rang (A|b) = 3 (r = r '= n) por lo que nuestro sistema es un sistema compatible determinado y tiene una solución única, a saber: [1, 3, 5].
3

Resolvamos un segundo sistema de ecuaciones lineales: Pan comido con Wolfram Alpha: Resolviendo ecuaciones lineales con WolframAlpha

Resolviendo ecuaciones lineales con WolframAlpha

¡Vaya!, no encuentra ninguna solución. Veamos con Maxima cuál es el problema.

Observa que algsys([6*x-y+3*z=6,-6*x+8*y=-10, 2*x-5*y-z=4], [x, y, z]); devuelve [] pues rank(Mext) = rank( matrix ([6, -1, 3, 6], [-6, 8, 0, -10], [2, -5, -1, 4]) ) = 3 ≠ 2 = rank(M) = rank ( matrix ([6, -1, 3], [-6, 8, 0], [2, -5, -1]); ). En definitiva, rang(A) ≠ rang(A|b) y, en consecuencia, el sistema es incompatible.

Resolviendo sistemas de ecuaciones con Maxima

Resolviendo sistemas de ecuaciones con Maxima

Veamos un tercer sistema de ecuaciones lineales:

[email protected]:~$yacas
This is Yacas version '1.3.6'.
To exit Yacas, enter  Exit(); or quit or Ctrl-c.
Type 'restart' to restart Yacas.
To see example commands, keep typing Example();
In> A:={{8, 1, 4}, {5, -2, 4}, {1, 1, 0}} # Definimos la matriz de coeficientes.
Out> {{8,1,4},{5,-2,4},{1,1,0}}
In> B:={9,6, 1} # Definimos la matriz o vector de términos constantes.
Out> {9,6,1}
In> MatrixSolve(A, B) # Intenta resolver la ecuación matricial Ax = b pero fracasa.
Out> {0,Undefined,Undefined}

Maxima muestra que r = r ‘= 2 ≠ n = 3, el sistema es un sistema compatible indeterminado, es decir, tiene infinitas soluciones. Soluciones: x = -(4t-8)7, y = 4t-17, z = t. Resolviendo sistemas de ecuaciones lineales con Maxima

Resolviendo sistemas de ecuaciones lineales con Maxima

user@pc:~$ python # Volvamos a resolver sistemas de ecuaciones lineales en nuestro lenguaje de programación favorito, Python
Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
>>> import numpy as np # NumPy es una biblioteca que nos da soporte para crear y manipular vectores y matrices. 
>>> matrixA=np.array([[8, 1, 4], [5, -2, 4], [1, 1, 0]]) # La manipulación de datos en Python es casi siempre sinónimo de la manipulación de arrays con NumPy. Definimos la matriz de coeficientes ...
>>> vectorB=np.array([9, 6, 1]) # ... y el vector de términos constantes.
>>> np.linalg.matrix_rank(matrixA) # El método de álgebra lineal linalg.matrix_rank de NumPy devuelve el rango de matrixA.
2
>>> matrixExtended = np.column_stack([matrixA, vectorB]) # numpy.column_stack apila matrices 1-D (nuestra matriz de términos constantes) como columnas en una matriz 2-D (nuestra matriz de coeficientes) para que podamos obtener la matriz aumentada A | b.
>>> matrixExtended
array([[ 8,  1,  4,  9],
       [ 5, -2,  4,  6],
       [ 1,  1,  0,  1]])
>>> np.linalg.matrix_rank(matrixExtended)
2 # Muestra que r = r '= 2 ≠ n = 3, el sistema es un sistema compatible **indeterminado**, tiene _infinitas soluciones_.
>>> np.linalg.lstsq(matrixA, vectorB, rcond=None) # El método linalg.solve(matrixA, vectorB) requiere que matrixA sea una matriz cuadrada y de rango completo. Dicho de otro modo, todas sus filas deben ser linealmente independientes y su determinante no puede ser cero. De lo contrario, generará la excepción: LinAlgError: Singular matrix.
(array([0.88888889, 0.11111111, 0.44444444]), array([], dtype=float64), 2, array([1.09823822e+01, 2.71795522e+00, 2.54972035e-16]))
```P
np.linalg.lstsq nos da una de las soluciones, 0.88888889, 0.11111111, 0.44444444. Este resultado es consistente con lo que obtuvimos en Maxima: z = 0.44444444, x = -(4*0.44444444-8)/7 = 0.88888889142, y = -(4*0.44444444-1)/7 = 0.11111110857.
Bitcoin donation

JustToThePoint Copyright © 2011 - 2022 PhD. Máximo Núñez Alarcón, Anawim. ALL RIGHTS RESERVED. Bilingual e-books, articles, and videos to help your child and your entire family succeed, develop a healthy lifestyle, and have a lot of fun.

Esta web utiliza 'cookies' propias y de terceros para ofrecerte una mejor experiencia y servicio.
Al navegar o utilizar nuestros servicios, estas aceptando nuestra Política de Cookies, así como, nuestros Términos y condiciones de uso.