Bonjour,
Je souhaite programmer un calcul qui est très utilisé en chimie théorique de base, la méthode de Hückel. Je n'ai trouvé aucun programme qui le faisait sur Ti-Nspire.
Ce programme prend comme argument une matrice carrée (de taille n) qui dépend d'une variable x : M(x)
Mon premier problème est tout simple : Peut on faire un programme qui prend comme paramètre une fonction ?
J'aimerais écrire huckel(M), ou encore mieux huckel(M(x),x).
J'obtiens "erreur : erreur d'argument" dans le premier cas, et
"l'argument doit être un nom de variable" au moment de la vérification dans le deuxième cas.
Ensuite, peut-on utiliser un vecteur-variable pour faire du calcul formel ? Autrement dit je voudrais résoudre un système de n équations (dont une non linéaire : condition de normalisation) à n inconnues, n étant défini par l'argument du programme (n:=dim(M(x))[1]).
Si ce n'est pas possible je ferai séparément les cas n=2,3,4
Voilà, j'espère que j'ai été assez clair, et que quelqu'un pourra répondre au moins à mon premier problème.
N'hésitez pas à me dire si je dois plus détailler le travail que doit faire le programme
Merci d'avance,
Antton
Methode de Hückel
23 posts
• Page 1 of 3 • 1, 2, 3
-
AnttonC
Niveau 3: MH (Membre Habitué)- Posts: 12
- Joined: 13 Dec 2013, 18:34
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: M2 Agregation chimie
Re: Methode de Hückel
Il me semble qu'une façon de passer une fonction en paramètre à une autre est d'utiliser une chaîne de caractères contenant l'expression de la fonction, puis la retraduire en expression avec expr().
Mais ça fait presque une décennie que je ne fais presque plus de TI-BASIC
Mais ça fait presque une décennie que je ne fais presque plus de TI-BASIC
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
-
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)- Posts: 6865
- Joined: 23 Dec 2009, 00:00
- Location: France
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: -
- GitHub: debrouxl
Re: Methode de Hückel
Ok merci beaucoup je vais essayer ça, j'espère que ça va marcher avec une matrice.
Du coup il faut mettre des guillemets au moment d'utiliser le programme ?
Du coup il faut mettre des guillemets au moment d'utiliser le programme ?
-
AnttonC
Niveau 3: MH (Membre Habitué)- Posts: 12
- Joined: 13 Dec 2013, 18:34
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: M2 Agregation chimie
Re: Methode de Hückel
Bonjour,
Il y a précisément deux sens du mot "fonctions" abordables sur nspire.
• Le premier, c'est une fonction programmable, quand tu crée un nouveau programme, tu peux choisir entre fonction et programme. Ainsi, la fonction sert à retourner une valeur avec return, ce qui peut être très utile. Pour mieux comprendre, voici une fonction qui me calcule le cube de n :
Cette fonction, tu peux très bien l'utiliser n'importe où, pour stocker le cube d'une variable dans cette variable par exemple :
• Le deuxième type de fonction, c'est la fonction mathématique, avec une variable.
Ainsi, pour définir la fonction f(x)=2x+2, j'écris :
Avec celle ci, je peux calculer l'image de x par la fonction :
Il y a précisément deux sens du mot "fonctions" abordables sur nspire.
• Le premier, c'est une fonction programmable, quand tu crée un nouveau programme, tu peux choisir entre fonction et programme. Ainsi, la fonction sert à retourner une valeur avec return, ce qui peut être très utile. Pour mieux comprendre, voici une fonction qui me calcule le cube de n :
- Code: Select all
Define cube(n)=
Func
Return n^(3)
EndFunc
Cette fonction, tu peux très bien l'utiliser n'importe où, pour stocker le cube d'une variable dans cette variable par exemple :
- Code: Select all
a:=cube(a)
• Le deuxième type de fonction, c'est la fonction mathématique, avec une variable.
Ainsi, pour définir la fonction f(x)=2x+2, j'écris :
- Code: Select all
f(x):=2x+2
Avec celle ci, je peux calculer l'image de x par la fonction :
- Code: Select all
f(3)=8
Mes programmes de Maths Equation cartésienne droiteEtude de dérivé en un point Inéquations du second degré Equations bicarrées Statistique facile ! (1ère/2nde) | Divers Liste complète de mes programmesApprends à programmer en lua TI-planet sur facebook : |
-
AnToX98Premium
Niveau 14: CI (Calculateur de l'Infini)- Posts: 1022
- Images: 15
- Joined: 19 May 2013, 16:54
- Location: Paris, France
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: 1ere S
Re: Methode de Hückel
Bonjour,
Merci pour ces explications, en effet je n'étais pas très précis : Je parle de fonctions de type f(x)=5x(x-1) par exemple, et je voulais que mon programme prenne comme argument f ou f(x),x.
Mais ça a l'air possible en passant par une chaîne de caractère, même si je bloque encore.
Voilà un cas simple pour illustrer ce qui ne marche pas
Quand je rentre programme("x^2"), il me renvoie bien le premier disp (l'expression de la fonction), mais il met "Erreur : L'argument doit être une chaine de caractère", et je n'ai pas mon 25. Par contre quand je fais à la main les deux dernières lignes ça marche.
Je suis assez embêté parce que l'argument est bien une chaine et que la calculatrice l'a compris puisqu'il donne le premier résultat...
Merci pour ces explications, en effet je n'étais pas très précis : Je parle de fonctions de type f(x)=5x(x-1) par exemple, et je voulais que mon programme prenne comme argument f ou f(x),x.
Mais ça a l'air possible en passant par une chaîne de caractère, même si je bloque encore.
Voilà un cas simple pour illustrer ce qui ne marche pas
- Code: Select all
Define programme(chaine)
Prgm
Local f
Disp expr(chaine) \\ça marche
f(x):=expr(chaine)
Disp f(5) \\ça marche pas
EndPrgm
Quand je rentre programme("x^2"), il me renvoie bien le premier disp (l'expression de la fonction), mais il met "Erreur : L'argument doit être une chaine de caractère", et je n'ai pas mon 25. Par contre quand je fais à la main les deux dernières lignes ça marche.
Je suis assez embêté parce que l'argument est bien une chaine et que la calculatrice l'a compris puisqu'il donne le premier résultat...
-
AnttonC
Niveau 3: MH (Membre Habitué)- Posts: 12
- Joined: 13 Dec 2013, 18:34
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: M2 Agregation chimie
Re: Methode de Hückel
En fait, AntoX98, les deux types de fonctions que tu décris sont... la même chose !!
Tu peux très bien définir ta fonction "f" exactement de la même façon que ta fonction "cube" et vice-versa.
Il n'y a qu'un seul type de fonction en TI-Basic.
Malheureusement, on ne peut pas utiliser une fonction comme paramètre d'appel d'une autre fonction.
On peut cependant gruger en utilisant la méthode suggérée par Lionel... mais c'est un peu plus subtil à cause de l'évaluation tardive.
En effet, lors de la création de la fonction, RIEN n'est évalué. L'évaluation se fait lors de l'utilisation de la fonction. (Et donc dans ton cas, au moment de l'évaluation, "chaine" n'est pas une chaine de caractères, mais une variable non attribuée, ce qui provoque l'erreur)
Il faut donc ruser ainsi :
Pour cela, il faut bien entendu que "chaine" soit une chaîne de caractères et donc écrite entre guillemets. Il faudra aussi faire attention aux erreurs de syntaxe éventuels... car il n'y a plus d'auto-correction dans une chaîne de caractères.
Tu peux très bien définir ta fonction "f" exactement de la même façon que ta fonction "cube" et vice-versa.
Il n'y a qu'un seul type de fonction en TI-Basic.
Malheureusement, on ne peut pas utiliser une fonction comme paramètre d'appel d'une autre fonction.
On peut cependant gruger en utilisant la méthode suggérée par Lionel... mais c'est un peu plus subtil à cause de l'évaluation tardive.
En effet, lors de la création de la fonction, RIEN n'est évalué. L'évaluation se fait lors de l'utilisation de la fonction. (Et donc dans ton cas, au moment de l'évaluation, "chaine" n'est pas une chaine de caractères, mais une variable non attribuée, ce qui provoque l'erreur)
Il faut donc ruser ainsi :
- Code: Select all
Define truc(chaine,var)=
Func
Local f
expr( "f(" & var & "):=" & chaine )
...
EndFunc
Pour cela, il faut bien entendu que "chaine" soit une chaîne de caractères et donc écrite entre guillemets. Il faudra aussi faire attention aux erreurs de syntaxe éventuels... car il n'y a plus d'auto-correction dans une chaîne de caractères.
-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Posts: 5670
- Joined: 11 Mar 2008, 00:00
- Location: Lyon
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Methode de Hückel
Ok j'ai compris merci beaucoup !
Par contre j'ai du modifier un peu
Sinon var aurait du être une chaine.
La variable s'appellera toujours x, du coup j'aimerais enlever le deuxième argument et déclarer x dans le programme.
Enfin bon, ça marche, et je pense que pour mon deuxième problème je vais traiter à la main les systèmes à 2,3,4 inconnues parce que résoudre un système à n équations n inconnues (n étant une variable définie) je ne pense pas que ça soit programmable...
Merci beaucoup en tout cas !
Par contre j'ai du modifier un peu
- Code: Select all
Define programme(chaine,x)
Prgm
Local f
expr("f(x):=" & chaine)
Disp expr(chaine)
Disp f(5)
EndPrgm
Sinon var aurait du être une chaine.
La variable s'appellera toujours x, du coup j'aimerais enlever le deuxième argument et déclarer x dans le programme.
Enfin bon, ça marche, et je pense que pour mon deuxième problème je vais traiter à la main les systèmes à 2,3,4 inconnues parce que résoudre un système à n équations n inconnues (n étant une variable définie) je ne pense pas que ça soit programmable...
Merci beaucoup en tout cas !
Last edited by AnttonC on 15 Dec 2013, 18:43, edited 1 time in total.
-
AnttonC
Niveau 3: MH (Membre Habitué)- Posts: 12
- Joined: 13 Dec 2013, 18:34
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: M2 Agregation chimie
Re: Methode de Hückel
Si tu l'écris comme tu l'as fait, ton programme ne fonctionnera que si ta variable s'appelle "x" (et du coup, ça ne sert à rien de mettre un 2ème paramètre !), alors que le mien fonctionne quelque soit le nom de la variable.
Attention cependant à bien mettre plusieurs chaines de caractères... j'ai séparé pour que ce soit plus clair 2 posts plus haut.
Attention cependant à bien mettre plusieurs chaines de caractères... j'ai séparé pour que ce soit plus clair 2 posts plus haut.
-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Posts: 5670
- Joined: 11 Mar 2008, 00:00
- Location: Lyon
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Methode de Hückel
Oui, c'est juste sauf que une fonction que l'on définit ainsi : f(x):=2x+2 n'est pas programmable, non ?
Sinon, je crois que pour que ça marche correctement, il faut remplacer f par f1 :
Sinon, je crois que pour que ça marche correctement, il faut remplacer f par f1 :
- Code: Select all
expr( "f1(" & var & "):=" & chaine )
Mes programmes de Maths Equation cartésienne droiteEtude de dérivé en un point Inéquations du second degré Equations bicarrées Statistique facile ! (1ère/2nde) | Divers Liste complète de mes programmesApprends à programmer en lua TI-planet sur facebook : |
-
AnToX98Premium
Niveau 14: CI (Calculateur de l'Infini)- Posts: 1022
- Images: 15
- Joined: 19 May 2013, 16:54
- Location: Paris, France
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: 1ere S
Re: Methode de Hückel
Je ne comprends rien à ce que tu racontes, AntoX98 !
Qu'est-ce qu'une fonction "programmable" ?
Si tu veux dire qu'elle ne peut pas être éditée dans l'éditeur de programmes... et bien c'est simplement FAUX. Il suffit de l'ouvrir comme n'importe quelle autre fonction.
Quant à ta 2ème idée, de remplacer "f" par "f1", c'est non seulement farfelu (pourquoi l'un marcherait et pas l'autre ? tu peux bien nommer ta fonction comme tu le souhaites !) mais en plus ici cela conduira à une erreur car toutes les variables utilisées dans une fonction doivent être locales (même si ces variables sont elles-mêmes des fonctions) et seul f a été déclaré comme variable locale.
Qu'est-ce qu'une fonction "programmable" ?
Si tu veux dire qu'elle ne peut pas être éditée dans l'éditeur de programmes... et bien c'est simplement FAUX. Il suffit de l'ouvrir comme n'importe quelle autre fonction.
Quant à ta 2ème idée, de remplacer "f" par "f1", c'est non seulement farfelu (pourquoi l'un marcherait et pas l'autre ? tu peux bien nommer ta fonction comme tu le souhaites !) mais en plus ici cela conduira à une erreur car toutes les variables utilisées dans une fonction doivent être locales (même si ces variables sont elles-mêmes des fonctions) et seul f a été déclaré comme variable locale.
-
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)- Posts: 5670
- Joined: 11 Mar 2008, 00:00
- Location: Lyon
- Gender:
- Calculator(s):→ MyCalcs profile
23 posts
• Page 1 of 3 • 1, 2, 3
Who is online
Users browsing this forum: ClaudeBot [spider] and 2 guests