числовой::

Решение методом наименьших квадратов линейных уравнений

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::leastSquares(A, B, <mode>, <method>, options)

Описание

numeric::leastSquares(A, B) вычисляет матричный X, который решает линейное матричное уравнение AX = B в смысле наименьших квадратов: j X столбцов X минимизирует, где j B является столбцами B.

Для данного векторного B векторный X минимизирует, если и только если X является решением “нормальных уравнений” A H  A X = A HB, где A, H является Эрмитовым, транспонирует m ×n матричный A. Решение уникально если rank (A) = n.

numeric::leastSquares позволяет решать несколько проблем наименьших квадратов одновременно путем объединения нескольких 'правых сторон' B j по столбцам к матричному B.

Если никакие не возвращаются, тип задан с помощью опции ReturnType = d, доменный тип данных о возврате зависит от типа входной матрицы A:

  • Специальное решение X, а также ядро массива A возвращено как массивы.

  • Специальное решение и ядро hfarray доменного типа DOM_HFARRAY возвращены как hfarrays.

  • Для плотного матричного A типа Dom::DenseMatrix() оба специальное решение X, а также ядро возвращен как матрицы типа Dom::DenseMatrix() по звонку выражений MuPAD®.

  • Для всех других матриц категории Cat::Matrix оба специальное решение X, а также ядро возвращен как матрицы типа Dom::Matrix() по звонку выражений MuPAD. Это включает входные матрицы A типа Dom::Matrix(...), Dom::SquareMatrix(...), Dom::MatrixGroup(...) и т.д.

Без Symbolic входные данные преобразованы в числа с плавающей запятой. Матричный A не должен содержать неконвертируемые параметры, если Symbolic не используется. Если такие объекты найдены, numeric::leastSquares автоматически переключается на свой символьный режим, выдавая предупреждение. Это предупреждение может быть подавлено через NoWarning.

Символьные параметры в B приняты без предупреждения. Однако HardwareFloats не может использоваться, если существуют какие-либо символьные параметры в A или B.

Если A, HA имеет нетривиальное ядро, решение методом наименьших квадратов X, не уникален. Возвращаемое значение X является специальным решением уравнения A H  A X = A HB. С методом SVD X является специальным решением со столбцами минимальной Евклидовой длины.

Примечание

Результат, вычисленный с HardwareFloats, может отличаться от решения, вычисленного с SoftwareFloats или Symbolic! В частности, дело обстоит так для систем с нетривиальным ядром. Далее, результаты, вычисленные с QRD и SVD, могут отличаться.

Ядро вычисляется только в символьном режиме (опция Symbolic). Все методы с плавающей точкой возвращают значение NIL для ядра.

С Symbolic n ×d матричный KernelBasis является самым общим решением A H  A X = 0. Его столбцы охватывают d - размерное ядро A HA.

Если ядро является 0-мерным, возвращаемое значение KernelBasis является целым числом 0. Если KernelBasis возвращен как массив, размерность, d ядра является d = op(KernelBasis, [0, 3, 2]]). Если KernelBasis возвращен как матрица типа Dom::Matrix() или Dom::DenseMatrix(), размерность, d ядра является d = KernelBasis::dom::matdim(KernelBasis)[2].

Примечание

Без опции Symbolic реализованные алгоритмы заботятся о числовой стабилизации.

С Symbolic приняты точные данные. Решения методом наименьших квадратов вычисляются через numeric::matlinsolve( AH A, AH B , Symbolic). Символьные попытки стратегии максимизируют скорость, и не заботится о числовой стабилизации! Не используйте Symbolic для систем, включающих записи с плавающей точкой! В конкретном, должном к округлению, это может произойти, которым не найдено никакое решение A H  A X = A HB. В таком случае возвращен [FAIL, NIL, NIL]. Cf. Пример 4.

Все записи A и B должны быть арифметическими выражениями.

Примечание

Кроме матриц типа Dom::Matrix(...), Cat::Matrix возражает A от матричных областей, таких как Dom::DenseMatrix (...) или Dom::SquareMatrix, (...) внутренне преобразован в массивы по выражениям через expr(A). Обратите внимание на то, что Symbolic опции должен использоваться, если записи не могут быть преобразованы в числовые выражения.

То же самое сохраняется для матриц, которые B передал как объекты Cat::Matrix.

Взаимодействия среды

Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.

Примеры

Пример 1

Мы рассматриваем матричный A ранга 1:

A := array(1..3, 1..2, [[1, 2], [1, 2], [1, 2]]):
B := [3, 4, 5]:

Нормальные уравнения имеют набор с 1 параметром решений:

[X, KernelBasis, Res] := numeric::leastSquares(A, B, Symbolic)

Численный метод QRD производит специальное решение:

[X, KernelBasis, Res] := numeric::leastSquares(A, B, QRD)

Численный метод SVD производит решение X минимальной нормы:

[X, KernelBasis, Res] := numeric::leastSquares(A, B, SVD)

delete A, B, X, KernelBasis, Res:

Пример 2

Мы рассматриваем плохо обусловленную проблему наименьших квадратов. Конструкцией следующая сверхрешительная система имеет точное решение X = [1, 2, …, n]:

m := 10: n := 8:
A := array(1..m, 1..n, [[1/(i + j + 100) $ j=1..n] $ i=1..m]):
B := array(1..m, [_plus(A[i,j]*j $ j=1..n) $ i=1..m]):
numeric::leastSquares(A, B, Symbolic)

Матрица коэффициентов A довольно плохо обусловлена:

singvals := numeric::singularvalues(A): 
conditionOfA := max(op(singvals))/min(op(singvals))

Следовательно, округление имеет решительный эффект в числовом приближении. Методы приводят к результатам различного качества:

numeric::leastSquares(A, B, QRD)

numeric::leastSquares(A, B, SVD)

delete m, n, A, B, singvals, conditionOfA:

Пример 3

Этот пример вовлекает символьный параметр c в матричный A. Опция Symbolic должна использоваться:

A:= matrix([[c, 2], [1/3, 2/3], [1/7, 2/7]]):
B:= [1, 2, 3]:
numeric::leastSquares(A, B, Symbolic)

normal(%)

delete A, B:

Пример 4

Записи с плавающей точкой могут вызвать проблемы в сочетании с опцией Symbolic, потому что вычисление не стабилизируется численно в символьном узле. Следующий матричный A имеет ранг 2:

A := matrix([[1, 30], [10.0^(-15), 31*10.0^(-15)]]):

Однако из-за округления, ‘нормальный матричный’ A HA имеет ранг 1. Никакое решение не найдено с Symbolic:

A::dom::transpose(A) * A

numeric::leastSquares(A, [31, 32*10^5], Symbolic)

Никакая такая проблема не возникает в числовых схемах. Обратите внимание, однако, что численные методы приводят к различным результатам в этой чрезвычайно плохо обусловленной проблеме:

numeric::leastSquares(A, [31, 32*10^5], QRD)

numeric::leastSquares(A, [31, 32*10^5], SVD)

delete A:

Параметры

A

m ×n матрица доменный тип DOM_ARRAY или категории Cat::Matrix

B

m ×p матрица доменного типа DOM_ARRAY или категории Cat::Matrix. Вектор-столбцы B могут также быть представлены 1-мерным array(1..m, [B1, B2, …] ) или списком [B1, B2, …].

mode

Один из флагов Hard, HardwareFloats, Soft, SoftwareFloats или Symbolic

method

Один из флагов QRD, SVD

Опции

Hard, HardwareFloats, Soft, SoftwareFloats

С Hard (или HardwareFloats), вычисления сделаны с помощью быстрой аппаратной плавающей арифметики из сеанса MuPAD. Hard и HardwareFloats эквивалентны. При использовании этой опции входные данные преобразованы в аппаратные плавания и обработаны скомпилированным кодом С. Результат повторно преобразован в плавания MuPAD и возвращен в сеанс MuPAD.

С Soft (или SoftwareFloats) вычисления являются плавающей арифметикой программного обеспечения использования купола, обеспеченной ядром MuPAD. Soft и SoftwareFloats эквивалентны. SoftwareFloats используется по умолчанию, если текущее значение DIGITS больше, чем 15 и входная матрица, A не имеет доменного типа DOM_HFARRAY.

По сравнению с SoftwareFloats, используемым ядром MuPAD, вычисление с HardwareFloats может быть много раз быстрее. Обратите внимание, однако, что точность аппаратной арифметики ограничивается приблизительно 15 цифрами. Далее, размер чисел с плавающей запятой не может быть больше, чем приблизительно 10 308 и не меньшим, чем приблизительно 10 - 308.

Если никакой HardwareFloats или SoftwareFloats не требуют явным образом, следующая стратегия используется: Если текущее значение DIGITS меньше, чем 16 или если матричный A является аппаратным плавающим массивом доменного типа DOM_HFARRAY, то аппаратную арифметику пробуют. Если это успешно, результат возвращен.

Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют.

Если текущее значение DIGITS больше, чем 15 и входная матрица, A не имеет доменного типа DOM_HFARRAY, или если одна из опций, Soft, SoftwareFloats или Symbolic заданы, MuPAD, вычисляет результат со своей арифметикой программного обеспечения, не пытаясь использовать аппаратные плавания сначала.

Может быть несколько причин аппаратной арифметики, чтобы перестать работать:

  • Текущее значение DIGITS больше, чем 15.

  • Данные содержат символьные объекты.

  • Данные содержат числа, больше, чем 10 308 или меньший, чем 10 - 308, который не может быть представлен аппаратными плаваниями.

Если ни HardwareFloats, ни SoftwareFloats не заданы, пользователю не сообщают, используются ли аппаратные плавания или плавания программного обеспечения.

Если HardwareFloats задан, но перестал работать из-за одной из причин выше, предупреждение выдано, что (намного более медленное) программное обеспечение арифметика с плавающей точкой ядра MuPAD используется.

Обратите внимание на то, что HardwareFloats может только использоваться, если все входные данные могут быть преобразованы в числа с плавающей запятой.

Запаздывающие цифры в результатах с плавающей точкой, вычисленных с HardwareFloats и SoftwareFloats, могут отличаться.

Symbolic

Предотвращает преобразование входных данных к числам с плавающей запятой. Точная арифметика используется. Эта опция заменяет HardwareFloats и SoftwareFloats.

Эта опция должна использоваться, если матричный A содержит символьные параметры, которые не могут быть преобразованы в числа с плавающей запятой.

Нормальные уравнения A H  A X = A HB передаются numeric::matlinsolve с опцией Symbolic.

Если проблема наименьших квадратов не имеет уникального решения, специальное решение, X возвращен вместе с ядром A HA. Cf. Пример 1.

Примечание

Эта опция не должна использоваться для систем с коэффициентами с плавающей точкой! Числовая нестабильность может произойти в операциях с плавающей точкой. Далее, если ранг A не максимален, то numeric::leastSquares может не найти решение из-за числового округления. В таком случае возвращен [FAIL, NIL, NIL]. Cf. Пример 4.

QRD

Используйте разложение QR. Все записи A должны быть конвертируемыми к значениям с плавающей точкой.

Это - метод по умолчанию.

Матричный A не должен содержать символьные параметры, которые не могут быть преобразованы в числа с плавающей точкой. Если такие объекты найдены, то numeric::leastSquares автоматически переключается на свой режим Symbolic, выдавая предупреждение. Вычисление возобновляет точную арифметику, с помощью входных данных без преобразований с плавающей точкой.

Предупреждение может быть подавлено опцией NoWarning.

Символьные параметры в B приняты без предупреждения. Они обрабатываются алгоритмом с плавающей точкой.

Числовые выражения такой как и т.д. приняты и преобразованы в плавания.

Если проблема наименьших квадратов не имеет уникального решения, только специальное решение возвращено. Ядро не вычисляется: это возвращено как NIL.

Метод QRD обеспечивает численно стабильный способ решить нормальные уравнения A H  A X = A HB разложением QR. В чрезвычайно плохо обусловленных ситуациях может стоить считать более медленный, еще более стабильный метод SVD.

Создание условий дано отношением самого большого сингулярного значения A, разделенного на самое маленькое сингулярное значение A. Если это значение является большим, проблема плохо обусловлена.

Cf. Пример 2.

SVD

Используйте сингулярное разложение. Все записи A должны быть конвертируемыми к значениям с плавающей точкой.

Матричный A не должен содержать символьные параметры, которые не могут быть преобразованы в числа с плавающей точкой. Если такие объекты найдены, то numeric::leastSquares автоматически переключается на свой символьный режим, выдавая предупреждение. Вычисление возобновляет точную арифметику, с помощью входных данных без преобразований с плавающей точкой.

Предупреждение может быть подавлено опцией NoWarning.

Символьные параметры в B приняты без предупреждения. Они обрабатываются алгоритмом с плавающей точкой.

Числовые выражения такой как и т.д. приняты и преобразованы в плавания.

Если проблема наименьших квадратов не имеет уникального решения, столбцы X j решения, X имеет минимальную Евклидову длину.

Ядро не вычисляется: это возвращено как NIL.

Сингулярное разложение A = U  D VH используется, чтобы решить нормальные уравнения в форме D 2 VH X = D  UH B. Для маленьких или нулевых сингулярных значений d j в D = diag (d 1, d 2, …), соответствующие компоненты V H обнуляются x.

Обычно, численный метод SVD медленнее, чем метод по умолчанию QRD. Однако в плохо обусловленных ситуациях, это численно более стабильно.

Создание условий дано отношением самого большого сингулярного значения A, разделенного на самое маленькое сингулярное значение A. Если это значение является большим, проблема плохо обусловлена.

NoWarning

Отключает предупреждения

Если символьные коэффициенты найдены в A, numeric::leastSquares автоматически переключается на режим Symbolic с предупреждением. При использовании этой опции подавлено это предупреждение.

ReturnType

Опция, заданная как ReturnType = d

Возвратите (специальное) решение и ядро как матрицы доменного типа d. Следующее возвращает типы, d доступен: DOM_ARRAY, или DOM_HFARRAY, Dom::Matrix() или Dom::DenseMatrix().

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

Список [X, KernelBasis, Residues] возвращен.

(Специальным) решением методом наименьших квадратов X является n ×p матрица.

С Symbolic KernelBasis является n ×d матрица (d является размерностью ядра A HA). Его столбцы охватывают ядро A HA. Если ядро тривиально, KernelBasis является целым числом 0.

Без Symbolic не вычисляется ядро. Значение NIL возвращено для KernelBasis.

Список арифметических выражений Residues состоит из минимизированных отклонений наименьших квадратов, соответствующих столбцам X и B.