In [2]:
from hypore import *

In [3]:
# create state vector with 4 components and derivatives up to order 2
# and make available in global namespace
xx = gen_state(1,2)
xx.T


Out[3]:
$$\left[\begin{matrix}x_{1} & \dot{x}_{1} & \ddot{x}_{1}\end{matrix}\right]$$

In [4]:
A0 = sp.Matrix([
    [1,xdot1]])
A1 = sp.Matrix([
    [1,x1]])
A2 = sp.Matrix([
    [1,0]])
A0,A1,A2 # A(d/dt) = A0 + A1*d/dt + A2*(d/dt)**2


Out[4]:
$$\left ( \left[\begin{matrix}1 & \dot{x}_{1}\end{matrix}\right], \quad \left[\begin{matrix}1 & x_{1}\end{matrix}\right], \quad \left[\begin{matrix}1 & 0\end{matrix}\right]\right )$$

In [5]:
# manually
# HrA1 = Hright(A0,A1,A2,beta=1)
# st.rnd_number_rank(HrA1)

In [6]:
beta_ = is_rightinvertible(A0,A1,A2)
if (beta_ != -1):
    print("A is right invertible")


A is right invertible

In [7]:
beta_


Out[7]:
$$1$$

In [8]:
HrA1 = Hright(A0,A1,A2,beta=beta_)
HrA1inv = sp.simplify(HrA1.inv())
HrA1inv


Out[8]:
$$\left[\begin{matrix}1.0 & 0 & 0 & 0\\- \frac{1}{x_{1}^{2}} \left(1.0 x_{1} + 1.0 \dot{x}_{1}\right) & \frac{1.0}{x_{1}} & \frac{1.0 \dot{x}_{1}}{x_{1}^{2}} & - \frac{1}{x_{1}^{2}} \left(1.0 x_{1} + 1.0 \dot{x}_{1}\right)\\0 & 0 & 0 & 1.0\\- \frac{1.0}{x_{1}} & 0 & \frac{1.0}{x_{1}} & - \frac{1.0}{x_{1}}\end{matrix}\right]$$

In [9]:
IO = sp.Matrix([1,0,0,0])
B_ = HrA1inv*IO
B_


Out[9]:
$$\left[\begin{matrix}1.0\\- \frac{1}{x_{1}^{2}} \left(1.0 x_{1} + 1.0 \dot{x}_{1}\right)\\0\\- \frac{1.0}{x_{1}}\end{matrix}\right]$$

In [10]:
B0 = st.col_select(B_.T, 0,1).T
B1 = st.col_select(B_.T, 2,3).T
# hyper-regular right inverse of A(d/dt):
B0, B1 # B(d/dt) = B0 + d/dt*B1


Out[10]:
$$\left ( \left[\begin{matrix}1.0\\- \frac{1}{x_{1}^{2}} \left(1.0 x_{1} + 1.0 \dot{x}_{1}\right)\end{matrix}\right], \quad \left[\begin{matrix}0\\- \frac{1.0}{x_{1}}\end{matrix}\right]\right )$$