numeric::leastSquares

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

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

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

Синтаксис

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

Описание

numeric::leastSquares(A, B) вычисляет матричный X, который решает линейное матричное уравнение AX = B в смысле наименьших квадратов: столбцы X j 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] возвращен. См. Пример 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

Один из флагов QRDsvd

Опции

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. См. Пример 1.

Примечание

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

QRD

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

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

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

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

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

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

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

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

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

См. пример 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.