π
<-

Négliger un terme dans une équation

:32tins: :32tinsktpb: :32tinsktpn: :32tinscas: :32tinstpkc: :32tinstpktpb: :32tinstp: :32tinscastp: :32tinscmc: :32tinscx: :32tinscxcas:

Négliger un terme dans une équation

Unread postby Urzhad » 03 Dec 2014, 18:08

Bonjour,

Je conçois actuellement un petit programme pour résoudre plus simplement des exercices portant sur la commande numérique d'un système. Le but étant, à partir de trois matrices de départ, calculer des gains qui servirons ensuite à être implémenter dans un programme matlab/Simulink pour réaliser la commande d'un moteur. Seulement, l'une des fonctions de mon programme n'est pas au point:

Code: Select all
Define LibPub calculh(f,g,v,w,l,n)=
Func
:Local h,j,u,p2,p1,f1,g1
:Disp round(g|t=l,3)
:[h1,h2]→h
:Define j=det(z*identity(n)-(round(f|t=l,3)+round(g|t=l,3)*h))
:Disp "equation caractéristique"
:round(j,3)
:Disp expand(j)
:polyCoeffs(j)→u
:expand(−u[2])→u[2]
:expand(u[3])→u[3]
:p1:=2*^(−v*w*l)*cos(w*l*√(1-v^(2)))
:p2:=^(−2*v*w*l)
:Disp "équation à résoudre"
:Disp p1=u[2]
:Disp p2=u[3]
:Return solve(system(u[2]=p1,u[3]=p2),h1,h2)
:EndFunc

f est une matrice 2*2 et g 2*1 (une colonne). Je cherche dans cette fonction à faire une identification entre les coefficients d'une équation déterminées à partir des matrices f et g, et les coefficients p1 et p2 de l'équation caractéristique afin de déterminer les gains h1 et h2. Voila ce que j'obtiens:
equation caractéristique
z^(2)-0.051*h1*z-0.636*h2*z-1.644*z+6.36e−16*h1*h2-0.045327*h1+0.636*h2+0.740327
équation à résoudre
1.70209=0.051*h1+0.636*h2+1.644
0.740818=h1*(6.36e−16*h2-0.045327)+0.636*h2+0.740327
h1=−1.888764705882215 and h2=1.51457547169814 or h1=0. and h2=0.


Les résultats ne sont pas les bons(normalement 0.603 et 0.043) parce qu'il y a un terme qui fausse toute l'équation: 6.36e−16*h1*h2. On est censé pouvoir négliger ce terme pour réaliser le calcul de h1 et h2. J'ai tout essayé, des arrondis et des troncatures notamment, mais impossible de faire disparaître ce terme de mon équation. C'est pourquoi j'en viens à demander votre aide. Si vous avez besoin de plus de détails (calcul de f et g notamment) je peux les fournir.

Merci à la grande âme qui se penchera sur mon problème
Cordialement
User avatar
Urzhad
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: 03 Dec 2014, 17:54
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: M1

Re: Négliger un terme dans une équation

Unread postby Bisam » 04 Dec 2014, 15:34

Tout d'abord, je te conseille vivement de ne pas faire d'arrondis au milieu de tes calculs, tu risques d'accumuler les erreurs.
Il vaut mieux ne faire des arrondis que lors des phases d'affichage.

Mais le problème ne vient pas de là.
En effet, avec les valeurs que tu donnes :
équation à résoudre
1.70209=0.051*h1+0.636*h2+1.644
0.740818=h1*(6.36e−16*h2-0.045327)+0.636*h2+0.740327

la calculette trouve 2 solutions :
h1=−1.8887647058822*10^15 and h2=1.514575471698*10^14 or h1=0.597952806586 and h2=0.043387432176

Si on néglige le terme en h1*h2, la calculette ne trouve plus que la solution non aberrante :
h1=0.597952806586 and h2=0.043387432176

Elle ne trouve donc pas ce que tu dis être la solution...

Donc, d'une part les données sont probablement fausses (ou bien c'est ton résultat supposé qui l'est), et d'autre part, la calculette trouve bien la même solution, que l'on néglige ou non le terme en h1*h2.
Enfin, on pourrait le supprimer de plusieurs façons différentes, aucune n'étant vraiment simple... mais il faudrait déjà trouver où est l'erreur.

PS : Je te réécris ce que j'ai compris de ton code, afin qu'il évite les accumulations d'erreurs... et qu'il fasse réellement ce que tu attends de lui :
Code: Select all
Define LibPub calculh(f,g,v,w,l,n)=
Func
:Local h,j,u,p2,p1,f1,g1
:Disp round(g|t=l,3)
:[h1,h2]→h
:det(z*identity(n)-(f+g*h)|t=l))→j
:Disp "équation caractéristique"
:Disp expand(round(j,3))=0
:polyCoeffs(j)→u
:expand(−u[2])→u[2]
:expand(u[3])→u[3]
:p1:=2*^(−v*w*l)*cos(w*l*√(1-v^(2)))
:p2:=^(−2*v*w*l)
:Disp "équation à résoudre"
:Disp p1=u[2]
:Disp p2=u[3]
:Return solve(system(u[2]=p1,u[3]=p2),h1,h2)
:EndFunc
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Négliger un terme dans une équation

Unread postby Urzhad » 04 Dec 2014, 20:14

Merci pour ta réponse.

Je crois que ça vient d'une incompréhension bête de ma part. Lorsque ma calculatrice m'a affiché
h1=−1.888764705882215 and h2=1.51457547169814 or h1=0. and h2=0.

J'ai cru que pour la deuxième solution h1 et h2 étaient tout deux égaux à 0 (ce qui me semblait illogique vu qu'en remplaçant par 0 on tombe sur une constante =0). En réalité, elle calculait les bons résultats, mais ne les a pas affiché complétement. Ma question va sembler bête mais... Comment faire en sorte qu'elle affiche les résultats en entier? J'ai réécris ton code dans une deuxième fonction, il calcule bien les mêmes résultats, mais n'affiche toujours pas les décimales après la virgule, autrement dis j'obtiens encore le résultat suivant
h1=0. and h2=0. or h1=1.904557645462715 and h2=−1.514200902415414
.

Je suis sur que ça doit provenir d'un mauvais réglage, mais je ne parviens toujours pas à visualiser les décimales de la première solution.



J'en profite pour ajouter un deuxième problème sur lequel je suis bloqué, dans un domaine différent, celui des statistiques. Dans le cas d'un calcul sur la taille d'un échantillon pour des statistiques, je dois résoudre la formule
invt(0.99,n-1)*0.0249/n = 0.01
. Je tape donc
Code: Select all
solve(invt(0.99,n-1)*0.0249/√(n) =0.01,n)
Et je tombe sur une erreur de domaine. Y-a-t-il des limites à la résolution d'équation avec la fonction solve?
De la même manière, si je tape
Code: Select all
solve(invt(1-a,99)*0.8=1.89,a)
, j'obtiens comme résultat:
invt(1-a,99)=2.3625
Peut-on obtenir un résultat exact de a? Ou faut-il le résoudre à la main?

Merci encore pour avoir pris le temps de répondre et je m'excuse de mélanger deux problèmes dans un seul sujet.
Cordialement
User avatar
Urzhad
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: 03 Dec 2014, 17:54
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: M1

Re: Négliger un terme dans une équation

Unread postby Bisam » 06 Dec 2014, 10:34

Je ne comprends pas cette erreur d'affichage... elle n'a pas lieu chez moi !

Quant à ton deuxième problème, il est facile à comprendre : la calculette ne connait pas la fonction "invt" que tu veux lui faire utiliser ! Qu'est-elle censée faire ?

Au fait, sais-tu que la calculette contient déjà de nombreuses fonctions financières qui font sans doute déjà ce que tu cherches à faire ?
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Négliger un terme dans une équation

Unread postby Urzhad » 09 Dec 2014, 20:10

La fonction invt existe dans la calculette nspira cx cas. C'est une fonction qui intervient dans le calcul de statistique et qui permet de retourner la puissance d'un test. J'ai finalement réussi à résoudre le problème en ajoutant une condition sur n. Pour le problème d'affichage, je n'ai pas réussi à le régler et ça me pose toujours problème. A tout hasard, peux-tu me transmettre les réglages de ton classeur sur ta calculatrice?

Cordialement.
User avatar
Urzhad
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Level up: 60%
 
Posts: 3
Joined: 03 Dec 2014, 17:54
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: M1

Re: Négliger un terme dans une équation

Unread postby Bisam » 09 Dec 2014, 20:55

Ah, désolé... je ne connaissais pas la fonction "invt" (je ne suis pas maître ès "statistiques", il faut dire...). Je pense que c'est uniquement une fonction numérique qui comporte très probablement un solveur. Il est assez logique que la calculette ne sache pas l'utiliser avec la fonction "solve".

Mais en fait, elle calcule la réciproque de la fonction de répartition de la loi T de Student... et donc plutôt que de résoudre
Code: Select all
invt(1-a,99)*.88=1.89
tu pourrais simplement calculer :
Code: Select all
a:=1-tCdf(-oo, 1.89/0.88, 99)

De même, au lieu de résoudre
Code: Select all
invt(0.99, n-1)*0.0249/√(n) =0.01
tu pourrais essayer de résoudre :
Code: Select all
tCdf(-oo, 0.01/0.0249*√(n), n-1)=0.99
... mais ça ne marche pas mieux.
Il ne reste plus que la possibilité de faire une petite dichotomie.

Quant à mes paramètres d'affichage, ils sont très classiques :
  • Afficher chiffres : Flottant
  • Angle : Radian
  • Format Exponentiel : Normal
  • Réel ou Complexe : Rectangulaire
  • Mode de calcul : Auto
  • Format Vecteur : Rectangulaire
  • Base : Décimale
  • Système d'unités : SI
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile


Return to Problèmes divers / Aide débutants

Who is online

Users browsing this forum: ClaudeBot [spider] and 23 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2530 utilisateurs:
>2474 invités
>49 membres
>7 robots
Record simultané (sur 6 mois):
7582 utilisateurs (le 25/06/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)