В Matlab, какие различия между Linsolve и Mldivide?


10

в Matlab и Linsolve, и Mldivide используются для решения системы линейных уравнений во всех детерминированных, переопределенных и недоопределенных случаях.

Читая их документы, мне было интересно, какие различия между ними? Используют ли они почти одинаковые алгоритмы матричной факторизации и триангуляции в трех случаях?

Если A имеет свойства в опциях, linsolve работает быстрее, чем mldivide, потому что linsolve не выполняет никаких тестов для проверки того, что A имеет указанные свойства

Выполняет ли mldivide те же тесты, чтобы проверить, имеет ли A специальные свойства? Или mldivide просто рассматривает их как общий случай без особых свойств?

Спасибо!

Ответы:


16

Оба они являются прямыми решателями для решения линейных систем (в отличие от итерационного решателя).

mldivideAAx=bmldivide

mldivideдля квадратных матриц: если A симметрична и имеет вещественные положительные диагональные элементы, MATLAB пытается факторизацию Холецкого. Если факторизация Холецкого не удалась, MATLAB выполняет симметричную, неопределенную факторизацию. Если A - верхнее число Гессенберга, MATLAB использует исключение Гаусса, чтобы привести систему к треугольной матрице. Если A является квадратным, но не является перестановочным треугольным, симметричным и положительно определенным, или Hessenberg, то MATLAB выполняет общую треугольную факторизацию с использованием факторизации LU с частичным поворотом

linsolve для квадратных матриц: факторизация LU с частичным поворотом

mldivideи linsolveдля прямоугольных матриц: QR-факторизация

В linsolveкачестве справки документ предлагает на веб - сайте MathWorks, вы могли бы избежать дополнительных испытаний процесса (Allan использовал слово «над головой» в своем ответе), используя , optsесли и только если вы знаете , чтоA

opts.POSDEF = true; linsolve(A,b,opts)

xAopts

Если определенные критерии выполнены, linsolveи mldivideиспользовать тот же процесс факторизации. Например, для плотной положительно определенной системы, удовлетворяющей определенным свойствам, или у вас есть переопределенная система, и оба выполняют наименьшую квадратную подгонку.

Кроме того, linsolveтакже может выполнять символьные вычисления . Это удобно, когда у вас есть небольшая недоопределенная система, которая имеет бесконечное количество решений.linsolveпозволяет решить ее символически, mldivideне может этого сделать. Однако, если переменные не объявлены символически, mldivideи linsolveвы получите то же самое предупреждающее сообщение: «Матрица является единственной в точности работы».

Последнее, но не менее важное, linsolveне поддерживает разреженные системы, такие как следующая матрица (синяя точка означает ненулевой вход). В то время как mldivideмог справиться с разреженными системами надежно, когда размер меньше 200k на 200k. редкий пример

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.