Язык программирования Python

       

Модуль LinearAlgebra


Модуль LinearAlgebra содержит алгоритмы линейной алгебры, в частности нахождение определителя матрицы, решений системы линейных уравнений, обращение матрицы, нахождение собственных чисел и собственных векторов матрицы, разложение матрицы на множители: Холецкого, сингулярное, метод наименьших квадратов.

Функция LinearAlgebra.determinant() находит определитель матрицы:

>>> import Numeric, LinearAlgebra >>> print LinearAlgebra.determinant( ... Numeric.array([[1, -2], ... [1, 5]])) 7

Функция LinearAlgebra.solve_linear_equations() решает линейные уравнения вида ax=b по заданным аргументам a и b:

>>> import Numeric, LinearAlgebra >>> a = Numeric.array([[1.0, 2.0], [0.0, 1.0]]) >>> b = Numeric.array([1.2, 1.5]) >>> x = LinearAlgebra.solve_linear_equations(a, b) >>> print "x =", x x = [-1.8 1.5] >>> print "Проверка:", Numeric.dot(a, x) - b Проверка: [ 0. 0.]

Когда матрица a имеет нулевой определитель, система имеет не единственное решение и возбуждается исключение LinearAlgebraError:

>>> a = Numeric.array([[1.0, 2.0], [0.5, 1.0]]) >>> x = LinearAlgebra.solve_linear_equations(a, b) Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/local/lib/python2.3/site-packages/Numeric/LinearAlgebra.py", line 98, in solve_linear_equations raise LinAlgError, 'Singular matrix' LinearAlgebra.LinAlgError: Singular matrix

Функция LinearAlgebra.inverse() находит обратную матрицу. Однако не следует решать линейные уравнения с помощью LinearAlgebra.inverse() умножением на обратную матрицу, так как она определена через LinearAlgebra.solve_linear_equations():

def inverse(a): return solve_linear_equations(a, Numeric.identity(a.shape[0]))

Функция LinearAlgebra.eigenvalues() находит собственные значения матрицы, а LinearAlgebra.eigenvectors() - пару: собственные значения, собственные вектора:

>>> from Numeric import array, dot >>> from LinearAlgebra import eigenvalues, eigenvectors >>> a = array([[-5, 2], [2, -7]]) >>> lmd = eigenvalues(a) >>> print "Собственные значения:", lmd Собственные значения: [-3.76393202 -8.23606798] >>> (lmd, v) = eigenvectors(a) >>> print "Собственные вектора:" Собственные вектора: >>> print v [[ 0.85065081 0.52573111] [-0.52573111 0.85065081]] >>> print "Проверка:", dot(a, v[0]) - v[0] * lmd[0] Проверка: [ -4.44089210e-16 2.22044605e-16]

Проверка показывает, что тождество выполняется с достаточно большой точностью (числа совсем маленькие, практически нули): собственные числа и векторы найдены верно.



Содержание раздела