2.2 KiB
routh_table
This repo is belong to Control System class contains with Automated Routh Table Calculator based on Python. This code 100% original made by my hand :), please leave some notes if you're going to use it. Thanks!
Libraries
Libraries that used in this program is numpy
and pandas
. numpy
works by define and perform array while pandas
is the final form after numpy.array
to simplify the presentation. They imported by write
import numpy as np
import pandas as pd
RouthStability Class
This class contains lots of procedures to simplify our Routh Stability Table Generator process.
def __init__(self, den):
self.den = np.array([float(item) for item in den.split()])
self.deg = len(self.den)
The constructor __init__
takes string of coefficiens from polynomial, extract the number, and load into class variable. It also define self.deg
variable to save array's length, reducing number of calling len()
function
def set_k(self, k):
self.den = np.append(self.den, float(k))
self.deg += 1
This function only takes one number from user and append it to self.den
which defined as gain (constant). Also self.deg
will increase by one
def calc_routh(self):
height = (self.deg+1)//2
arr = np.zeros((height + 2,height))
for index in range(self.deg):
if index % 2 == 0:
arr[0][index//2] = self.den[index]
else:
arr[1][(index-1)//2] = self.den[index]
for i in range(2, height+2):
for j in range(height-1):
arr[i][j] = (arr[i-1][0]*arr[i-2][j+1] - arr[i-2][0]*arr[i-1][j+1])//2
arr[i][j] += 0
self.df = pd.DataFrame(arr)
self.show_tab()
if self.is_stable() == True:
print("SYSTEM IS STABLE")
else:
print("SYSTEM IS UNSTABLE")
calc_routh(self)
as the core process of this class contains initialization and process about Routh Stability Process. Firstly, it define an empty zero (basically it filled with zeros) and iteratively being inserted by self.den
(refering to Routh Table principle). After that, each cell will be updated by calculating Routh Table formula
arr_{i,j} = \frac{arr_{i-1][0]*arr[i-2][j+1] - arr[i-2][0]*arr[i-1][j+1]}{arr_{i-1][0]}