TI-Basic holds a special place in my heart - It's a terrible language on a terrible device, but I have fond memories of wasting time in my Algebra II/Trig class programming 2048, so that I could wast time in class doing something more fun than programming in TI-Basic! Recently, I remembered that my TI-84 supports matrices, and figured that it should be possible to get a state-space simulation up and running on it pretty quickly.
(As an aside, that graph is the exact same thing as the matlab code from part four)
I figured that it would be easy, but I didn't expect it to be nearly as easy as it was! Within 8 lines of TI-Basic, I'd put together a program to simulate a closed-loop state-space system:
:ClrAllLists
:
:Input "DT> ",D
:Input "TIME> ",T
:
:For(I,1,T/D)
:((([A]-[B][E])[F])*D)+[F]ā[F]
:IāL2(dim(L2)+1)
:[F](1,1)āL1(dim(L1)+1)
:End
[F]
is the state, and [E]
is the K-matrix (because TI-Basic doesn't let you use letters higher than J for matrices š¢).
Once the program is done running, the timestep and \(x_{1,1}\) values are in L1 and L2, and can be graphed via statplot.
This isn't very useful for a few reasons:
- It's really really really slow. It can take around 30 seconds to simulate a simple system.
- Lists can only contain up to 999 values, so, for example if dt=0.01, you can only simulate for 9.99 seconds!
- It's way less convenient than tools like python or matlab/octave
Despite all that, it was fun to make, and I was surprised that it worked as well as it did! This really shows how generic state space is - it's likely possible to implement a lot more that I did, since most of the techniques used in state-space are just simple matrix operations.