2013-06-19 6 views
-1

У меня есть разреженная матрица размером 10000 * 10000 (матрица A), содержащая только 5 ненулевых элементов в каждой строке.Алгоритм для инверсии матрицы в MATLAB

Теперь проблема в том, что диагональные элементы и константы (в матрице B s.t AX = B) обновляются после каждой итерации. Если я пойду обычной функцией Matlab: «inv» или с помощью исключения Gauss, для вычисления решения потребуется всего 25 секунд, а количество итераций, требуемых этой проблемой, - это порядок: 100-500 для вычисления окончательного решения: X.

Мне нужны некоторые предложения по этому вопросу, если я не хочу использовать параллельные вычисления.
Помощь ребятам! :)

ответ

-1

Вздох. Люди думают, что только потому, что они узнали в школе, что решение A * X = B состоит в том, чтобы сформировать X = inv (A) * B, что это то, что нужно сделать. Да, ваш учебник сказал, чтобы сделать это. Удивительно, но есть толпы людей, которые пытаются научить вас таким вещам. К сожалению, они ошибаются, и они учат других учить неправильные вещи, даже вкладывая их в книги. Эта глупость распространяется, никогда, похоже, не заканчивается. И даже если автор учебника сам знает, что A \ B лучше в теории, чем inv (A) * B, все же легче записать его в обратную матричную форму.

Предупреждение: вы не хотите формировать обратную матрицу, и не дай бог, вы не хотите использовать исключение Гаусса. (Пусть профессионалы так делают в компилированном инструменте для вас.) Вместо этого используйте обратную косую черту в MATLAB, которая эффективно работает &.

X = A \ B;

Если вы решите ту же систему часто, используйте факторизацию, такую ​​как LU. Еще лучше использовать многие правые стороны в качестве столбцов B, одновременно решая все ваши системы. По общему признанию, если матрица постоянно меняется, это не вариант, но лучше всего использовать обратную косую черту.

(Почему и не является хорошей идеей? Это создает по существу полной матрицы, с несколькими нулями. Это медленнее, чем и не как численно стабильное, как обратные косая черта и т.д.)

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

+0

Я получаю то, что вы пытаетесь описать здесь. Уже пробовал это однажды. И только для ваших знаний, оператор (\) также использует исключение Гаусса. Не стесняйтесь проверять это на веб-сайте MATLAB в соответствии с документацией для A \ b. Кстати, что вы подразумеваете под «разреженным хранилищем»? –

+0

Нет, вы не понимаете, что я вам говорю, даже не отдаленно. Эта обратная косая черта использует метод НЕ означает, что вы выиграете, написав гауссово уничтожение себя. Что касается оператора(), он не существует, хотя \ существует. (Вздох.) Затем научитесь использовать разреженные матрицы. Сделай себе одолжение. (помощь разрежена). –

Смежные вопросы