Page 1 sur 1

Dériver, Intégrer et évaluer un polynome ...

Publié : sam. 16/avr./2005 3:30
par Guimauve
Bonjour à tous.

J'ai codé ces quelques procedures pour faire de la dérivation, de l'intégration et l'évaluation de polynômes de degré 10 au maximum. En gros, je manipule seulement les coefficients du polynôme dérivé ou intégré. C'est fonctionnel mais encore en développement.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Fonction Maths - Polynômes
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve 
; Date : 15 avril 2005
; Mise à jour : 15 avril 2005
; Codé avec PureBasic V3.93
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Dériver un polynôme de degré 10
; Intégrer un polynôme de degré 9 
; Évaluer d'un polynôme de degré 10 à la valeur de X spécifié.
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Structure Polynome
   
   ax10.f
   bx9.f
   cx8.f
   dx7.f
   ex6.f
   fx5.f
   gx4.f
   hx3.f
   ix2.f
   jx1.f
   k.f
   
EndStructure

Procedure CreerPolynome(ax10.f, bx9.f, cx8.f, dx7.f, ex6.f, fx5.f, gx4.f, hx3.f, ix2.f, jx1.f, k.f)
   
   *un_polynome.Polynome = AllocateMemory(SizeOf(Polynome))
   
   *un_polynome\ax10 = ax10
   *un_polynome\bx9 = bx9
   *un_polynome\cx8 = cx8
   *un_polynome\dx7 = dx7
   *un_polynome\ex6 = ex6
   *un_polynome\fx5 = fx5
   *un_polynome\gx4 = gx4
   *un_polynome\hx3 = hx3
   *un_polynome\ix2 = ix2
   *un_polynome\jx1 = jx1
   *un_polynome\k = k
   
   ProcedureReturn *un_polynome
EndProcedure

Procedure DeriverPolynome(*p.Polynome)
   
   *derive.Polynome = AllocateMemory(SizeOf(Polynome))
   
   bx9.f = *p\ax10 * 10
   cx8.f = *p\bx9 * 9
   dx7.f = *p\cx8 * 8
   ex6.f = *p\dx7 * 7
   fx5.f = *p\ex6 * 6
   gx4.f = *p\fx5 * 5
   hx3.f = *p\gx4 * 4
   ix2.f = *p\hx3 * 3
   jx1.f = *p\ix2 * 2
   k.f = *p\jx1
   
   *derive = CreerPolynome(0, bx9, cx8, dx7, ex6, fx5, gx4, hx3, ix2, jx1, k)
   
   ProcedureReturn *derive
   
EndProcedure

Procedure IntegrerPolynome(*p.Polynome)
   
   *integrale.Polynome = AllocateMemory(SizeOf(Polynome))
   
   ax10.f = *p\bx9 / 10
   bx9.f = *p\cx8 / 9
   cx8.f = *p\dx7 / 8
   dx7.f = *p\ex6 / 7
   ex6.f = *p\fx5 / 6
   fx5.f = *p\gx4 / 5
   gx4.f = *p\hx3 / 4
   hx3.f = *p\ix2 / 3
   ix2.f = *p\jx1 / 2
   jx1.f = *p\k
   
   *integrale = CreerPolynome(ax10, bx9, cx8, dx7, ex6, fx5, gx4, hx3, ix2, jx1, 0)
   
   ProcedureReturn *integrale
   
EndProcedure

Procedure.f EvaluerPolynome(*p.Polynome, ValeurX.f)
   
   Resultat.f = *p\ax10 * Pow(ValeurX,10) + *p\bx9 * Pow(ValeurX,9) 
   Resultat = Resultat + *p\cx8 * Pow(ValeurX,8) + *p\dx7 * Pow(ValeurX,7) 
   Resultat = Resultat + *p\ex6 * Pow(ValeurX,6) + *p\fx5 * Pow(ValeurX,5) 
   Resultat = Resultat + *p\gx4 * Pow(ValeurX,4) + *p\hx3 * Pow(ValeurX,3) 
   Resultat = Resultat + *p\ix2 * Pow(ValeurX,2) + *p\jx1 * ValeurX + *p\k
   
   ProcedureReturn Resultat
EndProcedure

Enumeration 1234
   
   #AfficherPolynome_win
   #Btn_Fermer_AfficherPolynome
   #ListIcon_polynome
   
EndEnumeration

Procedure AfficherPolynome(*p.Polynome)
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< Déclaration du tableau >>>>>
   Dim TexteNomTerme.s(10)
   
   ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   ; <<<<< Initialisation du tableau >>>>>
   
   TexteNomTerme(0) = "x à la 10" + Chr(10) + StrF(*p\ax10, 6)
   TexteNomTerme(1) = "x à la 9" + Chr(10) + StrF(*p\bx9, 6)
   TexteNomTerme(2) = "x à la 8" + Chr(10) + StrF(*p\cx8, 6)
   TexteNomTerme(3) = "x à la 7" + Chr(10) + StrF(*p\dx7, 6)
   TexteNomTerme(4) = "x à la 6" + Chr(10) + StrF(*p\ex6, 6)
   TexteNomTerme(5) = "x à la 5" + Chr(10) + StrF(*p\fx5, 6)
   TexteNomTerme(6) = "x à la 4" + Chr(10) + StrF(*p\gx4, 6)
   TexteNomTerme(7) = "x à la 3" + Chr(10) + StrF(*p\hx3, 6)
   TexteNomTerme(8) = "x à la 2" + Chr(10) + StrF(*p\ix2, 6)
   TexteNomTerme(9) = "x à la 1" + Chr(10) + StrF(*p\jx1, 6)
   TexteNomTerme(10) = "Constante" + Chr(10) + StrF(*p\k, 6)
   
   If OpenWindow(#AfficherPolynome_win, 0, 0, 300, 220, #PB_Window_ScreenCentered, "Afficher Polynôme")
      
      If CreateGadgetList(WindowID(#AfficherPolynome_win))
         ListIconGadget(#ListIcon_polynome, 5, 5, 290, 180, "Terme", 140, #PB_ListIcon_GridLines)
         AddGadgetColumn(#ListIcon_polynome, 1, "Coefficient", 145)
         
         For item = 0 To 10
            AddGadgetItem(#ListIcon_polynome, -1, TexteNomTerme(item))
         Next
         
         ButtonGadget(#Btn_Fermer_AfficherPolynome, WindowWidth() / 2 - 50, WindowHeight() - 30, 100, 25, "OK")
         
      EndIf
   EndIf
   
   Repeat
      
      EventID2 = WaitWindowEvent()
      
      If EventID2 = #PB_EventGadget
         Select EventGadgetID() ; La gestion des évenements
               
            Case #Btn_Fermer_AfficherPolynome
               EventID2 = #PB_EventCloseWindow
               
         EndSelect
      EndIf
   Until EventID2 = #PB_EventCloseWindow
   
   CloseWindow(#AfficherPolynome_win)
   
EndProcedure

AfficherPolynome(DeriverPolynome(CreerPolynome(0, 0, 0, 6, 0, 2, 4, 3, 2, 1, 1)))

Publié : sam. 16/avr./2005 10:41
par Oliv
Arghhh je le veux en devoir de math 8O :lol:

Publié : sam. 16/avr./2005 16:20
par Guimauve
Le Théorème Fondamental du Calcul Intégrale sur un polynôme.
C'est juste une réutilisation des commandes précédentes.

A+
Guimauve

Code : Tout sélectionner

Procedure.f TFCIPolynome(*p.Polynome, BorneA.f, BorneB.f)
   
   F_de_B.f = EvaluerPolynome(IntegrerPolynome(*p.Polynome), BorneB) 
   F_de_A.f = EvaluerPolynome(IntegrerPolynome(*p.Polynome), BorneA)
   
   ProcedureReturn F_de_B - F_de_A
   
EndProcedure