My name is Andrew Korsak and I am a mathematician turned software engineer. I got my B.A. and M.A. degrees in math at the University of Toronto, Ontario, Canada in 1960 and 1961, and then my Ph.D. in math at University of Califirnia at Berkeley in 1966. When I was working at SRI (formerly Stanford Research Institute) in Menlo Park, California, in the early 1970's, I was investigating the effectiveness of an algorithm that simultaneously converges to all complex roots of a complex polynomial. I and some colleagues at SRI published a note to the SIAM review problems and solutions section some time around 1976, in which we challenged the world of mathematicians to see if anyone can prove or disprove that the algorithm always works except for what we suspect is a set of measure zero in the startng root complex n-space.
I never got back to this subject till recently, and I just took a bit of time to implement the algorithm using this very neat interactive language FORTH that I am fond of. I attached my executable file and source code. You can, of course, rewrite it in C, but I am hoping to interest you and your students in this fabulous FORTH that is public domain and includes objects, methods, inheritance, etc.
When you run POLYROOTS.exe, it pauses and expects you to hit any key, upon which it will randomly fudge the 15-th degree complex polynomial coefficients and the trial roots and then converge again. The graphical display of root progression is quite fascinating to watch.
The POLYROOTS.f file can be loaded in from either the FORTH editor WinView.exe or the FORTH interpreter/compiler Win32For.exe. When executing PR (i.e. type pr & hit return), everytime you hit a key other than ESC, it will generate new random coefficients and converge to the roots. To solve you own personal polynomial, go into WinView.exe, click in the menu bar on "File" then "Open File" and get MyPolyRoots.f, then just replace the roots listed in the table after the name my-coefs. Then click in the menu bar on "File" and "Load the active Forth source" or ctrl L, or to save your changes "Save and load ...". You will then be in the Forth interpreter, so type MPR and hit enter. By the way, when you compiled ypur source, it will have built a stand alone application POLYROOTS.EXE which does the random roots stuff.
You can send just PolyRoots.exe and PolyRoots.img all by themselves, but if you want to send just Win32For.exe WinView.exe, and MyPolyRoots.f to anyone to try playing around with the source code, you need to include the wincon.dll and kernel.bin files. Of course, everybody in FIG would just get the entire download of Win32For4.2, but some outsiders might want to just get a "taste" of what FORTH can do for them.
I also added the ability to switch between "instant on-the-fly" root update versus "group update" -- see the variable instant-update, which you can set to true ( <>0 ) or false by the FORTH statements
1 to instant-update
0 to instant-update
When you are in the FORTH interpreter running yPolynomialRoots. It turns out that this fascinating algorithm always works (outside of a set of measure 0 in the complex n-space of initial trial values) regardless of "instant" or "delayed" updating of the trial roots. By delayed, I mean waiting till all n next trial roots are computed before establishing the next set of trial roots from which to preceed iterating.
P.S. I will next work up a version with a dialog box for user setting of polynomial coefficients, and will forward it to you.