Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

mldivide, \

Resolver sistemas de ecuaciones lineales Ax = B para x

Descripción

ejemplo

x = A\B resuelve el sistema de ecuaciones lineales A*x = B. Las matrices A y B deben tener el mismo número de filas. MATLAB® muestra un mensaje de advertencia si A se escala incorrectamente o es casi singular, pero realiza el cálculo de todas formas.

  • Si A es un escalar, A\B equivale a A.\B.

  • Si A es una matriz cuadrada de n por n y B es una matriz con n filas, x = A\B es una solución a la ecuación A*x = B, si existe.

  • Si A es una matriz cuadrada de m por n con m ~= n, y B es una matriz con m filas, A\B devuelve una solución de mínimos cuadrados al sistema de ecuaciones A*x= B.

x = mldivide(A,B) es una forma alternativa de ejecutar x = A\B, pero se utiliza con poca frecuencia. Permite la sobrecarga de operadores para las clases.

Ejemplos

contraer todo

Resuelva un sistema de ecuaciones lineales sencillo, A*x = B.

A = magic(3);
B = [15; 15; 15];
x = A\B
x = 3×1

    1.0000
    1.0000
    1.0000

Resuelva un sistema lineal de ecuaciones A*x = b que incluya una matriz singular, A.

A = magic(4);
b = [34; 34; 34; 34];
x = A\b
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  1.306145e-17.
x = 4×1

    1.5000
    2.5000
   -0.5000
    0.5000

Cuando rcond está entre 0 y eps, MATLAB® emite una advertencia de casi singular, pero continúa con el cálculo. Cuando se trabaja con matrices mal condicionadas, puede generarse una solución no fiable, aunque el residuo (b-A*x) sea relativamente pequeño. En este ejemplo concreto, la norma del residuo es cero, y se obtiene una solución exacta, aunque rcond sea pequeño.

Cuando rcond es igual a 0, aparece la advertencia de singular.

A = [1 0; 0 0];
b = [1; 1];
x = A\b
Warning: Matrix is singular to working precision.
x = 2×1

     1
   Inf

En este caso, la división entre cero conduce a cálculos con Inf y/o NaN, lo que hace que el resultado calculado sea poco fiable.

Resuelva un sistema de ecuaciones lineales, A*x = b.

A = [1 2 0; 0 4 3];
b = [8; 18];
x = A\b
x = 3×1

         0
    4.0000
    0.6667

Resuelva un sistema de ecuaciones lineales sencillo utilizando matrices dispersas.

Considere la ecuación de matrices A*x = B.

A = sparse([0 2 0 1 0; 4 -1 -1 0 0; 0 0 0 3 -6; -2 0 0 0 2; 0 0 4 2 0]);
B = sparse([8; -1; -18; 8; 20]);
x = A\B
x = 
   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

Argumentos de entrada

contraer todo

Operandos, especificados como vectores, matrices completas o matrices dispersas. Las matrices A y B deben tener el mismo número de filas.

  • Si A o B tiene un tipo de datos de valores enteros, la otra entrada debe ser un escalar. Los operandos con un tipo de datos enteros no pueden ser complejos.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Soporte de números complejos:

Argumentos de salida

contraer todo

Solución, devuelta como vector, matriz completa o matriz dispersa. Si A es una matriz de m por n y B es una matriz de m por p, x es una matriz de n por p, incluido el caso en el que p==1.

Si A tiene almacenamiento completo, x también es completa. Si A es dispersa, x tiene el mismo almacenamiento que B.

Sugerencias

  • Los operadores / y \ se relacionan entre ellos con la ecuación B/A = (A'\B')'.

  • Si A es una matriz cuadrada, A\B es aproximadamente igual a inv(A)*B, pero MATLAB procesa A\B de forma distinta y más sólida.

  • Si el rango de A es menor que el número de columnas en A, x = A\B no es necesariamente la solución con la norma mínima. Puede calcular la solución de mínimos cuadrados con la norma mínima utilizando x = lsqminnorm(A,B) o x = pinv(A)*B.

  • Utilice objetos decomposition para resolver de forma eficiente un sistema lineal varias veces con lados derechos distintos. Los objetos decomposition son adecuados para resolver problemas que requieren soluciones que se repitan, puesto que no es necesario realizar varias veces la descomposición de la matriz de coeficientes.

Algoritmos

contraer todo

La versatilidad de mldivide para resolver sistemas lineales proviene de su habilidad para aprovechar las simetrías en el problema enviando a un solver adecuado. Este método pretende reducir el tiempo de cálculo. La primera distinción que hace la función es entre arreglos de entrada completos (también llamados "densos") y dispersos.

Algoritmo para entradas completas

El siguiente diagrama de flujo muestra la ruta del algoritmo cuando las entradas A y B son completas.

The properties of full input matrices determine which algorithm mldivide uses to solve the linear system

Algoritmo para entradas dispersas

Si A es completa y B es dispersa, mldivide convierte B en una matriz completa y utiliza la ruta completa del algoritmo (más arriba) para calcular una solución con almacenamiento completo. Si A es dispersa, el almacenamiento de la solución x es el mismo que el de B y mldivide sigue la ruta del algoritmo para entradas dispersas, como se muestra a continuación.

The properties of sparse input matrices determine which algorithm mldivide uses to solve the linear system

Referencias

[1] Gilbert, John R., and Tim Peierls. “Sparse Partial Pivoting in Time Proportional to Arithmetic Operations.” SIAM Journal on Scientific and Statistical Computing 9, no. 5 (September 1988): 862–874. https://doi.org/10.1137/0909058.

[2] Anderson, E., ed. LAPACK Users’ Guide. 3rd ed. Software, Environments, Tools. Philadelphia: Society for Industrial and Applied Mathematics, 1999. https://doi.org/10.1137/1.9780898719604.

[3] Davis, Timothy A. "Algorithm 832: UMFPACK V4.3 – an unsymmetric-pattern multifrontal method." ACM Transactions on Mathematical Software 30, no. 2 (June 2004): 196–199. https://doi.org/10.1145/992200.992206.

[4] Duff, Iain S. “MA57---a Code for the Solution of Sparse Symmetric Definite and Indefinite Systems.” ACM Transactions on Mathematical Software 30, no. 2 (June 2004): 118–144. https://doi.org/10.1145/992200.992202.

[5] Davis, Timothy A., John R. Gilbert, Stefan I. Larimore, and Esmond G. Ng. “Algorithm 836: COLAMD, a Column Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 377–380. https://doi.org/10.1145/1024074.1024080.

[6] Amestoy, Patrick R., Timothy A. Davis, and Iain S. Duff. “Algorithm 837: AMD, an Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 381–388. https://doi.org/10.1145/1024074.1024081.

[7] Chen, Yanqing, Timothy A. Davis, William W. Hager, and Sivasankaran Rajamanickam. “Algorithm 887: CHOLMOD, Supernodal Sparse Cholesky Factorization and Update/Downdate.” ACM Transactions on Mathematical Software 35, no. 3 (October 2008): 1–14. https://doi.org/10.1145/1391989.1391995.

[8] Davis, Timothy A. “Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization.” ACM Transactions on Mathematical Software 38, no. 1 (November 2011): 1–22. https://doi.org/10.1145/2049662.2049670.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo