Releases: StefanRickli/anp
ANP v6.1.0: better root finding
This update includes the following changes:
- Enable ANP to cope with constant functions
- Make plot's appearance more deterministic
- Replace 'roots' in 'polyratio.m' with 'uvFactor' from toolbox 'NAClab' by Zhonggang Zeng
This version should be able to handle MIMO systems much better because of the better root finding algorithm 'uvFactor'.
The steps that lead to the incorporation of NAClab are documented in #29 and Mathematics StackExchange.
ANP v6.0.1: Bugfix
This update includes the following changes:
- Fix polyratio.reduce()
- Lift limitation of results TextBox not respecting scaling factors
- Make fix of #23 effective
Don't use 6.0.0 to plot MIMO systems! The determinand calculation most certainly is wrong because of 1).
ANP v6.0.0: MIMO support
Yay, I finally did it :-)
MIMO support is here. Simply supply anp_main with a MIMO transfer function, call it L(s), and it will display the Nyquist plot of det(I + L(s)), suited for the MIMO Nyquist stability criterion, for you.
The following code creates a random 2x2 MIMO transfer function, where every transfer function of the matrix can have degree 2.
anp_main(tf(rss(2,2,2)))
Beware that I perform polynomial divisions by simply cancelling poles and zeros that are (currently) less than 1e-4 apart from each other (after determining them numerically). This is certainly not optimal and could potentially lead to cancellation of legitimate RHP poles and zeros.
Another change is that detours around poles and zeros that lie on the imaginary axis now go to the left of the axis.
This is due to the lesser known properties of MIMO systems that poles could be unaffected by feedback. So we need to count the marginally stable poles and zeros into the D-contour.
Important update 2017-04-28!
Aaaaand the calculation of the determinand is wrong in most cases because of an undetected bug in the fraction reduction code...
Don't use this version to plot MIMO systems!
ANP v5.3.0: New: Unit tests
This release of ANP enables several new keywords that help use the new unit tests:
- 'return_handle' causes the function to return the handles to the GUI and the tf_processor instance, this enables us to close the window programmatically and destroy all used objects
- 'trigger_step' causes the GUI not only to initialize but also do one animation step to test all the involved functions for crashes
The unit tests are designed to detect only crashes at the moment.
ANP v5.2.4: Bugfix
ANP v5.2.3: Bugfix
The following line would crash the D-contour code:
anp_main([0],[1i,-1i])
This bug was introduced at about a766078 when I separated the D-contour code into smaller files and a class and forgot to initialize some of the local variables from the object variables. This is kind of hard to find, because I don't have tests that trigger every IF-statement, yet.
ANP v5.2.2: Bugs fixed, tidier, faster
Bugs fixed:
As Matlab's standard transpose command ' also does the complex conjugate, we got into problems as soon as non-conjugate poles or zeros were specified.
Tidy:
This release saw a large change in terms how the D-contour was handled.
Prior to the change the whole code was almost in the state as it was originally implemented, and messy.
I put the code for the calculation of the D-contour into a class and tried to single out as many functions into methods as possible. This makes the whole thing a lot more readable, but it's still not the end of the documentation story.
Speedup:
- The z-value evaluation saw a huge speedup as I have changed the order of an inner and outer loop. What took 8s before takes now 100ms.
- There have been a lot of small GUI speed improvements which make it way more responsive in zoom/pan events in the sum. We can't do much better, unfortunately, as the main slowdowns come from Matlab's inefficient textbox updates and scatterplots.
ANP with BSD 3-Clause Licence
Finally made a decision on the licence.
ANP v5.2.1: Bugfix: Delay contribution
ANP v5.2.0: Time Delays
Added the capability to specify time delays in tf-objects.
- Either include an exp(-a*s) term in the transfer function expression. I.e. s = tf('s'); G = 1/(s+1)exp(-2s);
- Or alter the tf-object's Delay property, i.e. s = tf('s'); G = 1/(s+1); G.InputDelay = 2;
EDIT: the picture is wrong due to a wrong sign in the delay contribution! Please use v5.2.1!
(Hopefully) fixed the problem with spatial resolution in most cases.