π
<-

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

Message non lude Urzhad » 03 Déc 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: Tout sélectionner
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
Avatar de l’utilisateur
Urzhad
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Prochain niv.: 60%
 
Messages: 3
Inscription: 03 Déc 2014, 17:54
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: M1

Re: Négliger un terme dans une équation

Message non lude Bisam » 04 Déc 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: Tout sélectionner
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
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Négliger un terme dans une équation

Message non lude Urzhad » 04 Déc 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: Tout sélectionner
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: Tout sélectionner
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
Avatar de l’utilisateur
Urzhad
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Prochain niv.: 60%
 
Messages: 3
Inscription: 03 Déc 2014, 17:54
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: M1

Re: Négliger un terme dans une équation

Message non lude Bisam » 06 Déc 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 ?
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Négliger un terme dans une équation

Message non lude Urzhad » 09 Déc 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.
Avatar de l’utilisateur
Urzhad
Niveau 1: MD (Membre Débutant)
Niveau 1: MD (Membre Débutant)
Prochain niv.: 60%
 
Messages: 3
Inscription: 03 Déc 2014, 17:54
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: M1

Re: Négliger un terme dans une équation

Message non lude Bisam » 09 Déc 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: Tout sélectionner
invt(1-a,99)*.88=1.89
tu pourrais simplement calculer :
Code: Tout sélectionner
a:=1-tCdf(-oo, 1.89/0.88, 99)

De même, au lieu de résoudre
Code: Tout sélectionner
invt(0.99, n-1)*0.0249/√(n) =0.01
tu pourrais essayer de résoudre :
Code: Tout sélectionner
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
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile


Retourner vers Problèmes divers / Aide débutants

Qui est en ligne

Utilisateurs parcourant ce forum: ClaudeBot [spider] et 34 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
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
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1049 utilisateurs:
>1004 invités
>38 membres
>7 robots
Record simultané (sur 6 mois):
7582 utilisateurs (le 25/06/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)