У матлабі, які відмінності між linsolve та mldivide?


10

у matlab і linsolve, і mldivide використовуються для вирішення системи лінійних рівнянь у всіх визначених, переопределених і недоозначених випадках.

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

Якщо A має властивості в opts, linsolve швидше, ніж mldivide, тому що linsolve не проводить жодних тестів для перевірки наявності A у зазначених властивостях

Чи mldivide виконує ті ж тести, щоб перевірити, чи має A особливі властивості? Або mldivide просто трактує їх як загальний випадок без особливих властивостей?

Дякую!

Відповіді:


16

Вони обидва є прямим розв’язувачем для вирішення лінійних систем (протилежних ітераційному розв'язувачу).

mldivideAAx=bmldivide

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

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

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

linsolveoptsA

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.