Autorisation : Membre
Nb de messages : 24
Inscrit le : Jeu 18 Oct 2012, 21:19
Posté le : Jeu 18 Oct 2012, 21:23
Bonjour,
Je suis à la recherche d'un programme qui permet de calculer l'équation d'une fonction en suivant l'interpolation lagrangienne, c'est à dire en ayant des valeurs de cette courbe.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 18 Oct 2012, 22:38
Je ne connais pas de programme pour calculatrice TI qui s'en occupe.
Effectuer un calcul littéral et l'afficher est extrèmement compliqué et est extrèmement lourd en languge TI-Basic.
(je n'ai pas assez d'expérience en language assembleur pour le faire ainsi)
Cependant il est possible de calculer des coefficients et de les afficher en une ou plusieurs listes de nombres. J'ai déjà réalisé ce type d'algorithme mais sans mise en page, c'est à l'humain de recopier les données sur une feuille quand ce sont mes programmes.
La mise en page est donc mon principal point faible.
Je vais élaborer un programme (récursif comme c'est ma spécialité !) si j'en trouve le temps.
EDIT : finalement non je n'ai pas besoin de récursivité
Remarque j'ai étudié l'interpolation l'an dernier et élaboré en tp un programme Maple (logiciel de calcul et programmation) pour déterminer une telle équation.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 19 Oct 2012, 18:38
Oui je vais essayer, mais je ne suis pas doué en mise en page, d'autant qu'afficher des équations qui peuvent varier n'est pas aisé au départ.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 20 Oct 2012, 21:06
Tu veux la forme finale développée ou juste la formule définie par la méthode classique ?
Je ne suis pas convaincu de pouvoir développer la formule même si j'élabore l'équation factorisée.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 28 Oct 2012, 23:57
J'ai terminé. Cela m'a prit 2 jours.
J'ai écrit un programme de développement de polynômes vendredi soir, je l'ai adapté aux polynômes de Lagrange jusqu'à ce soir et j'ai passé les dernières heures à écrire un programme d'affichage.
Mode d'emploi :
Il faut remplir les listes L1 et L2 avec les coordonnées (X,Y) des points.
Le résultat est stocké dans L6 sous la forme : ax^n+...+bx+c = {a,...,b,c}
Le programme inclus un affichage polynomial de la fonction, le stocke dans la fonction Y0, et affiche aussi une liste fractionnaire des coefficients (afin de pouvoir mieux lire les coefficients quand ils ont une drôle de tête)
Remarque : le programme d'affichage ne supporte pas le polynome nul. (courbe horizontale nulle)
Cela vient du fait que la forme explicite du polynôme épure les termes nuls.
L1+L2 // teste si la dimension des listes est fausse (erreur dim)
dim(L1->N
ClrList L6
N->dim(L6
For(J,1,N
ClrList L3
N->dim(L3
1->L3(N
For(I,1,N
If I-J
Then
{1,-L1(I)}/(L1(J)-L1(I->L4
ClrList L5
N->dim(L5
For(A,1,N-1
For(B,1,2
L5(A+B-1)+L3(A+1)L4(B->L5(A+B-1
End
End
L5->L3
End
End
L6+L5L2(J->L6
End
" ->Str1 // à partir d'ici ce sont des affichages
For(A,1,N
{1,2->L5
L6(A
{Ans,Ans->L4
LinReg(a+bx) L5,L4,Y0
Equ>String(Y0,Str0
N-A
{Ans,Ans->L4
LinReg(a+bx) L5,L4,Y0
Equ>String(Y0,Str9
If L6(A // cette ligne épure les termes nuls de l'expression
Str1+sub(Str0,1,inString(Str0,"+")-1)+"X^"+sub(Str9,1,inString(Str9,"+")-1)+"+->Str1
End
Pause sub(Str1,2,length(Str1)-2 // affichage du polynome
Ans->Y0 // stockage dans Y0
L6>Frac // liste fractionnaire affichée
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 24
Inscrit le : Jeu 18 Oct 2012, 21:19
Posté le : Lun 05 Nov 2012, 19:17
Code
L1+L2 // teste si la dimension des listes est fausse (erreur dim)
dim(L1->N
ClrList L6
N->dim(L6
For(J,1,N
ClrList L3
N->dim(L3
1->L3(N
For(I,1,N
If I-J
Then
{1,-L1(I)}/(L1(J)-L1(I->L4
ClrList L5
N->dim(L5
For(A,1,N-1
For(B,1,2
L5(A+B-1)+L3(A+1)L4(B->L5(A+B-1
End
End
L5->L3
End
End
[b]L6+L5L2(J->L6[/b]
End
" ->Str1 // à partir d'ici ce sont des affichages
For(A,1,N
{1,2->L5
L6(A
{Ans,Ans->L4
LinReg(a+bx) L5,L4,Y0
Equ>String(Y0,Str0
N-A
{Ans,Ans->L4
LinReg(a+bx) L5,L4,Y0
Equ>String(Y0,Str9
If L6(A // cette ligne épure les termes nuls de l'expression
Str1+sub(Str0,1,inString(Str0,"+")-1)+"X^"+sub(Str9,1,inString(Str9,"+")-1)+"+->Str1
End
Pause sub(Str1,2,length(Str1)-2 // affichage du polynome
Ans->Y0 // stockage dans Y0
L6>Frac // liste fractionnaire affichée
Il y a un problème à la ligne en gras, au niveau J->L6
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 05 Nov 2012, 23:06
Quel problème ? syntaxe ? dim ?
Chaque L# est une liste numérotée #.
Tu as peut-être une erreur à {1,-L1(I)}/(L1(J)-L1(I->L4 au niveau de la virgule : elle est probablement manquante et avec "-" écrit avec le symbole de soustraction au lieu de négativité.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 06 Nov 2012, 19:30
Regarde dans le menu stat\edit les dimensions des listes.
La dimension de L4 doit être 2 et les autres L1 à L6 doivent être N.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 06 Nov 2012, 21:08
Vas dans le menu stat+1(edit) puis lis le tableau : chaque colonne est une liste, compte le nombre de lignes dans chaque liste.
Modifier les listes (avec suppr,annul,entrer etc) modifie aussi les dimensions en fonction des ajouts/suppressions de termes.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 07 Nov 2012, 19:55
En supprimmant ou ajoutant des termes dans les listes jusqu'à atteindre la longueur voulue.
Si dimension t'embrouille à cause des maths, retient plutôt le mot longueur, même si on peut alors confondre liste et chaine de caractère.
L'instruction N->dim(L1 permet de donner la longueur contenue dans la variable N à la liste L1.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 11 Nov 2012, 19:08
Cette ligne me sert seulement à vérifier que les liste L1 et L2 ont la même longueur, et que cette longueur n'est pas nulle. Si ce n'est pas le cas la calculatrice bloque.
C'est tordu mais plus léger qu'un test.
Donc il faut donner aux listes L1 et L2 une même longueur.
Pour à la fois remplir et dimensionnner les listes L1 et L2, saisis des listes de cette manière :
{1,2,3}->L1
{1,2,3}->L2
J'espère que tu as vidé les listes avec ClrList mais pas DelVar, sinon tu auras des problèmes. Pour le régler si nécessaire, utilise simplement {0}->L3 et de même pour chaque liste.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 12 Nov 2012, 18:52
Tu as probablement erroné ceci
Equ>String(Y0,Str0
La fonction Equ>String se trouve dans le catalogue, je ne crois pas ailleurs, et se traduit par Equ>Chaîne.
Y0 est une équation de courbe. var\droite\1\0.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 24
Inscrit le : Jeu 18 Oct 2012, 21:19
Posté le : Lun 12 Nov 2012, 19:34
o.O je crois qu'il y a un petit problème : lorsque j'exécute ce programme, pas d'erreur, mais il m'affiche 1X^1
Et après :
ERR:SYNTAXE :
L6->Frac
Je ne pense pas que cette faute est très grave, c'est pour un affichage en fraction si je ne me trompe pas. Cependant quelque chose me perturbe : comment puis-je insérer des données qui me permettraient de définir la droite ?
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 12 Nov 2012, 19:55
">Frac" n'est pas un sto suivi de texte mais une fonction du menu math.
Le polynôme a déjà été stocké dans la chaîne0 si tout s'est bien passé précédemment.
Maintenant modifie les listes L1 et L2 tel qu'elles aient la même longueur, que les abscisses des points soient dans L1 et les ordonnées dans L2.
Pour effectuer cette modification, utilise :
-soit le menu stat\edit
-soit la commande {x1,x2,x3,...,xn}->Lx en remplaçant cet exemple par tes valeurs (et les noms des listes L1 et L2).
Il est envisageable d'améliorer ce programme avec de l'assembleur pour déterminer les fractions et les incorporer dans la Chaîne.
Un programme existe mais ne génère pas de chaîne et la conversion est tout aussi pénible que celles déjà faites avec des défauts (notamment si pas de fraction trouvée ou un entier trouvé).
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 24
Inscrit le : Jeu 18 Oct 2012, 21:19
Posté le : Lun 12 Nov 2012, 20:35
Premier essais avec des fonctions affines ça marche (sauf qu'il n'affiche pas 8X+4 par exemple mais 8X^1+4X^1 mais bon ça c'est pas grave ^^)
J'ai essayé avec des fonctions plus dures, il s'en rapproche, j'en suis tout de même très content ! Je te remercie de ton travail, la seule chose peut-être à améliorer serait le fait que la plupart du temps il donne une valeur avec beaucoup de chiffres après la virgule, et le fait qu'on soit obligé d'aller dans les listes pour obtenir des droites.
Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Jeu 15 Nov 2012, 14:21
Linkakro, je ne sais pas ce que c'est qu'un polynome de Lagrange, mais est-ce que ton code serait utile si je l'incorpore à Foncpowa ? (si tu es d'accord)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 15 Nov 2012, 15:03
Oui. (avec une petite mention de mon pseudo pour mes progs si possible)
Pour explication : on donne une liste de n points dont aucune abscisse ne se répète et on trouve l'unique polynome de degré strictement inférieur à n qui passe par tous ces points.
Je me demandais si je le proposerais, car il peut encore être amélioré.
1) mettre les fractions dans l'équation (il vaut mieux passer par l'assembleur mais je n'ai pas exactement ce que je veux, même avec Zfrac)
2) possibilité de saisie des points dans le programme (un input suffit)
3) utiliser un affichage dans le graphique peut-être.
4) utiliser un petit test pour supporter le polynôme nul sans afficher pour autant les coefficients nuls dans l'équation
5) éventuellement dessiner la courbe et les points (en utilisant le menu statistique de la même façon que ton sous-programme de proba)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 24
Inscrit le : Jeu 18 Oct 2012, 21:19
Posté le : Ven 16 Nov 2012, 16:13
J'ai effectué quelques modifications qui permettent de rentrer les coordonnées directement depuis le programme :
Code
EffListe L1,L2 //afin qu'une coordonnée laissée auparavant non déclarée ne nous gène pas
Input "COORDONNEES?",J
For(I,1,J)
Disp " " //ceci est juste un affichage afin que ce soit plus aéré
Prompt X //remplacez X par ce que vous voulez du moment que vous comprenez
X->L1(I)
Prompt Y //pareil que précédemment
Y->L2(I)
End
Disp " " //encore une aération entre les coordonnées et la fonction
dim(L1->N //j'ai enlevé la ligne précédente (L1+L2) qui ne nous était plus utile
ClrList L6
N->dim(L6
For(J,1,N
ClrList L3
N->dim(L3
1->L3(N
For(I,1,N
If I-J
Then
{1,-L1(I)}/(L1(J)-L1(I->L4
ClrList L5
N->dim(L5
For(A,1,N-1
For(B,1,2
L5(A+B-1)+L3(A+1)L4(B->L5(A+B-1
End
End
L5->L3
End
End
[b]L6+L5L2(J->L6[/b]
End
" ->Str1 // à partir d'ici ce sont des affichages
For(A,1,N
{1,2->L5
L6(A
{Ans,Ans->L4
LinReg(a+bx) L5,L4,Y0
Equ>String(Y0,Str0
N-A
{Ans,Ans->L4
LinReg(a+bx) L5,L4,Y0
Equ>String(Y0,Str9
If L6(A // cette ligne épure les termes nuls de l'expression
Str1+sub(Str0,1,inString(Str0,"+")-1)+"X^"+sub(Str9,1,inString(Str9,"+")-1)+"+->Str1
End
Pause sub(Str1,2,length(Str1)-2 // affichage du polynome
Ans->Y0 // stockage dans Y0
L6>Frac // liste fractionnaire affichée