In [1]:
from hypore import *
In [2]:
# create state vector with 4 components and derivatives up to order 2
# and make available in global namespace
xx = gen_state(2,2)
xx.T
Out[2]:
In [3]:
# A_(d/dt) = A0_ + A1_*d/dt + A2_*(d/dt)**2
A0_ = sp.Matrix([
[1],
[x2]])
A1_ = sp.Matrix([
[1],
[x2]])
A2_ = sp.Matrix([
[1],
[0]])
# convert to A(d/dt) = A0 + (d/dt)*A1 + (d/dt)**2*A2
A0, A1, A2 = left(A0_, A1_, A2_)
A0, A1, A2 # A(d/dt) = A0 + d/dt*A1 + (d/dt)**2*A2
Out[3]:
In [4]:
# manually
# st.rnd_number_rank(Hleft(A0,A1,A2,beta=0)) == st.rnd_number_rank(Hleft_aug(A0,A1,A2,beta=0))
In [5]:
# st.rnd_number_rank(Hleft(A0,A1,A2,beta=1)) == st.rnd_number_rank(Hleft_aug(A0,A1,A2,beta=1))
In [6]:
beta_ = is_lefttinvertible(A0,A1,A2)
if (beta_ != -1):
print("A is left invertible")
In [7]:
beta_
Out[7]:
In [8]:
HlA1 = Hleft(A0,A1,A2,beta=beta_)
HlA1
Out[8]:
In [9]:
st.rnd_number_rank(HlA1)
Out[9]:
In [10]:
HlA1inv = sp.simplify(HlA1.inv())
HlA1inv
Out[10]:
In [11]:
IO = sp.Matrix([1,0,0,0]).T
B_ = IO*HlA1inv
B_
Out[11]:
In [12]:
B0 = st.col_select(B_, 0,1)
B1 = st.col_select(B_, 2,3)
# hyper-regular left inverse of A(d/dt):
B0, B1 # B(d/dt) = B0 + B1*d/dt
Out[12]: