FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
AX^3 + BX^2 + CX + D = 0 Emptypar Marc Aujourd'hui à 14:48

» Gestion d'un système client-serveur.
AX^3 + BX^2 + CX + D = 0 Emptypar Klaus Aujourd'hui à 13:18

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
AX^3 + BX^2 + CX + D = 0 Emptypar Froggy One Aujourd'hui à 11:16

» @Jack
AX^3 + BX^2 + CX + D = 0 Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
AX^3 + BX^2 + CX + D = 0 Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
AX^3 + BX^2 + CX + D = 0 Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
AX^3 + BX^2 + CX + D = 0 Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
AX^3 + BX^2 + CX + D = 0 Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
AX^3 + BX^2 + CX + D = 0 Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
AX^3 + BX^2 + CX + D = 0 Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
AX^3 + BX^2 + CX + D = 0 Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
AX^3 + BX^2 + CX + D = 0 Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
AX^3 + BX^2 + CX + D = 0 Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
AX^3 + BX^2 + CX + D = 0 Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
AX^3 + BX^2 + CX + D = 0 Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-21%
Le deal à ne pas rater :
LEGO® Icons 10329 Les Plantes Miniatures, Collection Botanique
39.59 € 49.99 €
Voir le deal

 

 AX^3 + BX^2 + CX + D = 0

Aller en bas 
AuteurMessage
papydall

papydall


Nombre de messages : 6998
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

AX^3 + BX^2 + CX + D = 0 Empty
MessageSujet: AX^3 + BX^2 + CX + D = 0   AX^3 + BX^2 + CX + D = 0 EmptySam 16 Mar 2013 - 15:38

Après l’équation du second degré, voici celle du troisième.

Soit l’équation du 3ème degré suivante :
ax3 + bx2 + cx + d = 0 ( forme 1)

D’une manière générale, on ne sait pas comment résoudre directement une telle équation.
Mais on sait comment résoudre une équation, de la forme :
X3 + pX + q = 0 ( forme 2)

Or, toute équation du 3ème degré de la forme 1, peut être mise sous la forme 2.
On résout cette dernière et on remonte pour avoir la solution de la forme 1

Un peu de théorie
La méthode de Cardan
L’astuce pour résoudre une équation de la forme 1 consiste à faire sauter le terme du second degré en faisant un changement de variable :

Posons X = x + b/(3*a) c.a.d x = X-b/(3*a)
En remplaçant x dans la forme 1 par sa nouvelle valeur et en développant puis en divisant tous les termes par a (a est différent de zéro), on obtient :
X3 + pX + q = 0
avec : p = (c/a) – (b*b/(3*a*a)) et q = 2*b*b*b/(27*a*a*a) – (b*c/(3*a*a)) + d/a

Ensuite on calcule :
Delta = q*q/4 + p*p*p/27

Si Delta > 0 on a une racine réelle et 2 racines complexes conjuguées
Si delta = 0 on a 3 racines réelles ( soit une racine réelle simple et une racine réelle double, soir une seule racine réelle triple).
Si delta < 0 on a 3 racines réelles distinctes.

Les formules sont assez compliquées : des racines cubiques qui font intervenir des racines carrées, des nombres complexes, des fonctions trigonométriques et trigonométriques inverses.
Il est inutile de développer tout ça ici.

Le programme ci-après permet de résoudre toute équation du 3ème degré.
Il vous demande d’entrer les coefficients a,b,c,d (tous réels).
Le coefficient a doit être différent de 0.
Le programme contrôle ces entrées et refuse toute valeur incorrecte.
La solution s’affiche immédiatement.
Vous pouvez alors, soit faire un autre calcul, soit quitter.

Code:
' ******************************************************************************

'    3DEGRE.BAS par Papydall

' Résolution de l'équation du troisième dégré ax^3 + bx^2 + cx + d = 0

' ******************************************************************************

' D'après le théorème fondamental de l'algèbre des polynômes : tout polynôme de
' dégré N admet exactement N solutions (on dit aussi racines ou zéros). Ces
' racines sont réelles ou complexes, simples ou multiples et si elles sont
' complexes, elles sont conjuguées deux-à-deux.
' Ce programme permet de résoudre un polynôme du troisième dégré

' L'équation du troisième dégré admet donc trois racines : soit réelles simples
' ou multiples , soit complexes conjuguées.

' RAPPEL : un nombre complexe s'écrit sous forme z = x + i*y , avec x et y réels
' et i nombre imaginaire dont le carré vaut -1 (i² = -1).
' x s'appelle partie réelle du nombre complexe z ; y s'appelle partie imaginaire
' du nombre complexe z.
' Si y = 0 , le nombre est réel. Si x = 0 , le nombre est imaginaire pur.
' Deux nombres complexes conjugués sont deux nombres complexes dont leurs
' parties imaginaires sont de signes contraires.

' ******************************************************************************
Run()
end
' ******************************************************************************
SUB Run()
    label suite    : ' sous-programme pour faire un autre calcul
    label quit    : ' sous-programme pour quitter l'application
    dim a,b,c,d    : ' les coefficients de l'équation
    dim x1,x2,x3  : ' les racines réelles
    dim re,im      : ' Les racines complexes (partie réelle et partie imaginaire)
    dim complexe%  : ' flag pour indiquer si les racines sont complexes (=1) ou réelles (=0)
    color 0,0,0,0  : font_color 0,0,255,0 : font_size 0,12 : font_bold 0
    width 0,width(0)*2
    caption 0,"Résolution de l'équation du troisième dégré : AX^3 + BX^2 + CX + D = 0"
    button 1 : top 1,250 : left 1,50  : width 1, 100 : on_click 1,suite
    button 2 : top 2,250 : left 2,300 : width 2, 80  : on_click 2,quit
    caption 1,"Autre calcul" : caption 2,"Quitter"
    Demarrer()
END_SUB
' ******************************************************************************
SUB demarrer()
    cls  : hide 1 : hide 2
    saisie() : resol_3degre(a,b,c,d) : Format() : Affiche()
    show 1 : show 2
END_SUB
' ******************************************************************************
' Procédure de saisie des coefficients a,b,c,d
SUB saisie()
    DIM_LOCAL r$
    ' Saisie de coefficient A
    repeat      : ' Cette boucle assure que le coefficient A soit différent de 0
        repeat  : ' Cette boucle assure que le coefficient soit numérique
              r$ = message_input$("Entrer le paramètre A (différent de zéro)","A = ","")
        until numeric(r$) = 1
    until val(r$) <> 0
    A = val(r$)
    ' Saisie du coefficient B
    repeat
      r$ = message_input$("Entrer le paramètre B","B = ","")
    until numeric(r$) = 1
    B = val(r$)
    ' Saisie du coefficient C
    repeat
      r$ = message_input$("Entrer le paramètre C","C = ","")
    until numeric(r$) = 1
    c = val(r$)
    ' Saisie du coefficient D
    repeat
      r$ = message_input$("Entrer le paramètre D","D = ","")
    until numeric(r$) = 1
    d = val(r$)
END_SUB
' ******************************************************************************
' Procédure de calcul de la solution
SUB resol_3degre(AX3,BX2,CX,D)
    DIM_LOCAL p,q,delta,radic1,radic2,phi,pi
    pi = 4*atn(1) : complexe% = 0
    p = (c/a)-(power(b,2)/(3*power(a,2)))
    q = (d/a)-(b*c)/(3*(power(a,2)))+(2*(power(b,3))/(27*power(a,3)))
    delta = power(q,2)/4 + power(p,3)/27
    if delta > 0  : ' Une racine réelle et 2 racines complexes conjuguées
      complexe% = 1
      radic1 = (0-q/2)+ sqr(delta) : radic2 = (0-q/2)- sqr(delta)
      x1 = sgn(radic1)*power((abs(radic1)),1/3)+ sgn(radic2)*power(abs(radic2),1/3)
      x1 = x1 - b/(3*a)
      re = 0-0.5*sgn(radic1)*(power(abs(radic1),1/3)+ sgn(radic2)*power(abs(radic2),1/3))
      re = re-b/(3*a)
      im = 0.5*sqr(3)*sgn(radic1)*(power(abs(radic1),1/3)- sgn(radic2)*power(abs(radic2),1/3))
      exit_sub : ' les calculs sont faits, on quitte la procédure
    end_if
    if delta = 0  : ' Trois racines réelles
      if  p = 0  : ' une racine réelle triple
          x1 = sgn(d/a)* power(abs(d/a),1/3) : x2 = x1 : x3 = x1
      else  : ' une racine simple et une racine double
          x1 = 3*q/p : x1 = x1 - b/(3*a)
          x2 = 0-3*q/(2*p) : x2 = x2- b/(3*a)
          x3 = x2
      end_if
      exit_sub : ' les calculs sont faits, on quitte la procédure
    end_if
    ' ici delta est forcément < 0 et l'équation admet 3 racines réelles distinctes
    phi = acos(((3*q)/(2*p))*sqr(0-3/p))
    x1 = 2*sqr(0-p/3)*cos(phi/3) : x1 = x1 - b/(3*a)
    x2 = 2*sqr(0-p/3)*cos((phi+2*pi)/3) : x2 = x2 - b/(3*a)
    x3 = 2*sqr(0-p/3)*cos((phi+4*pi)/3) : x3 = x3 - b/(3*a)

END_SUB
' ******************************************************************************
' Procédure de formatage de la solution
SUB Format()
    dim_local a$,b$,c$,d$
    dim_local epsilon : epsilon = power(10,0-10)
    if a = 1  then a$ = "x^3 " : else : a$ = str$(a)+"x^3 " : ' Pour ne pas afficher 1x^3
    if a = -1 then a$ = "-x^3" : ' pour ne pas afficher -1x^3
    if b = 1  then b$ = "+x^2 " : else : b$ = str$(b)+"x^2 " : ' Pour ne pas afficher 1x^2
    if b = -1 then b$ = "-x^2 " : ' pour ne pas afficher -1x^2
    if b > 1  then b$ = "+" + str$(b)+"x^2 "
    if b = 0  then b$ = ""
    if c = 1  then c$ = "+x " : else : c$ = str$(c)+"x " : ' Pour ne pas afficher 1x
    if c = -1 then c$ = "-x " : ' pour ne pas afficher -1x
    if c > 1  then c$ = "+" + str$(c)+"x "
    if c = 0  then c$ = ""
    if d = 0  then d$ = " = 0" : else : d$ = str$(d)+" = 0 :"
    if d > 0  then d$ = "+" + str$(d)+" = 0"

    x1 = x1 + sgn(x1)*epsilon : x1 = int(x1*100000+0.5)/100000
    x2 = x2 + sgn(x2)*epsilon : x2 = int(x2*100000+0.5)/100000
    x3 = x3 + sgn(x3)*epsilon : x3 = int(x3*100000+0.5)/100000

    re = re + sgn(re)*epsilon : re = int(re*100000+0.5)/100000
    im = im + sgn(im)*epsilon : im = int(im*100000+0.5)/100000
    print_locate 50,20 : print "La solution de : "+a$+b$+c$+d$
END_SUB
' ******************************************************************************
' Procédure d'affichage de la solution
SUB Affiche()
    print_locate 50,20  : ' on positionne le curseur pour l'affichage
    if complexe% = 0  : ' Les racines sont réelles
      print_locate 50,50
      if x1 = x2    : ' une racine triple
          print "Une racine triple"
          print_locate 50,80 : print "X1 = X2 = X3 = ";x1
      else
          if x2 = x3    : ' une racine double
            print "Une racine réelle simple et une racine réelle double :"
            print_locate 50,80  : print "X1 = "; x1
            print_locate 50,100 : print "X2 = X3 = " ; x2
          else : ' les trois racines sont réelles et distinctes
            print "Trois racines réelles distinctes :"
            print_locate 50,80  : print "X1 = " ; x1
            print_locate 50,100 : print "X2 = " ; x2
            print_locate 50,120 : print "X3 = " ; x3
          end_if
      end_if
    else  : ' une racine réelle et deux racines complexes conjuguées
      print_locate 50,50  : print "une racine réelle et deux racines complexes conjuguées"
      print_locate 50,80  : print "X1 = ";x1
      print_locate 50,100 : print "X2 = "; re;" + ";ABS(im); "i"
      print_locate 50,120 : print "X3 = "; re;" -  ";abs(im); "i"
    end_if
END_SUB

' ******************************************************************************
' sous-programme pour un autre calcul
suite:
  demarrer()
return
' ******************************************************************************
' sous-programme pour quitter l'application
quit:
  if message_confirmation_yes_no("Vous voulez vraiment quitter ?") = 1 then terminate
return
' ************************** FIN ***********************************************
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
 
AX^3 + BX^2 + CX + D = 0
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: