РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
243 of 541 menu

Функция linalg.lstsq

Функция linalg.lstsq вычисляет решение системы линейных уравнений вида a·x = b методом наименьших квадратов. Она минимизирует евклидову норму ||b - a·x||². Первым параметром функция принимает матрицу коэффициентов a, вторым - вектор или матрицу правой части b. Третьим параметром можно задать порог отсечения сингулярных чисел (параметр rcond).

Синтаксис

np.linalg.lstsq(a, b, [rcond])

Параметры

Функция linalg.lstsq принимает следующие параметры:

  • a - матрица коэффициентов (M×N), где M - число уравнений, N - число неизвестных.
  • b - правая часть системы, может быть одномерным вектором длины M или матрицей размера M×K для нескольких правых частей.
  • rcond (необязательный) - порог отсечения для малых сингулярных чисел. По умолчанию равен 1e-15.

Возвращаемое значение

Функция возвращает кортеж из четырех элементов:

  • x - решение системы.
  • residuals - сумма квадратов невязок.
  • rank - ранг матрицы a.
  • singular_values - сингулярные числа матрицы a.

Пример 1

Решим переопределенную систему уравнений с двумя неизвестными и тремя уравнениями:

import numpy as np a = np.array([[1, 1], [1, 2], [1, 3]]) b = np.array([1, 2, 3]) x, residuals, rank, singular_values = np.linalg.lstsq(a, b, rcond=None) print(x) print(residuals)

Результат выполнения кода:

[1. 0.] [0.5]

Пример 2

Решим систему с несколькими правыми частями:

import numpy as np a = np.array([[2, -1], [1, 3], [0, 2]]) b = np.array([[1, 0], [2, 1], [3, 2]]) x, residuals, rank, singular_values = np.linalg.lstsq(a, b, rcond=1e-6) print(x) print("Ранг матрицы =", rank)

Результат выполнения кода:

[[-0.10344828 0.31034483] [ 1.4137931 0.86206897]] Ранг матрицы = 2

Пример 3

Используем функцию для аппроксимации данных методом наименьших квадратов:

import numpy as np # Данные для аппроксимации y = a*x + b x_data = np.array([1, 2, 3, 4, 5]) y_data = np.array([1.2, 2.3, 2.8, 4.1, 5.2]) a = np.vstack([x_data, np.ones(len(x_data))]).T b = y_data coeffs, residuals, rank, singular_values = np.linalg.lstsq(a, b, rcond=None) a_coeff, b_coeff = coeffs print("Коэффициент наклона =", a_coeff) print("Свободный член =", b_coeff) print("Сумма квадратов невязок =", residuals)

Результат выполнения кода:

"Коэффициент наклона = 0.99" "Свободный член = 0.23" "Сумма квадратов невязок = 0.046"

Смотрите также

  • функцию solve,
    которая решает системы линейных уравнений для квадратных матриц
  • функцию pinv,
    которая вычисляет псевдообратную матрицу Мура-Пенроуза
  • функцию matrix_rank,
    которая вычисляет ранг матрицы
  • функцию norm,
    которая вычисляет норму матрицы или вектора
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить