О, а как вычисляли логарифм? Вроде "хорошего" ряда для него нет, чтобы применять к матрицам? А экспоненту с определённой точностью вычисляли, да?
Я пользовался обычным разложением.
, где
где
- вычичтание единиченой матрицы
- прибавление единиченой матрицы
деление - взятие обратное и умножение
умножение на коэффициент - умножение каждого элемента матрицы на коэффициент
возведение в степень n - умножение матрицы саму на себя n раз
Может этот ряд конечно медленно сходится, но для экспериментальных рассчетов его можно применять.
Логарифм и экспоненту я вычислял не с определенной точностью, а с N количеством членов ряда.
Есть. Для диагональной матрицы определяем логарифм как диагональную матрицу, полученную логарифмированием диагональных элементов. Для жордановой клетки выделяем диагональный сомножитель
, а к оставшемуся сомножителю вида
применяем стандартный степенной ряд (матричный) для логарифма. Фактически это будет не ряд, а конечная сумма, т.к. матрица
нильпотентна. Формула получается вполне явной и очень простой (не считая, конечно, того, что само приведение к жордановой форме -- это некоторая проблема). То, что получится, будет действительно логарифмом в том смысле, что экспонента от него даст исходную матрицу.
Это всё, конечно, если исходная матрица невырожденна. Но для вырожденной матрицы логарифма и не существует.
Я не совсем понял разложение в жорданову форму, но, возможно, мой алгоритм делает приблизительно тоже самое