function getNumber(st,def) {var tempo=0;tempo=parseFloat(prompt(st,def)+" ");if (isNaN(tempo)) {tempo=0};return(tempo);}; function solve() { var n=3;n=getNumber("Please Enter Degree of Polynomial",3);n=Math.floor(n);if (n<1) {n=1}; var r=new Array(n); var i=new Array(n); var a=0; for (a=n;a>0;a--) {r[a]=getNumber("Enter real coeff of x^"+a,1);i[a]=getNumber("Enter imag coeff of x^"+a,0);}; r[0]=getNumber("Enter real constant (RHS=0)",9);i[0]=getNumber("Enter imag constant",0); c="Solving: ";for (a=n;a>0;a--) {c+="("+r[a];if (i[a]>=0) {c+=" + "}; c+=i[a]+"i)"+"x^"+a+"+";};c+="("+r[0];if (i[0]>=0) {c+=" + "};c+=i[0]+"i)=0";alert(c); var x=1;var y=10;var accuracy=0.001;//if no convergence, try different values var flag=false;var tries=0;var a=0;var q=0; var x1=1;var y1=1;var c=" ";var u=0;var q=0; var s=0;var t=0;var s1=0;var t1=0; while ((tries<100) && (n>0)) { x1=1; y1=1;tries=0; while ((tries<100) && (Math.abs(x1)+Math.abs(y1)>accuracy)) { //polynomial evaluation s=0;t=0; for (a=n;a>0;a--) {s+=r[a];t+=i[a];u=x*s-y*t; t=y*s+t*x;s=u; };s+=r[0];t+=i[0]; s1=0;t1=0;a=n;tries++; //calculate rate of change while (a>1) {s1+=r[a]*a;t1+=i[a]*a;u=x*s1-y*t1; t1=y*s1+t1*x;s1=u;a--; };s1+=r[1];t1+=i[1]; q=s1*s1+t1*t1;if (Math.abs(q)<0.000001) {q=0.000001}; x1=(s*s1+t*t1)/q;y1=(-s*t1+t*s1)/q; x-=x1;y-=y1;}; // division if (tries<100) {for (a=n-1;a>0;a--) {r[a]+=x*r[a+1]-y*i[a+1]; i[a]+=y*r[a+1]+x*i[a+1];};for (a=0;a=0) {c+="+ "};c+=y+" i "; alert(c);};else {c="Could not find the "+n; if (flag) {c+=" remaining "};alert(c+' roots.');};}; alert('End of Program.'); }