ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Listing JavaScript : calcul des racines n-èmes d'un nombre complexe

  Le programme ci-dessous calcule les arguments des racines n-èmes d'un nombre complexe donné sous la forme a + bi. Le programme reconnaît les fractions (données sous forme n/d), les fonctions mathématiques (sin, cos, tan, sqrt : racine carrée, ...) et s'efforce de donner des coefficients rationnels p/q de l'argument exprimé sous la forme πp/q, par exemple 5π/12, en faisant appel au développement en fraction continue. L'approximation rationnelle trouvée doit être lue avec circonspection : elle ne sera exacte que pour des arguments de a + bi eux-mêmes de la forme πp/q. Le module ρ1/n commun à ces racines où ρ désigne le module de a + bi, n'est pas indiqué car sa valeur n'est rationnelle que dans des cas que nous qualifierons de rarissime...

<SCRIPT LANGUAGE=JavaScript>

var pi,a,b,c,del;x=1;
pi=Math.PI;e=Math.E;
a="";b="";n=6

function racn()
{
a="",b="",n="";
with (Math)
{
a=prompt("a = ",a)
if (a==null) {return} else {a=eval(a)}
b=prompt("b = ",b)
if (b==null) {return} else {b=eval(b)}
n=prompt("n = ",n)
if (n==null) {return} else {n=eval(n)}
ro2=a*a+b*b;ro=sqrt(ro2)
teta=acos(a/ro);
if (b<0) {teta=-teta}
kz=frac(teta/pi);
kracz=frac(teta/n/pi)
m=pow(ro,1/n); // ------ ligne 89
modulo = "2k.pi/"+n.toString();if (n%2==0){ns2=n/2;modulo = "k.pi/"+ns2.toString()}
nm1=n-1;
bu=frac(b);if (abs(bu)==1){bu=""}
alert("|z|="+"rac("+frac(ro2)+")"+"\n"+"Arg(z)="+kz+" de pi [2pi]")
alert("Les racines "+n+"-èmes sont :"+"\n"+"Module:"+frac(m)+entier(m)+"\n"+"Arguments :"+kracz+" de pi + "+modulo+"\n"+"k = 0,1,...,"+nm1)
}
}

function sgn(x)
{
s=(x>0)-(x< 0);
return s
}
function arrondi(x)
{
return sgn(x)*Math.floor(Math.abs(x)*1e12+.5)/1e12
}

function entier(x) // ligne 41
{
x=arrondi(x);
x$=" = "+x.toString();
if(x==Math.floor(x)) {x$=""}
return x$
}
function plus(x)
{
p$="+";if (x<0){p$=""}
return p$
}
function frac(x)
{
with (Math)
{
x=arrondi(x);
s=sgn(x);x=x*s;s$="";if (s<0) {s$="-"}
b0=0;b1=1;a0=1;a1=floor(x);
en=x-floor(x);
if (en<1E-10){f=s$+x.toString(); return f}
d=1;err=1
while(err>1E-6)
{
q=floor(1/en);en=1/en-q;
an=q*a1+a0;bn=q*b1+b0;
asb=an/bn;
err=abs(x - asb);
a0=a1;b0=b1;a1=an;b1=bn;
}
x=arrondi(x*s)
f=s$+an.toString()+"/"+bn.toString()
}
return f
}

</SCRIPT>

JavaScript dans ChronoMath :


© Serge Mehl - www.chronomath.com