LINUX.ORG.RU
ФорумTalks

maxima и обращение матриц


0

1

Попробуйте с помощью maxima посчитать обратную матрицу к

                      2
sqrt(2 B + 2)  -sqrt(B  - 1) + B + 1
                      2               
sqrt(2 B + 2)   sqrt(B  - 1) + B + 1

Результат вас приятно удивит) maxima 5.33

Ни ratsimp, ни trigsimp (да, в ответе вылезают синусы/косинусы) не улучшают ситуацию

Моя же конечная задача в взятии экспоненты от матрицы

-1     k+1
-(k+1) k^2+2k

, B = (k^2+2k-1)/2

Впрочем, если ручками повозиться с заменами переменных и удачно подгадать, то можно привести к виду, который maxima сумеет обратить.

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 5)

матрица приводится к треугольному виду, умножив слева на [latex]\begin{bmatrix}1 & 0 \\ -1 & 1\end{bmatrix}[/latex]. А обращение треугольных матриц проблем создать не должно.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Обратить то я сам обратил. Но, по-идее, компьютер в виде maxima, должен был упростить этот процесс.

ну я имел в виду, что ты в треугольном виде можешь ему скормить.

У меня на ноуте максимы нет просто, чтоб глянуть в чем проблема.

dikiy ★★☆☆☆
()

invert by adjoint

Можешь так посчитать обратную матрицу:

(%i1) display2d: false$
(%i2) m: matrix([sqrt(2*B+2), -sqrt(B^2-1)+B+1], [sqrt(2*B+2), sqrt(B^2-1)+B+1])$
(%i3) m_inv: ratsimp(adjoint(m)/determinant(m))$
(%i4) ratsimp(m.m_inv);
(%o4) matrix([1,0],[0,1])
(%i5) display2d: false$
(%i6) m: matrix([sqrt(2*B+2), -sqrt(B^2-1)+B+1], [sqrt(2*B+2), sqrt(B^2-1)+B+1])$
(%i7) m_inv: ratsimp(adjoint(m)/determinant(m));
(%o7) matrix([(sqrt(B^2-1)+B+1)/(2*sqrt(2*B+2)*sqrt(B^2-1)),
              (sqrt(B^2-1)-B-1)/(2*sqrt(2*B+2)*sqrt(B^2-1))],
             [-1/(2*sqrt(B^2-1)),1/(2*sqrt(B^2-1))])
(%i8) ratsimp(m.m_inv);
(%o8) matrix([1,0],[0,1])

После этого коммита maxima использует более простой метод для обращения маленьких матриц (n<=8). m^^(-1); должно работать.

vital303
()

Моя же конечная задача в взятии экспоненты от матрицы

(%i1) display2d: false$
(%i2) m: matrix([-1, k+1], [-(k+1), k^2+2*k]);
(%o2) matrix([-1,k+1],[-k-1,k^2+2*k])
(%i3) ratsimp(ratsubst(B, (k^2+2*k-1)/2, matrixexp(m)));
Proviso: assuming (k+1)*(k^2+2*k-3) # 0
(%o3) matrix([-%e^(-k*sqrt(2*B-2)/2-sqrt(2*B-2)/2)
               *(sqrt(2*B-2)*((k+1)*%e^(k*sqrt(2*B-2)+sqrt(2*B-2)+B)
                             +(-k-1)*%e^B)
                +(2-2*B)*%e^(k*sqrt(2*B-2)+sqrt(2*B-2)+B)+(2-2*B)*%e^B)
               /(4*B-4),
              %e^(-k*sqrt(2*B-2)/2-sqrt(2*B-2)/2)
               *(%e^(k*sqrt(2*B-2)+sqrt(2*B-2)+B)-%e^B)
               /sqrt(2*B-2)],
             [-%e^(-k*sqrt(2*B-2)/2-sqrt(2*B-2)/2)
               *(%e^(k*sqrt(2*B-2)+sqrt(2*B-2)+B)-%e^B)
               /sqrt(2*B-2),
              %e^(-k*sqrt(2*B-2)/2-sqrt(2*B-2)/2)
               *(sqrt(2*B-2)*((k+1)*%e^(k*sqrt(2*B-2)+sqrt(2*B-2)+B)
                             +(-k-1)*%e^B)
                +(2*B-2)*%e^(k*sqrt(2*B-2)+sqrt(2*B-2)+B)+(2*B-2)*%e^B)
               /(4*B-4)])
vital303
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.