onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: resoudre les equations du troisieme degres Jeu 1 Oct 2009 - 18:17 | |
| Permet de resoudre les equations de la forme ax^3 + bx^2 + cx + d = 0 Il y a deux fonctions a mettre dans les scripts. Le code est a mettre dans draw, comme pour le second degres. uv - Code:
-
r = sqrt(D) z = -q/2 + argument0*r return sign(z)*power(abs(z),1/3)
arrondi - Code:
-
return sign(argument0)*floor(abs(argument0)*power(10,8)+1/2)/power(10,8)
et le code a mettre dans draw - Code:
-
if !variable_local_exists('create') { a = get_integer('a = ',0) b = get_integer('b = ',0) c = get_integer('c = ',0) d = get_integer('d = ',0)
x_= 0
for(k=0;k<=2;k+=1) x_[k]= 0
if (a == 0) { return -1 ; error=1 } else error=0
vt = -b/3/a mvt = -vt
p = c/a - b*b/(3*a*a)
q = 2*b*b*b/(27*a*a*a) + d/a - b*c/(3*a*a)
if (abs(p) < power(10,-14)) p = 0 if (abs(q) < power(10,-14)) q = 0
D = q*q/4 + p*p*p/27
if (abs(D) < power(10,-14)) del = 0
if (D<=0) { if (p!=0) { kos = -q/(2*sqrt(-p*p*p/27)) r = sqrt(-p/3) } else { kos = 0 r = 0 } if (abs(abs(kos)-1) < power(10,-14)) { alpha = -pi*(kos-1)/2 } else { alpha = arccos(kos) } for(k=0 ; k<=2 ; k+=1) { xk = 2*r*cos((alpha+2*k*pi)/3) + vt x_[k]= arrondi(xk) } } else { xuni = arrondi(uv(1) + uv(-1) + vt) }
create = 1 }
if error exit if !keyboard_check(vk_space) begin draw_text(8 ,8+16*0 ,"a : " + string(a) ) draw_text(8 ,8+16*1 ,"b : " + string(b) ) draw_text(8 ,8+16*2 ,"c : " + string(c) ) draw_text(8 ,8+16*3 ,"d : " + string(d) )
draw_text(8 ,8+16*5 ,"p : " + string(p) ) draw_text(8 ,8+16*6 ,"q : " + string(q) ) draw_text(8 ,8+16*7 ,"D : " + string(D) )
if D<=0 { draw_text(8 ,8+16*9 ,"3 solutions") for(k=0 ; k<=2 ; k+=1) draw_text(8 ,8+16*(10+k) ,"x"+string(k+1)+" : " + string(x_[k]) ) } else { draw_text(8 ,8+16*9 ,"1 solutions") draw_text(8 ,8+16*10 ,"x : " + string(xuni) ) } end
if !keyboard_check(vk_space) exit
draw_line(0,240,640,240) draw_line(320,0,320,480)
for(i=-16 ; i<=16 ; i+=0.05) { j = i+0.05 draw_line(i*20 +320, -(a*i*i*i + b*i*i + c*i + d) + 240 , j*20 +320 , -(a*j*j*j + b*j*j + c*j + d) + 240 ) draw_line(i*20*10*2,240-4,i*20*10*2,240+4) draw_line(i*20*10,240-2,i*20*10,240+2) }
Voila c'est assez compliqué mais si vous faites une recherche sur le web la methode de resolution est assez bien expliquée sur certains sites. Meme le 4eme degres ^^ pour les suicidaires. |
|