2013-09-19 3 views
6

Каков наилучший способ вычисления суммы матриц, таких как A^i + A^(i + 1) + A^i + 2 ........ A^n для очень больших n ?Матричная сумма мощности

Я думал два возможных способов:

1) С помощью логарифмической матрицы (LME возведение в степень) для^I, а затем рассчитать последующие матрицы путем умножения А.

Проблема: На самом деле не использует алгоритм LME, поскольку я использую его только для самой низкой мощности!

2) Используйте LME для нахождения A^n и запомните промежуточные вычисления.

Задача: Слишком много места для больших n.

Есть ли третий способ?

ответ

10

Обратите внимание, что:

A + A^2 = A(I + A) 
A + A^2 + A^3 = A(I + A) + A^3 
A + A^2 + A^3 + A^4 = (A + A^2)(I + A^2) 
        = A(I + A)(I + A^2) 

Пусть

B(n) = A + ... + A^n 

Мы имеем:

B(1) = A 
B(n) = B(n/2) * (I + A^(n/2)) if n is even 
B(n) = B(n/2) * (I + A^(n/2)) + A^n if n is odd 

Таким образом, вы будете делать логарифмический ряд шагов, и нет необходимости вычислять инверсий ,

В то время как прямая реализация приведет к (log n)^2 фактору, вы можете сохранить его на log n путем вычисления силы A как вы вычислить B.

+0

Вычисление обратного порядка O (m^2.4), где m - размер матрицы. Стоимость умножения - O (m^2.4) тоже, и вы делаете больше умножения, чем я. Единственное преимущество этого подхода заключается в том, что он работает, даже если вы не можете инвертировать I-A, но я уверен, что сначала стоит проверить, можете ли вы его инвертировать, и если это так, используйте мое решение. – Save

+0

@Save - поиск инверсии также значительно сложнее для правильной реализации. Даже проверка того, существует ли она, требует вычисления определителя, что не является тривиальной проблемой. – IVlad

+0

Существует множество библиотек для вас. И тривиальная реализация как умножения, так и инверсии стоит O (n^3), и это довольно легко сделать (гауссово исключение), поэтому я снова предлагаю сначала проверить и затем решить этот метод. – Save

1

Почему бы не просто диагонализировать матрицу, чтобы сделать умножение дешевым.

редактировать:

Пока матрица не вырождена, вы должны быть в состоянии найти диагональное представление D матрицы А, что А = ПРП^-1, где P состоит из собственных векторов А, и D имеет собственные значения A по диагонали. Получение D^m = D * D^(m-1) является дешевым, поскольку оно вы только умножаете по диагонали (т.е. такое же количество умножений, как размер матрицы)

Получение S (m) = S (m-1) + D^m также дешево, поскольку вы добавляете только диагональные элементы.

Тогда у Вас есть

A^I + A^(г + 1) + A^I + 2 ........ А^п = Р (О^I + D^(I +1) + D^i + 2 ........ D^n) P^-1 = P (S (n) - S (i)) P^-1

Единственная трудная вещь является нахождение P и P^-1

+0

Не каждая матрица диагонализуема. Попробуем матрицу ((a, 1), (0, a)) для любого a. – Michael

4

вы можете использовать тот факт, что сумма к n геометрической серии матриц равна:

S_n = (I-A)^(-1) (I-A^n) 

и, так как вы не начнете сюда м 0, вы можете просто вычислить:

result = S_n - S_i 

где i это ваш начальный индекс.

+0

поблагодарить u! не знаю, что – ishan3243

+1

просто будьте осторожны, потому что у I-A не всегда есть обратный – Save

+0

Это не идеально, потому что для этого требуется вычислить инверсию, которая сложна для больших матриц, и она может даже не существовать. – IVlad

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