[Mathematica] Comment indiquer la valeur max dans NDSolve ?

Tout ce qui concerne les différents logiciels mathématiques (Matlab, Maxima, Scilab, R, Maple, Mathematica, ...) et les calculatrices scientifiques.
Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.
> Préciser le nom du logiciel concerné dans le titre de votre message.

[Mathematica] Comment indiquer la valeur max dans NDSolve ?

Messagepar Moloch » Mardi 12 Décembre 2006, 08:02

Supposez que nous voulons résoudre une équation différentielle avec NDSolve :

Code: Tout sélectionner
NDSolve[{ x'[t] == f[ x[t] ],  x[0] == 3.4 ], { x }, {t, 0, 10}]


Mathematica donne la solution comme ceci :

Code: Tout sélectionner
Out[]=  {{ x -> InterpolatingFunction[{{ 0.,  2.6532}}, <>}}


Ensuite, nous voulons faire plusieurs graphiques de la solution. Comment indiquez la valeur maximale obtenue t = 2.6532 sans avoir à retaper cette variable à chaque fois, surtout si nous devons changer la condition initiale x[0] == 3.4 et refaire NDSolve encore d'autres fois ? Quel est le nom de la variable t_max obtenue par Mathematica ? Peut-on indiquer cette valeur dans une autre fonction ?
Moloch
Utilisateur
 
Messages: 7
Inscription: Mardi 12 Décembre 2006, 01:20
Localisation: Montreal

Publicité

Messagepar DUET » Mardi 12 Décembre 2006, 17:29

Je ne sais pas quelle est ta fonction $f$ mais en supposant que ce soit $x\mapsto x^2$, voici ce que je ferais :
Code: Tout sélectionner
In[1]:=  f[t_] := t^2
In[2]:=  NDSolve[{x'[t] == f[x[t]], x[0] == 3.4}, {x}, {t, 0, 10}]
Out[2]=  {{x -> InterpolatingFunction[{{0., 0.294118}}, <>]}}
In[3]:=  t= (x /. Out[2])[[1]][[1]][[1]][[2]]
Out[3]= 0.294118
DUET
Hecto-utilisateur
 
Messages: 64
Inscription: Mercredi 01 Juin 2005, 07:14

Messagepar Moloch » Mardi 12 Décembre 2006, 19:21

Hmm, ca semble plus compliqué que je ne le croyais. Pourquoi tous ces [1][1]... ?

De plus, que dois-je écrire, si l'équ. diff. à résoudre est de la forme suivante ?

Code: Tout sélectionner
x'[t] == fx[ x[t], y[t], z[t]],
y'[t] == fy[ x[t], y[t], z[t]],
z'[t] == fz[ x[t], y[t], z[t]]
Moloch
Utilisateur
 
Messages: 7
Inscription: Mardi 12 Décembre 2006, 01:20
Localisation: Montreal

Messagepar DUET » Mardi 12 Décembre 2006, 23:14

Il y a 2 choses :

a) l'opérateur ( "/." + "->" )
b) les indices doublement crochetés ( "[[" +"]]").



a) ça c'est vraiment un truc à connaître dans Mathematica : quand on écrit
Code: Tout sélectionner
Expr[x,y]
il faut lire "expression fonction de x et y" et quand on écrit
Code: Tout sélectionner
Expr[x,y]/.y->z
il faut lire "Expr[x,z]" c'est-à-dire "expression fonction de x et z". C'est très pratique car c'est l'opérateur le plus "volatile" (c'est-à-dire le moins contraignant) parmi les opérateurs de type équation (définit(:=), affecte(=) ,égalise(==)) qui au contraire sont soit à effet permanent soit non-applicables à tout type d'expressions.

b)Est-ce que ça t'éclaire si je te dis que le nombre de "[[1]]" correspond (à la louche) au nombre d'accolades ouvrantes qu'il faut traverser pour arriver jusqu'à ce que tu cherches ?

Est-ce que ça t'éclaire si je te dis aussi que "X[[n]]" signifie "énième argument de X" ?

Quand tu as franchi la dernière accolade ouvrante (en fait c'est l'avant-dernière mais on en compte une en plus quand on rencontre une fonction), tu tombes sur {0., 0.294118}. Il ne reste donc plus qu'à rajouter "[[2]]" pour signaler que c'est le deuxième argument de {0., 0.294118} que tu veux.

Essaie d'enlever le "[[2]]", puis les "[[1]]" successivement et observe ce que Mathematica te réponds à chaque fois (sauf si c'est un message d'erreur auquel cas tente l'expérience avec autre chose) : tu devrais assez rapidement en déduire une manière de créer une expression barbare comme celle que j'ai indiquée à partir de n'importe laquelle des Out pour en extraire n'importe laquelle des quantités qui t'intéresse.
DUET
Hecto-utilisateur
 
Messages: 64
Inscription: Mercredi 01 Juin 2005, 07:14

Messagepar Moloch » Mardi 12 Décembre 2006, 23:25

Mouais, c'est pas très clair tout ça ! Ca me semble même plutôt nébuleux. Décidément, j'aime de moins en moins Mathematica. Au moins, ton truc fonctionne. Mon code répond bien, pour l'instant. Merci de l'aide.
Moloch
Utilisateur
 
Messages: 7
Inscription: Mardi 12 Décembre 2006, 01:20
Localisation: Montreal


Retourner vers Logiciels mathématiques

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités