I've posted the link to this paper before, but this describes a way to model both linear and non-linear aspects of a circuit:

http://ccrma.stanford.edu/~dtyeh/papers ... ortion.pdfMr. Yeh focused this paper on distortion pedals, where it's easy to determine which elements of the circuit are linear and which are non-linear. In more complex filter, amp, and oscillator circuits, it becomes harder to determine which parts are which.

In the case of the Moog ladder filter, there is actual overload protection built into the ladder section, so the filter distorts in a predictable manner. Finding and isolating the transfer function for that part becomes the task, then, along with parameterizing it. The TB303 filter has a unique set up, in that it has a self-oscillation protection circuit as part of its feedback section, which prevents it from (surprise!) self-oscillating. What it does instead, is soaks up the extra power, resulting in a distinctive distortion which is the love of dance music and acid composers everywhere. This can be effectively emulated by placing a wave shaper with the appropriate transfer function within the filter's feedback loop. The filter in one of FLStudio's synths actually exposes this waveshaper with further parameterization, as opposed to Olga where the only control you get is how hard you want to drive the next section from the previous.

Clearly, Schwa has put a lot of work in making his non-linear functions sound really good. I don't know if he's implementing them as strategically-placed waveshapers, or if he's actually figured out how to numerically solve for a system of linear and non-linear differential equation, but if it's the latter, he might have a shot at the Fields Medal! (Linear and non-linear diff eqs together in the same system of equations is one of the most difficult things that can be done in mathematics, according to one of my instructors.) Of course, I suppose there are other methods of combining linear and non-linear elements. Non-linearities in analog circuits are typically caused by hysteresis effects, which are memory effects that certain components have. Using memoryless waveshapers to emulate those transfer functions is at best an emulation, rather than an actual modeling of the effect.

I've been playing with SAGE, which is an open-source mathematics package that ties together many other math packages together under a nice Python interface. With it, I've been playing with sets of non-linear equations, and sets of differential equations. I don't know how to actually do such math myself, but if I can figure out what to tell the computer, I'll just let it do the hard work and hand me a set of numeric functions I can implement.

That's the theory, anyway. (It actually has built-in functions for doing Z transforms and Laplace transforms on sets. which is really handy.)

Now I just need to figure out what to tell it.