Linear Algebra with Sage

<Linear Differential Equations>


Made by SKKU Linear Algebra Lab (2011)



Since @@y(t)=Ay(t)@@ implies @@y(t)=e^{tA}y(0)@@. We only need to find @@y(t)=e^{tA}y(0)@@
for any Linear Differential Equations.

(미분방정식에서 행렬의 대각화 @@e^{tA}=e^{QtDQ^{-1}}=Qe^{tD}Q^{-1}@@를 이용하여 @@e^{tA}y(0)@@를 구한다.)


If @@y'(t)=Ay(t)@@, then @@y(t)=e^{tA}y(0)@@.



Define a matrix @@A@@and a vector @@y_0@@. (행렬 @@A@@와 벡터 @@y_0@@를 생성)

A=matrix([[-2,0,0,0],[0,-2,5,-5],[0,0,3,0],[0,0,0,3]]);

y0=vector([0,2,0,1]);


Find eigenvectors of @@A@@. (@@A@@의 고유벡터를 구한다.)

ev=A.eigenvectors_right(); ev

[(3, [(0, 1, 0, -1),(0, 0, 1, 1)], 2), (-2, [(1, 0, 0, 0),(0, 1, 0, 0)], 2)]


Find a matrix @@Q@@ and its inverse. (행렬 @@A@@를 대각화하는 행렬 @@Q@@를 구하고 그 역행렬을 구한다.)

Q=matrix([ev[0][1][0],ev[0][1][1],ev[1][1][0],ev[1][1][1]]).transpose();

QI=Q.inverse(); 

Q, QI

(

[ 0  0  1  0]  [ 0  0  1 -1]

[ 1  0  0  1]  [ 0  0  1  0]

[ 0  1  0  0]  [ 1  0  0  0]

[-1  1  0  0], [ 0  1 -1  1]

)


Diagonalize matrix @@A@@. (행렬 @@A@@를 대각화한다.)

D=QI*A*Q; D

[ 3  0  0  0]

[ 0  3  0  0]

[ 0  0 -2  0]

[ 0  0  0 -2]


Find @@e^{tD}@@. (@@e^{tD}@@를 구한다.)

var('t');

etD=diagonal_matrix([e^(3*t),e^(3*t),e^(-2*t),e^(-2*t)]);etD

[ e^(3*t)        0        0        0]

[       0  e^(3*t)        0        0]

[       0        0 e^(-2*t)        0]

[       0        0        0 e^(-2*t)]


Find a solution @@y(t)=e^{tA}y(0)@@ . (@@e^{tA}=e^{QtDQ^{-1}}=Qe^{tD}Q^{-1}@@를 이용하여 @@e^{tA}y(0)@@를 구한다.)

yt=Q*etD*QI*y0; yt

(0, 3*e^(-2*t) - e^(3*t), 0, e^(3*t))




Find @@y'(t)@@using differentiation.
(직접 미분하여 @@y'(t)@@를 구한다.)

dyt=diff(yt,t); dyt

(0, -6*e^(-2*t) - 3*e^(3*t), 0, 3*e^(3*t))


Find @@Ay(t)@@. (@@Ay(t)@@를 계산하여 @@y'(t)@@와 비교하자.)

A*yt

(0, -6*e^(-2*t) - 3*e^(3*t), 0, 3*e^(3*t))