HP Forums
Script to find the root locus - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: Script to find the root locus (/thread-11863.html)



Script to find the root locus - rushfan - 11-27-2018 04:56 PM

The root locus part of the Control Systems program in this forum does not work.
I wrote a little script that can generate the root locus of a system, with instructions on how to plot.
With thanks to members @ThomasA and @Tim Wessman for suggestions on how to properly plot it.
Here is the code:

Code:

// This is a script to find the root locus of system
// Arguments are num, den coefficients of polynomial
// Stepp is the size of the change in K
// Endd is the max value that K takes
// Example:  rls([1,3],[1,7,14,8,0],0.01,10)
// To use this program:
// In the Statistics 2var, symbolic
// Set independent varibale to L0
// Set dependent variable to L1
// Plot

EXPORT rls(num, den, stepp, endd)
BEGIN
LOCAL begg;
LOCAL xv:={};
LOCAL yv:={};
begg:=0.0001;
FOR K FROM begg TO endd STEP stepp DO
xv := concat(xv, RE(POLYROOT(poly2symb(den)+K*poly2symb(num))));
yv := concat(yv, IM(POLYROOT(poly2symb(den)+K*poly2symb(num))));
END;
L0:= xv;
L1 := yv;
END;



RE: Script to find the root locus - parisse - 11-29-2018 08:41 AM

Inside CAS, point(proot(polynomial)) will display the list of roots of a polynomial. For several polynomials you can create an empty list l and run l:=concat(l,(proot(..)) inside the loop and run point(l) after the loop.


RE: Script to find the root locus - rushfan - 12-02-2018 03:59 PM

(11-29-2018 08:41 AM)parisse Wrote:  Inside CAS, point(proot(polynomial)) will display the list of roots of a polynomial. For several polynomials you can create an empty list l and run l:=concat(l,(proot(..)) inside the loop and run point(l) after the loop.

That works better, thanks!

Code:

// This is a script to plot the root locus of a system
// Arguments are num, den coefficients of polynomial
// Stepp is the size of the change in K. If the script runs too slow, increase the stepp size. 
// Endd is the max value that K takes, if it is too slow to plot, decrease the max value. 
// Example:  rlscas([1,3],[1,7,14,8,0],0.01,10)
#cas
rlscas(num,den,stepp,endd):=
BEGIN
LOCAL K, begg, l:={};
begg:=0.001;
FOR K FROM begg TO endd STEP stepp DO
l := concat(l, proot(poly2symb(den)+K*poly2symb(num)));
END;
point(l);
END;
#end



RE: Script to find the root locus - chandlerkc - 03-30-2019 03:27 PM

It surprisingly works on the PC emulator but not on the physical calculator!!

Error: Execute evaluator not recursive


RE: Script to find the root locus - chandlerkc - 03-31-2019 07:56 PM

Take a look what I've got on the calc:

[Image: IMG-5685.jpg]

But in the emulator It runs nicely, I don't know why.