Прежде всего, предположим, что все ваши матрицы имеют порядок n x n. Холескопическая факторизация может быть выполнена в операциях O (n^3/6) (при больших значениях n).
Решение B * c (i) = y (i) или L * L '* c (i) = y (i) (Холецкий) равно 2 * O (n^2/2) или O (n^2), но решение BC = Y - решение n этих уравнений (поскольку Y - nxn), поэтому при сумме имеем O (n^3).
Решение D ', очевидно, аналогично этому, поэтому другое O (n^3).
Транспонирование D 'to D является грубым O (n^2), однако никаких вычислений не происходит, просто заменяя данные (кроме диагональных элементов, которые, конечно, одинаковы).
Решение E в ВЕ = А во второй формуле имеет обратную замену Холецкого факторизации еще раз, так что O (N^3)
А»* Е п^2 * (п сть и п-1 add), который является O (2 * n^3 - n^2)
Эта сумма до: O (n^3/6) + 3 * O (n^3) + O (n^2) + O (2 * n^3 - n^2) ~ O (31 * n^3/6) ~ O (5 * n^3) (при больших значениях n)
Обратите внимание, что я не рассчитал матрица добавляет/вычитает, но это не актуально, потому что они будут одинаковыми, если мы решим инвертировать B. Я также пропустил A до A 'по тем же причинам.
Хорошо, так насколько дорого стоит инвертирование матрицы? Ну, мы решили решить матричное уравнение:
B * inv (B) = I, что совпадает с решением B * x (i) = e (i) для i = 1..n, где e (i) являются базовыми единичными векторами в I. Это обычно делается с помощью исключения гаусса, чтобы преобразовать систему в треугольную форму, которая принимает около O (n^3/3) операции. Когда выполняется триангуляция, для ее решения требуется O (n^2/2) (обратная подстановка). Но это нужно делать n раз, что дает нам общее количество операций O (n^4/3) + O (n^3/2), так как вы можете видеть, что мы уже находимся над краем.
Однако вычисление Inv (B), когда зная Холецкое разложение B представляет собой О (п^3) (из-за решения L * L '* INV (В) = I является таким же, как решение BE = А)
Итак, тогда мы имеем: O (n^3/6) (холецкий B) + O (n^3) (вычисление inv (B) с холеским) + 4 * O (2n^3-n^2) (четыре матричных умножения) ~ O (9 * n^3), что немного лучше, но еще хуже.
Поэтому я предлагаю вам остаться с вашим нынешним подходом. Но вы должны иметь в виду, что это для больших значений n. Если n не равно 100+, я не думаю, что это так важно.
Что известно, и что неизвестно? Кроме того, где зависимость Y в вашем втором уравнении? Сейчас он говорит, что A '* inv (B) * A ==' 0. X, Y и A - векторы, а B - матрица? – ralphtheninja
Произошла ошибка во втором уравнении, конечно, должно быть X = Y + A '* inv (B) * A все остальное известно, но X и, конечно, inv (B) (B известно). И X, Y и A во втором уравнении не такие, как в первом ... X, A, Y и B - все p * p-матрицы в обоих уравнениях. – 2009-05-31 10:58:12
Хорошо, при решении, например, BC = Y, вы делите это на несколько систем линейных уравнений, решая Bc (i) = y (i), i = 1..n. – ralphtheninja