Skip to content
Ilhan Polat edited this page Jul 22, 2015 · 5 revisions

harold Wiki pages

Introduction

harold is a control systems library written in pure Python3. The purpose of this library is to disclose the development of control algorithms in an open-source (MIT licensed) fashion. harold fully supports the mantra of reproducible research and thus aims to provide the means of accessible and transparent computational development tools.


For control engineers and academicians, the day-to-day requirements of an individual can be classified roughly as number crunching and data visualizations. Given the ridiculous discrepancy between the academia and the industry, both sides require certain kind of special tools for their needs.

Especially, the very-often used calculations such as model representation conversion from Transfer Functions to State Space representations and vice versa, zero and pole locations, damping, stability margin information and so on are either built-in or used with closed code in the commercial software that dominate the control field, say matlab, scilab, mathematica etc.

Another source for these algorithms is the celebrated SLICOT collection that holds the FORTRAN implementations of the essentials of a control system library. Some commercial software such as matlab also use this library via wrapping the FORTRAN-compiled code inside their own system. However, regardless of how outstanding this library is, it has two fundamental problems.

First one is an inherent problem and partially solvable. It is written in FORTRAN and uses FORTRAN 77 flavor. This is a major drawback for the contemporary users as it is quite difficult to decipher its syntax let alone creating something new. Moreover, it is highly optimized for performance. Thus, even the simplest operations are put into speed-up form that is almost always far more cumbersome than its naive way of implementation. Therefore, it practically becomes inaccessible again. An alternative route to fix this problem is to wrap the whole library in a high level format (see for example: Slycot that partially accomplishes this). But involves the user-intervention with compilers and many other things that should not be expected from a regular control toolbox user. We should note that actually that's what the Scientific stack of Python; namely SciPy and NumPy precisely do this around the well-known BLAS and LAPACK libraries but manage to automate everything without any additional software requirements on the user.

Second problem is the license of SLICOT. This type of licensing is fundamentally incompatible with reproducible research and also cannot be used in a commercial context. This is completely avoided in MIT-licensed tools.

Long story short, The fundamental tools of our supposedly-mathematically-driven field is virtually impossible to modify or replace. Changing this fact is the goal of harold.

A secondary objective is to get rid of aesthetically ugly and clunky user interfaces out of the way and let users choose their favorite way of working ranging from the über-nerdy emacs and vim terminal lovers to visually-satisfied ones via the amazing (and again open-source) Jupyter/IPython framework.

Contribute!

harold appreciates all kinds of contributions. The development code is located on this Github repository. The development tries to follow the extremely basic guidelines:

  • The tool should be modular such that others can replace a part of the algorithm with their favorite.

  • The tool should favor the user not the code. If something is amenable to automation it shouldn't ask it from the user (under the common definition of reason).

  • The tool should be as clean as possible hopefully free from temporary computations in redundant variables ala matlab coding style.

  • The tool should be documented properly at least at the conceptual level and preferrably compatible with Sphinx format.

Contact

Currently, harold is developed by Ilhan Polat. You can use

  • drop a line in the Gitter chat room : Join the chat at https://gitter.im/ilayn/harold

for suggestions/corrections/questions.

Clone this wiki locally