Контекст: у меня есть некоторые теоретические апостериорные границы погрешности для двухсеточной конечно-элементной схемы, которые я использую для решения проблемы потери устойчивости. Однако вычисление одного из членов непомерно дорого, и мне интересно, не делаю ли я это наивно.
Проблема: Обозначив A мою (разреженную) матрицу жесткости, я вычисляю факторизацию Холецкого:
L = chol(A,'lower');
Затем мне нужно вычислить 2-норму inv(L). В настоящее время я использую «inv» и svds:
Linv = inv(L);
LinvNorm = svds(Linv,1);
Обратите внимание, что я использую inv, поскольку на самом деле это рекомендуемый синтаксис на веб-сайте Mathworks: "Для разреженных входных данных inv(X) создает разреженную идентификационную матрицу и использует обратную косую черту, X\speye(size(X)). "
Вопрос: Это, конечно, очень медленно (особенно вычисление обратного, хотя svds тоже недешев). Я пропустил трюк здесь?
Редактировать: я пытался использовать svds(L,1,0) (чтобы получить обратное значение), но это не сходится. У меня 2015a, поэтому я не могу увеличить размер Крылова, что является рекомендуемым исправлением в более новых версиях.