Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 13-05-2010 10:22:23

$and
Invité

TI_nspire

Bonjour à tous,

j'ai besoin de programmer les méthodes de 'approximation d'intégrales telles que méthode des trapezes, tangentes et simpson sur ma ti-nspire, mais je ne suis vraiment pas douée en programmation... Quelqu'un pourrait m'aider?
Merci d'avance

#2 13-05-2010 20:44:51

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Salut,

Je regarde ton truc : j'ai téléchargé le manuel de cette Ti.
Je n'ai pas cette calculette, je ne connais pas son BASIC, mais bon, c'est du BASIC, hein, je pense que seules les mnémoniques vont différer : je verrai avec le manuel...
En attendant, si tu étais plus précise ?
Tu veux ça pour quel type de fonction ? entre quelles bornes ? Qu'est-ce que tu dois faire exactement  (qu'est-ce qu'on t'a demandé précisément ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 13-05-2010 23:57:10

$and
Invité

Re : TI_nspire

Alors l'idée c'est de trouver des valeurs approchées de pi en approximant l'intégrale de 0 à 1 de 4/(1+x²)
Voilà voilà
Merci beaucoup!

#4 15-05-2010 20:21:29

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Salut,

Alors voilà, il s'agit de tracer des rectangles consécutifs entre 0 et 1, dont l'axe de symétrie passe par un point de la courbe...
Soit un point d'abscisse x. Son ordonnée est y =4/(1+x²)
Je choisis un pas (par exemple 0,01) - la largeur des rectangles et je trace un rectangle entre les abscisses i-pas: et i+pas/2, donc dont  la la largeur est : pas (0,01)
L'aire de ce rectangle est [tex]A=\frac{4\times pas}{1+x^2}[/tex]
Supposons : pas = 0,01, on a les valeurs de départ suivantes :
x = pas/2 (0,005 : milieu de [0 ; 0,01])

Ainsi le 1er rectangle aura un axe de symétrie d'équation x = 0,005, et sera compris entre les droites d'équation x =0 et x = 0,01, y = 0 et y=4/(1+0,005²).
Le rectangle suivant sera adjacent, il sera centré sur x+0,01 soit x+pas
Donc, je vais construire ici des rectangles de 0,005 à 0,995 de 0,01 en 0,01 c'est à dire avec un pas de 0,01...

Tu vas donc soit choisir, soit demander à l'utilisateur un pas.
Admettons :  0,001 tu ranges la valeur pas dans la variable pas (préalablement déclarée)
0.001 -> pas
Ensuite tu ranges pas/2 dans la variable x (préalablement déclarée)
pas/2 -> x
Tu as besoin du début de boucle et de la fin de boucle : je vais appeler par ex ces constantes db et fb.
Rangement de pas/2 dans db et de 1-pas/2 dans db
     pas/2 -> db
  1-pas/2 -> fb
Tu vas encore ranger 0 dans la variable somme s :
          0 -> s
Tu lances ta boucle For :

For x, db,fb, pas  (= Pour x de la valeur fb à la valeur fb en augmentant chaque fois de la valeur pas, faire :)
s+(4*pas)/(1+x^2) -> s

(tu additionnes à s l'aire du rectangle et tu ranges le résultat à nouveau dans s.
puis tu ajoutes

EndFor        (= tu signales que ce qui suit n'est pas dans la boucle)

Il te reste à afficher le résultat :

Disp "Une valeur approchée de Pi est : ",s

Vérifie que Disp affiche quelque chose : l'explication du manuel est étrange...

Quelques valeurs que j'ai calculées :
pas =   0.01   [tex]\pi\approx 3.14160098692[/tex] Tu as déjà une valeur approchée à [tex]10^{-4}[/tex] près.
pas = 0.001   [tex]\pi\approx 3.14159273692[/tex] Tu as déjà une valeur approchée à [tex]10^{-7}[/tex] près.

Va voir un programme fait pour la TI200 Voyage :
http://www.bibmath.net/forums/viewtopic.php?id=2690

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 16-05-2010 11:12:19

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

RE,

Un lien utile : http://www.univers-ti-nspire.fr/files/p … p14_qs.pdf
Ça devrait ressembler à ça :

Define RectIntegr(p)=
Prgm
Local x,s,db,fb
db=:=p/2
fb=1-p/2
For x,db,fb,p
s:=s+(4*p)/(1+x^2)
EndFor
Disp "Approximation de Pi : ",s
EndPrgm

Le programme attend que tu lui "passes" le pas au lancement...
Fais un essai avec 0.01 et recommence avec p = 0.001 et contrôle avec les valeurs trouvées...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#6 16-05-2010 20:39:20

$and
Invité

Re : TI_nspire

Alors en fait, le programme pour la méthode des rectangles je l'avais déjà, je voulais essayer de comparer avec les autres méthodes (trapeze, tangente, simpson) pour voir laquelle va le plus vite.
Mais merci beaucoup quand même

#7 16-05-2010 21:38:26

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Re,

Ok, il suffit de le dire...

:Define TrapIntegr(p)=
:Prgm
:Local k,s,nb
:nb:=INT(1/p)
:For k,0,nb
:s:=s+(4/(1+(k*p)^2)+4/(1+((k+1)*p)^2))/2
:EndFor
:s:=s*p
:Disp "Approximation de Pi : ",s
:EndPrgm

Le programme demande au lancement le pas, puis calcule [tex]s=\sum_{k=0}^{nb} \frac{f(kp)+f((k+1)p)}{2}[/tex]
Et enfin applique le correctif en remultipliant s par p

Résultats
pas =   0.01   [tex]\pi\approx 3.14157598692[/tex] Tu as déjà une valeur approchée à [tex]10^{-4}[/tex] près.
pas = 0.001   [tex]\pi\approx 3.14159248692[/tex] Tu as déjà une valeur approchée à [tex]10^{-6}[/tex] près.

Je regarde la méthode des tangentes demain matin...

Ca te va ?


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 17-05-2010 10:08:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Bonjour,

Voilà la suite :

:Define TangIntegr(p)=
:Prgm
:Local a,b,k,s,nb
:nb:=Int(1/p)
:a:=0
:b:=1
:x=p/2
:For k,0,nb-1
:s:=s+(4/(1+(x+k*p)^2)
:EndFor
:s:=s*(b-a)/p
:Disp "Approximation de Pi : ",s
:EndPrgm

Le programme demande au lancement le pas, puis calcule [tex]s=\sum_{k=0}^{nb} f(x+kp)[/tex]
Et enfin applique le correctif en remultipliant s par (b-a)/p

Résultats
p =   0.01   [tex]\pi\approx 3.14160098692[/tex] Tu as déjà une valeur approchée à [tex]10^{-3}[/tex] près.
p = 0.001   [tex]\pi\approx 3.14159273692[/tex] Tu as déjà une valeur approchée à [tex]10^{-6}[/tex] près.

Plus précisément, les troncatures à [tex]10^{-3}[/tex] et [tex]10^{-6}[/tex] près sont exactes.

Tu veux une autre méthode ?
J'aimerais quand même que tu me dises si ce que je fais marche : je n'ai pas ta calculatrice !
J'écris mes programmes en Python, puis je transcris...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#9 17-05-2010 14:56:39

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Ave !

Bon, méthode de Simpson...
Il paraît que c'est la méthode employée en natif dans les calculettes.
Je te propose la méthode de Simpson composée.
On a la courbe représentative de f(x), on cherche l'approximation sur [a;b].
On partage l'intervalle en nb sous-intervalles de largeur p, nb devant être pair paraît-il.
On pose m=nb/2
La valeur approchée s de l'intégrale est donnée, dit la théorie, par :
[tex]s=\frac{p}{3}\left(f(a)+f(b)+2\sum_{k=1}^{m-1} f(x_{2k})+4\sum_{k=1}^m f(x_{2k-1})\right)[/tex]
Alors, déjà rien qu'à voir la tête de cette formule, ça m'a déclenché une crise d'urticaire... donc, j'ai commencé par économiser une multplication :
[tex]s=\frac{p}{3}\left(f(a)+f(b)+2[\sum_{k=1}^{m-1} f(x_{2k})+2\sum_{k=1}^m f(x_{2k-1})]\right)[/tex]

Mais j'ai cherché à économiser un test, en effet il faudrait étudier 2 cas : celui où l'indice i de l'abscisse [tex]x_i[/tex] est pair et celui où il est impair parce que dans ce dernier cas, il faut doubler...
Or, et là on passe à la programmation : pour k de 1 à 2m-1 on a 1 fois la somme si k est pair et 2 fois si k impair,
ce qui j'ai traduit ainsi :
* [tex]2\sum_{k=1}^m f(x_{2k-1})=\sum_{k=1}^m 2f(x_{2k-1})[/tex]
   Et cette fois je fais une multiplication à chaque tour... Oui, mais c'est pour la bonne cause et éviter le if.
* multiplier par 1 si k est pair et par 2 si k est impair revient à multiplier par (1+ reste de la division de k par 2)

Voilà :

:Define SimpsonIntegr(p)=
:Prgm
:Local a,b,k,s,nb
:nb:=int(1/p)
:a:=0
:b:=1
:For k,1,nb-1
:s:=s+(4*(1+mod(k,2))/(1+(a+k*p)^2)
:EndFor
:s:=p/3*(4/(1+a^2)+4/(1+b^2)+2*s)
:Disp "Approximation de Pi : ",s
:EndPrgm

Avec une largeur de 0.1 (!), j'obtiens :
3.14159261394
la troncature à [tex]10^{-7}[/tex] près est exacte...

Avec une largeur de 0.01, j'obtiens :
s = 3.14159265359
valeur de pi calculée par Python:
3.14159265359...
Identiques : impressionnant !

Mieux, j'ai fouillé dans Python j'ai forcé une représentation en 18 caractères :
s # 3.14159265358979327
La calculette windows donne elle :
s # 3.14159265358979323
La troncature à [tex]10^{-16}[/tex] près de la valeur réelle de pi coïncide avec la valeur calculée par ce programme avec une largeur d'intervalle de 0.001...
Avec 20 chiffres significatifs la précision (même largeur 0.001) du calcul passe à [tex]10^{-18}[/tex]  et  [tex]10^{-15}[/tex] pour une largeur réduite à 0.01...

Belle méthode !

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#10 17-05-2010 23:10:33

$and
Invité

Re : TI_nspire

Super !
Mille merci je vais essayer ça dés demain! Par contre sais-tu si je peux donner une représentation graphique de tout ça? Je pense qu'avec un tableur ça doit pouvoir marcher... J'essayerais
Encore merci !!

#11 18-05-2010 08:23:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Salut,

Attends avant de te réjouir, encore faut-il que ça marche... :-)
Je te rappelle que j'ai travaillé à l'aveugle, alors il y a un risque de devoir apporter un ou deux aménagements, cela dit globalement, j'ai testé ces idées via le langage Python, ça fonctionne...
Tiens, ça me donne une idée, je vais ressortir mon vieux Turbo Basic et les retranscrire, puis j'essaierai en C : ça m'amuse...
Qu'est ce que tu entends par

...donner une représentation graphique de tout ça ?

Ta calculette est une calculette graphique, donc tu peux afficher des graphiques à l'écran, c'est sûr, mais des graphiques de quoi ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#12 18-05-2010 15:04:56

$and
Invité

Re : TI_nspire

Je voudrais représenter graphiquement les différentes méthodes (dessiner les rectangles, trapèzes, tangentes... sous la courbe), et pourquoi pas essayer de faire varier le pas en direct pour voir ce que ça donne. Je suis pas sûre que ce que je raconte est très clair... Et pas sure non plus que ça soit réalisable à mon niveau...
Je rentre tout de suite les programmes dans la calculatrice.

#13 18-05-2010 15:42:55

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 988

Re : TI_nspire

Re,

Si, si c'est très clair...
Faire varier le pas en direct pour voir se modifier les rectangles, trapèzes...
Idée intéressante ;-)
Je ne vois pas comment la mettre en pratique avec une calculette, et avec un logiciel de programmation évolué, ça ne doit pas être de la tarte, je ne saurais pas faire dans l'état actuel de mes connaissances...

@+

[EDIT]
Si quelque possesseur d'une TI 'NSPIRE venant à passer par là, devait utiliser les programmes précédents, qu'il veuille bien me signaler  si ce que j'ai fait "à l'aveugle" - sans la machine donc- voulait bien me signaler si ça fonctionne ou pas, ce serait sympa.
Si ça ne devait pas fonctionner (signaler les correctifs), ce serait sûrement dû à une "broutille" : ces scripts on été testés en Python, donc au niveau calcul et algorithmique, ils sont ok !

Merci d'avance

Dernière modification par yoshi (22-05-2010 13:13:07)


Arx Tarpeia Capitoli proxima...

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
soixante dix-neuf plus vingt cinq
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums