cs_raph123
Messages postés5Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention20 janvier 2009
-
18 janv. 2009 à 14:35
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 2010
-
14 févr. 2009 à 21:58
Bonjour, je dois écrire un programme qui trace le graphique d'un polynôme de Lagrange passant par des points désignés par la souris: voici le code que j'ai écrit, mais rien ne se passe, le graphe ne se dessine pas. Auriez-vous de l'aide à me proposer? Merci d'avance
Dim PX(100) As Integer
Dim PY(100) As Integer
Dim n As Integer
Function L(k, x)
Let aux = 1
For i = 1 To n
If i <> k Then
Let aux = aux * (x - PX(i)) / (PX(k) - PX(i))
End If
Next i
L = aux
End Function
Private Sub Command1_Click()
For a = PX(0) To PX(n)
For k = 1 To n
Let b = b + L(k, a) * PY(k)
Next k
Picture1.PSet (a, b)
Next a
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
If n = 0 Then
PX(0) = x
PY(0) = Y
Picture1.Circle (PX(0), PY(0)), 2
n = n + 1
Else
If x > PX(n - 1) Then
PX(n) = x
PY(n) = Y
Picture1.Circle (PX(n), PY(n)), 2
n = n + 1
End If
End If
End Sub
A voir également:
Polynome interpolateur de lagrange
Lagrange interpolation - Meilleures réponses
Interpolation de lagrange python - Meilleures réponses
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 janv. 2009 à 00:10
Salut
Je ne l'ai pas essayé, mais il semble que tu ne traces de cercle que lorsque la nouvelle position horizontale est à droite de la précédente avec If x > PX(n-1) : c'est volontaire ?
Est-ce que la commande
Picture1.Circle (100, 100), 2
fonctionne correctement (mets la dans un bouton pour tester) ?
Il faut regarder dans l'aide : Est ce que les coordonnées x/y fournies par le _MouseDown ont les mêmes bases que celles du Circle :
_MouseDown te fournit peut-être des coodonnées par rapport à la forme qui l'héberge, alors que si tu dessines à l'intérieur d'une PictureBox, les coordonnées sont peut-être par rapport aux bords de la PictureBox.
Suffirait de retrancher PictureBox.Left et Top à x et y.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_raph123
Messages postés5Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention20 janvier 2009 19 janv. 2009 à 12:31
Salut, tout d'abord merci pour ton message.
Je trace en effet les cercles volontairement, car ce sont des points de repaires, pour que je puisse mieux les distinguer des autres en fait.
la commande picture1.circle(100,100),2 marche correctement, ce qui ne fonctionne pas est qu'une fois que j'ai entré les points en cliquant avec la souris(ces points doivent être d'abscisse croissante), ensuite je clique sur le bouton 1 ce qui devrait relier ces points par interpolation de Lagrange, mais rien ne se passe.
cs_raph123
Messages postés5Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention20 janvier 2009 20 janv. 2009 à 16:41
Salut, le problème ne venait apparemment pas des coordonnées, mais j'avais fait une erreur dans les boucles, voila le code correct:
Dim PX(100) As Integer
Dim PY(100) As Integer
Dim n As Integer
Function L(k, x)
Let aux = 1
For i = 0 To n
If i <> k Then
Let aux = aux * (x - PX(i)) / (PX(k) - PX(i))
End If
Next i
L = aux
End Function
Private Sub Command1_Click()
For x = PX(0) To PX(n - 1) Step 0.1
Let Y = 0
For k = 0 To n
Let Y = Y + L(k, x) * PY(k)
Next k
Picture1.PSet (x, Y)
Next x
End Sub
Private Sub Command2_Click()
Picture1.Cls
Let n = 0
Let Text1.Text = " "
Let Label3.Caption = " "
End Sub
Private Sub Command3_Click()
Let X1 = Text1.Text
For k = 0 To n
Let Y = Y + L(k, X1) * PY(k)
Next k
Let Label3.Caption = Round(Y, 3)
Picture1.Circle (X1, Y), 2
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
If n = 0 Then
PX(0) = x
PY(0) = Y
Picture1.Circle (PX(0), PY(0)), 2
n = n + 1
Else
If x > PX(n - 1) Then
PX(n) = x
PY(n) = Y
Picture1.Circle (PX(n), PY(n)), 2
n = n + 1
End If
End If
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 14 févr. 2009 à 21:58
Bonjour
Raphael, je souhaiterais, si tu veux bien, me baser sur ton code pour me familiariser avec l'interpolation polynomiale.
Pour cela, j'ai construit par algorithme une matrice de points appartenant à une sinusoïde, et simulant un échantillon PCM. Je voudrais reconstruire cette sinusoïde par interpolation lagrangienne, comme illustré par un article de Wikipedia.
Après un survol rapide de ton code, je bute sur la procédure Command3_click dont je ne comprends pas la finalité. Quel est ce paramètre que tu affiches dans le Label3, et ce point que tu matérialises par un cercle ? Le reste de ton code me semble limpide.