Le problème proposé est d'une difficulté largement
au-dessus des compétences exigibles des élèves de
la classe de seconde. Il fait partie des problèmes d'école,
d'intérêt pratique douteux. Nous l'avons conservé,
car il a fait l'objet d'une résolution à l'aide d'un solveur,
ce qui permettra au lecteur de comparer l'efficacité des deux types
de logiciels. La méthode retenue pourra être reprise pour
des problèmes plus classiques; la principale difficulté étant
de passer des équations chimiques à leur transcription mathématique.
C'est en tentant cette transcription que je me suis aperçu qu'il
y a une énorme différence entre écrire une équation
chimique ou mathématique. C'est sans doute une des difficultés
rencontrée par nos élèves.
La combustion complète d'un mélange de 100 mL d'éthène
, propane , et butène a consommé 436 mL d'oxygène
. L'analyse des produits de combustion donne des traces de liquide et 274
mL d'un corps pur gazeux. Quelle était la composition du mélange
en volume ?
Il faut écrire les équations-bilans
C2 H4 + 3 O2 -> 2 CO2 + 2 H2O
C3 H8 + 5 O2 -> 3 CO2 + 4 H2O
C4 H8 + 6 O2 -> 4 CO2 + 4 H2O
puis les transposer en équations mathématiques, ce qui est l'occasion pour le professeur de s'apercevoir que la démarche n'a rien d'évident, même si les calculs sont élémentaires. L'instruction Off permet d'éviter l'affichage d'un avertissement, le logiciel nous signalant que certaines variables portent des noms qui se ressemblent et qu'il peut donc s'agir d'une erreur de notre part. Dans Solve , les premières accolades indiquent les inconnues recherchées, les deuxièmes, celles à éliminer. Vous pouvez donc, si vous le souhaitez, transférer une inconnue d'une accolade à l'autre.
ClearAll["Global`*"];Off[General::spell1];
Vmol=24.;
système={
n…dioxygène==3 n…éthène+5 n…propane+6 n…butène,
n…dioxyde…carbone==2 n…éthène+3 n…propane+4 n…butène,
n…eau==2 n…éthène+4 n…propane+4 n…butène,
v…éthène==Vmol n…éthène,v…dioxygène==Vmol
n…dioxygène,
v…dioxyde…carbone==Vmol n…dioxyde…carbone,
v…propane==Vmol n…propane,v…butène==Vmol n…butène,
v…eau==0.,
v…éthène+v…propane+v…butène==0.100,
v…dioxyde…carbone==0.274,v…dioxygène==0.436 };
Solve[système,{n…éthène,n…propane,n…butène},
{n…dioxyde…carbone,n…eau,n…dioxygène,v…éthène,
v…dioxygène,v…dioxyde…carbone,v…propane,v…butène,v…eau}]
{{n…éthène -> 0.00158333, n…propane -> 0.00208333,
n…butène ->0.0005}}
Nous obtenons une réponse numérique, puisque nous avons fixé les valeurs numériques des paramètres. Il n'est dès lors pas évident que les résultats soient dépendants ou pas du volume molaire. Pour nous en assurer, nous n'affectons plus de valeur numérique à celui-ci.
Nous devons effacer par Clear la définition de Vmol, mais
aussi les valeurs numériques trouvées au paragraphe précédent.
Le plus simple est alors de faire un effacement global par ClearAll . Mais
en ce cas, le système d'équations n'est plus en mémoire;
il faut donc le réécrire (par copier, coller). Afin de gagner
de la place dans cet ouvrage, nous avons effacé, après
calcul, ce système.
ClearAll["Global`*"]; système={ .... };
Eliminate[système,{n…éthène,n…butène,v…éthène,
n…dioxyde…carbone,n…eau,n…dioxygène,v…dioxygène,
v…dioxyde…carbone,v…propane,v…butène,v…eau}]
Eliminate[système,{Vmol,n…butène,v…éthène,
n…dioxyde…carbone,n…eau,n…dioxygène,v…dioxygène,
v…dioxyde…carbone,v…propane,v…butène,v…eau}]
Eliminate[système,{Vmol,n…éthène,(*v…éthène,*)
n…dioxyde…carbone,n…eau,n…dioxygène,v…dioxygène,
v…dioxyde…carbone,v…propane,v…butène,v…eau}]
Nous obtenons :
20. n…propane Vmol==1.
25. n…éthène==19. n…propane
25. n…butène==6. n…propane&&500. v…éthène==19.
La première réponse est une équation qui nous apprend que la quantité de propane obtenue dépend du volume molaire. Les autres nous montrent que les rapports entre les différentes quantités de propane, éthène et butène sont eux indépendants du volume molaire.
Essayons une autre méthode consistant à résoudre le même système, Vmol , étant cette fois une variable littérale. En retirant les points-virgules après solutions , sol…n…éth , sol…n…prop , vous pourrez vous convaincre de la complexité du problème. Vous pourrez aussi demander sol…n…éth /sol…n…prop , puis Simplify [ sol…n…éth / sol…n…prop ] , puis FullSimplify. Cette dernière instruction donne le nombre 0,76 qui est bien le rapport de 19 à 25 .
ClearAll["Global`*"]; système={ ...... };
solutions=Solve[système,{n…éthène,n…propane,n…butène},
{n…dioxyde…carbone,n…eau,n…dioxygène,v…éthène,
v…dioxygène,v…dioxyde…carbone,v…propane,v…butène,v…eau}];
sol…n…éth=n…éthène/. solutions[[1]];
sol…n…prop=n…propane/.solutions[[1]];
FullSimplify[sol…n…éth/sol…n…prop]
0.76
La puissance de calcul de Mathematica nous permet de tenir compte
du volume de la phase liquide formée; ici nous supposons que le
volume indiqué dans l'énoncé correspond à l'ensemble
des deux phases.
Vmol=24.;
système02={
n…dioxygène==3 n…éthène+5 n…propane+6 n…butène,
n…dioxyde…carbone==2 n…éthène+3 n…propane+4 n…butène,
n…eau==2 n…éthène+4 n…propane+4 n…butène,
v…éthène==Vmol n…éthène,v…dioxygène==Vmol
n…dioxygène,
v…dioxyde…carbone==Vmol n…dioxyde…carbone,
v…propane==Vmol n…propane,v…butène==Vmol n…butène,
v…eau==n…eau 0.018, v…éthène+v…propane+v…butène==0.100,
v…dioxyde…carbone+v…eau==0.274,v…dioxygène==0.436 };
Solve[système02,{n…éthène,n…propane,n…butène},
{n…dioxyde…carbone,n…eau,n…dioxygène,v…éthène,
v…dioxygène,v…dioxyde…carbone,v…propane,v…butène,v…eau}]
Réponse :
n…éthène -> 0.00157319, n…propane -> 0.00211375,
n…butène -> 0.00047972
( Les doubles accolades ont été effacées ). A comparer à la solution précédente :
{{n…éthène -> 0.00158333, n…propane -> 0.00208333,
n…butène -> 0.0005}}
Supprimons maintenant l'une des équations, en écrivant
le volume global des réactifs gazeux, combustibles plus dioxygène,
sans donner séparément le volume de dioxygène employé.
v…dioxygène devient un paramètre de la réaction ;
nous pouvons obtenir l'expression d'une inconnue, ici v…éthène
, en fonction de v …dioxygène qu'il suffit de ne pas écrire
dans la deuxième accolade de Solve, celle qui comprend les paramètres
à éliminer.
Vmol=24.;
système04={
n…dioxygène==3 n…éthène+5 n…propane+6n…butène,
n…dioxyde…carbone==2 n…éthène+3 n…propane+4 n…butène,
n…eau==2 n…éthène+4 n…propane+4 n…butène,
v…éthène==Vmol n…éthène,v…dioxygène==Vmol
n…dioxygène,
v…dioxyde…carbone==Vmol n…dioxyde…carbone,
v…propane==Vmol n…propane,v…butène==Vmol n…butène,
v…eau==0.,v…éthène+v…propane+v…butène+v…dioxygène==0.536,
v…dioxyde…carbone==0.274 };
Simplify[Solve[système04,{v…éthène},{n…dioxygène,n…éthène,n…propane,n…butène,
n…dioxyde…carbone,
n…eau,v…dioxyde…carbone,v…propane,v…butène,v…eau}]]
Réponse :
{{v…éthène -> 1.346 -3. v…dioxygène}}
Cette fois-ci, nous posons le système d'équations et demandons l'élimination d'une variable. Nous obtenons un système d'équations séparées par des ET logiques, && .
Eliminate[système04,{vdioxygène}]
n…butène==0.0005&&n…dioxygène==0.017125\[InvisibleSpace]+0.0208333
v…propane&&
n…éthène==0.00470833\[InvisibleSpace]-0.0625 v…propane&&
n…propane==0.\[InvisibleSpace]+0.0416667 v…propane&&
n…eau==0.0114167\[InvisibleSpace]+0.0416667 v…propane&&
n…dioxyde…carbone==0.0114167&&v…butène==0.012&&v…dioxyde…carbone==0.274&&
v…dioxygène==0.411\[InvisibleSpace]+0.5 v…propane&&v…eau==0.&&
v…éthène==0.113\[InvisibleSpace]-1.5 v…propane
> restart;
Vmol:=24:
systeme:={n_dioxygene=3*n_ethene+5*n_propane+6*n_butene,n_dioxyde_carbone=2*
n_ethene+3*n_propane+4*n_butene,n_eau=2*n_ethene+4*n_propane+4*n_butene,
v_ethene=Vmol*n_ethene,v_dioxygene=Vmol*n_dioxygene,v_dioxyde_carbone=Vmol*
n_dioxyde_carbone,v_propane=Vmol*n_propane,v_butene=Vmol*n_butene,v_eau=0.,
v_ethene+v_propane+v_butene=0.100,v_dioxyde_carbone=0.274,v_dioxygene=0.436}:
assign(solve(systeme,{n_ethene,n_propane,n_butene,n_dioxyde_carbone,n_eau,
n_dioxygene,v_ethene,v_dioxygene,v_dioxyde_carbone,v_propane,v_butene,
v_eau})):n_ethene;n_propane;n_butene;
> restart;
systeme:={n_dioxygene=3*n_ethene+5*n_propane+6*n_butene,n_dioxyde_carbone=2*
n_ethene+3*n_propane+4*n_butene,n_eau=2*n_ethene+4*n_propane+4*n_butene,
v_ethene=Vmol*n_ethene,v_dioxygene=Vmol*n_dioxygene,v_dioxyde_carbone=Vmol*
n_dioxyde_carbone,v_propane=Vmol*n_propane,v_butene=Vmol*n_butene,v_eau=0.,
v_ethene+v_propane+v_butene=0.100,v_dioxyde_carbone=0.274,v_dioxygene=0.436}:
assign(solve(systeme,{n_ethene,n_propane,n_butene,n_dioxyde_carbone,n_eau,
n_dioxygene,v_ethene,v_dioxygene,v_dioxyde_carbone,v_propane,v_butene,
v_eau})):n_ethene;n_propane;n_butene;
n_ethene/n_propane;
> restart;
Vmol:=24:
systeme02:={n_dioxygene=3*n_ethene+5*n_propane+6*n_butene,n_dioxyde_carbone=
2*n_ethene+3*n_propane+4*n_butene,n_eau=2*n_ethene+4*n_propane+4*n_butene,
v_ethene=Vmol*n_ethene,v_dioxygene=Vmol*n_dioxygene,v_dioxyde_carbone=Vmol*
n_dioxyde_carbone,v_propane=Vmol*n_propane,v_butene=Vmol*n_butene,v_eau=
n_eau*0.018,v_ethene+v_propane+v_butene=0.100,v_dioxyde_carbone+v_eau=0.274,
v_dioxygene=0.436}:
assign(solve(systeme02,{n_ethene,n_propane,n_butene,n_dioxyde_carbone,n_eau,
n_dioxygene,v_ethene,v_dioxygene,v_dioxyde_carbone,v_propane,v_butene,
v_eau})):n_ethene;n_propane;n_butene;
> restart;
Vmol:=24:
systeme04:={n_dioxygene=3*n_ethene+5*n_propane+6*n_butene,n_dioxyde_carbone=
2*n_ethene+3*n_propane+4*n_butene,n_eau=2*n_ethene+4*n_propane+4*n_butene,
v_ethene=Vmol*n_ethene,v_dioxygene=Vmol*n_dioxygene,v_dioxyde_carbone=Vmol*
n_dioxyde_carbone,v_propane=Vmol*n_propane,v_butene=Vmol*n_butene,v_eau=0.,
v_ethene+v_propane+v_butene+v_dioxygene=0.536,v_dioxyde_carbone=0.274}:
assign(solve(systeme04,{n_ethene,n_propane,n_butene,n_dioxyde_carbone,n_eau,
n_dioxygene,v_ethene,v_dioxyde_carbone,v_propane,v_butene,v_eau})):v_ethene;
La supériorité des logiciels de calcul formel sur
le solveur apparaît écrasante. Non seulement ils permettent
de trouver des solutions numériques approchées avec n'importe
quel degré de précision, mais en plus ils donnent, si elles
existent, les solutions exactes, sous forme numérique ou littérale.
Remarquez qu'à l'affichage des solutions numériques,
pour des raisons de facilité de lecture, seuls 6 chiffres significatifs
sont retenus, mais qu'en interne, la précision numérique
est de loin supérieure. Voici un des résultats obtenus au
paragraphe 5 : n…butène -> 0.000479719579369054738`