AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez
 

 resoudre les equations du troisieme degres

Aller en bas 
AuteurMessage
onilink_
Modérateur
onilink_

Messages : 9098
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

resoudre les equations du troisieme degres Empty
MessageSujet: resoudre les equations du troisieme degres   resoudre les equations du troisieme degres EmptyJeu 1 Oct 2009 - 16: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.
Revenir en haut Aller en bas
 
resoudre les equations du troisieme degres
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: