Модули и функции · встроенный MicroPython FEMM 5
ulab.numpy.linalg
Исходная реализация линейной алгебры ulab предназначена для вещественных данных.
Условия работы
- Доступ: from ulab import numpy as unp; затем unp.linalg.*. Эти методы принимают вещественные ndarray.
- Комплексные и дополнительные матричные алгоритмы встроенного FEMM описаны в numpy.linalg.
ulab.numpy.linalg.choleskyulab.numpy.linalg.detulab.numpy.linalg.invulab.numpy.linalg.eigulab.numpy.linalg.normulab.numpy.linalg.qrulab.numpy.linalg.choleskyРазлагает A=L·L.T. Положительная определённость проверяется численным алгоритмом.
ulab.numpy.linalg.cholesky
ulab.numpy.linalg.cholesky(a)Разлагает A=L·L.T. Положительная определённость проверяется численным алгоритмом.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
a | Вещественная симметричная положительно определённая матрица n×n. |
Возвращаемое значение
Вещественный ndarray L — нижний треугольный множитель n×n.
Особенности вызова
- Принимает вещественный ndarray; форма и смысл результата такие же, как в одноимённой карточке numpy.linalg.
Пример
"Пример ulab.numpy.linalg.cholesky.\nСреда: встроенный MicroPython FEMM 5.\nРазлагает A=L·L.T. Положительная определённость проверяется численным алгоритмом.\nРезультат: Вещественный ndarray L — нижний треугольный множитель n×n."
from ulab import numpy as np
A=np.array([[4,2],[2,5]])
L=np.linalg.cholesky(A)
R=np.dot(L,L.transpose())-A
assert max([abs(R[i,j]) for i in range(2) for j in range(2)])<1e-8
print(L)
Ожидаемый результат. Множитель [[2,0],[1,2]] восстанавливает исходную матрицу.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
ulab.numpy.linalg.detВычисляет определитель матрицы.
ulab.numpy.linalg.det
ulab.numpy.linalg.det(a)Вычисляет определитель матрицы.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
a | Квадратная матрица n×n. |
Возвращаемое значение
float для вещественной матрицы, complex для комплексной.
Особенности вызова
- Принимает вещественный ndarray; форма и смысл результата такие же, как в одноимённой карточке numpy.linalg.
Пример
"Пример ulab.numpy.linalg.det.\nСреда: встроенный MicroPython FEMM 5.\nВычисляет определитель матрицы.\nРезультат: float для вещественной матрицы, complex для комплексной."
from ulab import numpy as np
v=np.linalg.det(np.array([[2,1],[1,3]]))
assert abs(v-5)<1e-9
print(v)
Ожидаемый результат. Определитель близок к 5.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
ulab.numpy.linalg.invВычисляет обратную матрицу. Для одной правой части обычно удобнее solve.
ulab.numpy.linalg.inv
ulab.numpy.linalg.inv(a)Вычисляет обратную матрицу. Для одной правой части обычно удобнее solve.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
a | Невырожденная квадратная матрица n×n. |
Возвращаемое значение
Обратная матрица ndarray n×n.
Особенности вызова
- Принимает вещественный ndarray; форма и смысл результата такие же, как в одноимённой карточке numpy.linalg.
Пример
"Пример ulab.numpy.linalg.inv.\nСреда: встроенный MicroPython FEMM 5.\nВычисляет обратную матрицу. Для одной правой части обычно удобнее solve.\nРезультат: Обратная матрица ndarray n×n."
from ulab import numpy as np
A=np.array([[2,0],[0,4]])
B=np.linalg.inv(A)
assert abs(B[0,0]-0.5)<1e-10 and abs(B[1,1]-0.25)<1e-10
print(B)
Ожидаемый результат. Диагональная матрица diag(0.5,0.25).
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
ulab.numpy.linalg.eigВычисляет собственные значения симметричной матрицы вращениями Якоби. Несимметричная матрица вызывает ValueError.
ulab.numpy.linalg.eig
ulab.numpy.linalg.eig(a)Вычисляет собственные значения симметричной матрицы вращениями Якоби. Несимметричная матрица вызывает ValueError.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
a | Вещественная симметричная квадратная матрица n×n. |
Возвращаемое значение
Кортеж (w,V): вещественный вектор собственных значений и матрица правых собственных векторов по столбцам.
Пример
"Пример ulab.numpy.linalg.eig.\nСреда: встроенный MicroPython FEMM 5.\nВычисляет собственные значения симметричной матрицы вращениями Якоби. Несимметричная матрица вызывает ValueError.\nРезультат: Кортеж (w,V): вещественный вектор собственных значений и матрица правых собственных векторов по столбцам."
from ulab import numpy as unp
A=unp.array([[2,1],[1,2]])
w,V=unp.linalg.eig(A)
assert len(w)==2
assert abs((w[0]-1)*(w[0]-3))<1e-7
assert abs((w[1]-1)*(w[1]-3))<1e-7
print(w)
Ожидаемый результат. Собственные значения 1 и 3 в произвольном порядке.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
ulab.numpy.linalg.normВычисляет квадратный корень из суммы квадратов. Для матрицы без axis — норма Фробениуса.
ulab.numpy.linalg.norm
ulab.numpy.linalg.norm(a, axis=None)Вычисляет квадратный корень из суммы квадратов. Для матрицы без axis — норма Фробениуса.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
a | Вещественный ndarray либо одномерный список/кортеж. |
axis | None использует все элементы; иначе выбранная ось массива. |
Возвращаемое значение
float для полной нормы; ndarray норм вдоль оси.
Пример
"Пример ulab.numpy.linalg.norm.\nСреда: встроенный MicroPython FEMM 5.\nВычисляет квадратный корень из суммы квадратов. Для матрицы без axis — норма Фробениуса.\nРезультат: float для полной нормы; ndarray норм вдоль оси."
from ulab import numpy as unp
A=unp.array([[3,0],[4,0]])
n=unp.linalg.norm(A,axis=0)
assert abs(n[0]-5)<1e-8 and abs(n[1])<1e-8
print(n)
Ожидаемый результат. Нормы столбцов [5,0].
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.
ulab.numpy.linalg.qrРазлагает вещественную матрицу вращениями Гивенса.
ulab.numpy.linalg.qr
ulab.numpy.linalg.qr(a, mode='reduced')Разлагает вещественную матрицу вращениями Гивенса.
Аргументы
| Имя | Назначение и допустимые значения |
|---|---|
a | Вещественный ndarray m×n; используйте m≥n. |
mode | 'reduced' даёт Q формы m×n и R формы n×n; 'complete' — Q m×m и R m×n. |
Возвращаемое значение
Кортеж вещественных матриц (Q,R), A=Q·R.
Особенности вызова
- Форму reduced для широких матриц m<n не используйте: исходная реализация вычисляет размеры через m-abs(m-n).
Пример
"Пример ulab.numpy.linalg.qr.\nСреда: встроенный MicroPython FEMM 5.\nРазлагает вещественную матрицу вращениями Гивенса.\nРезультат: Кортеж вещественных матриц (Q,R), A=Q·R."
from ulab import numpy as unp
A=unp.array([[2,1],[0,3]])
Q,R=unp.linalg.qr(A,mode="complete")
D=unp.dot(Q,R)-A
assert abs(D[0,0])<1e-8 and abs(D[1,1])<1e-8
print(Q,R)
Ожидаемый результат. Произведение Q·R восстанавливает A.
Скачать пример · Ссылка на функцию
Этот пример выполнен в установленном FEMM 5.