équation à 20 inconnue

Cernunnos -  
JvDo Messages postés 1978 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voilà mon souci : je ne suis ni programmeur ni mathématicien, et je cherche à résoudre une équation telle que celle-ci : 80 a + 148 b + 464 c + ... + 2498 m = 13378

Comme outils, je n'ai en tout et pour tout que excel... ^__^ Hem...

Pourquoi faire ? Je participe à un jeu de simulation en ligne, dans lequel on peut espionner les forces ennemies, ce qui nous donne un total de points. Et le but serait de pouvoir connaître la composition "précise" de son armée. J'essaye de faire ça "à la main", à tâton, mais ce n'est pas évident.

J'y ai réfléchi un petit peu, et je pense que des solutions multiples sont envisageables pour chaque équation. Je pensais qu'on pouvait peut-être faire appel à un algorithme qui explorerait toutes les possibilités. A part ça, je n'ai pas la plus petite idée de la manière de procéder. J'ai lu sur une autre page de votre forum que l'on pouvait réduire l'équation de manière à arriver à une seule inconnue et que ce n'était pas facile. Est-ce possible sous excel ? Faisable par un débutant motivé ?

Merci de m'avoir lu.

Yann
A voir également:

24 réponses

mamiemando Messages postés 33777 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Le truc c'est que mathématiquement parlant il faut au moins 20 points de mesures linéairement indépendants pour résoudre le système (soit 20 équations, 1 par relevé de point). Et ça suppose effectivement que ce soit bien une équation linéaire. Pour s'en assurer l'idéal serait de pouvoir relever des points en ne faisant varier qu'une inconnue et vérifier qu'ils sont bien alignés.

Pour résoudre ton système de nombreuses méthodes sont possibles, mais à la main ça risque d'être un peu galère. Tu peux par exemple utiliser un outil comme matlab ou mapple pour résoudre le système (version étudiante).

Pour excel aucune idée.

Bon courage
3
pavarotti_39 Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   62
 
Faites un système de Kramer, avec ça vous résoudrez toutce que vous voudrez.
0
ADM
 
Salut,
Moi, je suis mathématicien ;) Et de toute évidence une seule équation à 20 inconnues donne des solutions multiples ! Tu ne trouveras jamais une solution unique.
Il te faudrait 20 équations à 20 inconnues pour espérer en avoir une... et encore il y a des exceptions si au moins 2 équations sont liées entre elles (càd dépendantes).
Après, il est effectivement faisable de lier une seule inconnue aux 19 autres, c’est d’ailleurs la solution ’’hard’’ de passer de 20 équations/20 inconnues à 19équations/19 inconnues (...) Ainsi de suite jusqu’à ne trouver qu’1 équation avec 1 inconnue, puis de remonter la chaîne à l’envers pour les différents résultats.
Dans ton cas, avec 1 équation, il y auras donc des solutions multiples !
0
Cernunnos
 
Je vais jeter un coup d'oeil sur les logiciels proposés, en espérant que ça fonctionne.

Pour les solutions multiples, ce n'est pas dit : Les multiplicateurs sont "fixes" (ainsi l'équation demande combien d'unités à 80 points, combien d'unités à 148 points, etc...). Mais une valeur-cible de 160, par exemple, il n'y a qu'une solution à léquation : c'est 2 x 80.

Quand je disais "à la main", c'était sous excel, avec une procédure essai-erreur et approximation : je tapais des hypothèses et essayait de retrouver le résultat en enlevant 1 par ci, en ajoutant 2 par là... Je n'ai pas pensé à une résolution graphique et j'avoue ne pas réussir à me représenter la chose.

Quand au système de Kramer, je suis désolé pour vous (et pour lui ^^) mais je ne crois pas en avoir entendu parler pendant mes études (ou alors sous un autre nom)
0
pavarotti_39 Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   62
 
Et les bordants, ça vous dit quelque chose ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cernunnos
 
Ca veut dire que je vous embête avec mes questions ? ^__^
Nan, désolé...

Est-ce qu'un programme existe qui suive le même raisonnement que moi ? Qui fasse une approximation, puis qui l'affine en changeant les paramètres a+2 b-1 pour approcher la valeur-cible (x) ? Puis qui, une fois une solution trouvée pour l'équation, recommence en partant d'autres valeurs ?

Je ne sais pas si je m'exprime assez clairement...
0
Nassim5555 Messages postés 732 Date d'inscription   Statut Membre Dernière intervention   97
 
salut ,
moi j'ai utilisé MATLAB ,il peut tout faire ce grand !
0
ADM
 
Salut !
Pour moi je reste persuadé qu'1 équation à 20 inconnues possède des solutions multiples !
Le système de Kramer fonctionne très bien, mais avec le meme nombre d'équations que d'inconnues, ce qui n'est pas le cas ici je pense... (à moins d'avoir mal compris).
Sinon, oui, j'appuis que Mapple est très bien (et facile à comprendre). Pour moi, Matlab est un peu plus délicat... mais c'est mon avis ! En tout cas, ils permettent de résoudre les Kramer, quand il en est question bien sur ;)
0
pavarotti_39 Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   62
 
Bien sûr, la solution doit être un sev de dimension 19.
0
ADM
 
Mais Matlab est très grand aussi, bien sur Nassim5555 !!! c'est juste un peu plus difficile pour un débutant je pense...
0
Nassim5555 Messages postés 732 Date d'inscription   Statut Membre Dernière intervention   97
 
oui c'est vrai faut connaitre son langage qui s'inspire du langage C ,comme moi je suis informaticien alors je me suis rapidement habitué ,mais quand on veut on peut ,faut juste un peu de volonté ;^) Bon courage !
0
Cernunnos
 
J'ai vu la version étudiante de maple à 99 $, à peu près 70 euros ? *aie*

Ca n'est pas possible. Je suis sans doute naïf, mais je pensais trouver un logiciel gratuit. Matlab est payant lui aussi. Et je ne sais pas si un clone pourrait faire l'affaire.

Dernière solution (?) : trouver une bonne âme disposant du dit logiciel et qui pourrait se lancer dans ce défi, pas très gratifiant, sans doute, mais oh combien glorieux ! Bien sûr je fournirai tous les détails et explications nécessaires... Peut-être un étudiant, voire un professeur ? En tant qu'exercice ? Je ne sais pas...

Un grand merci en tous cas à tou(te)s ceux et celles qui sont intervenus pour tenter de m'aider jusqu'ici.
0
Cernunnos
 
J'ai vu la version étudiante de maple à 99 $, à peu près 70 euros ? *aie*

Ca n'est pas possible. Je suis sans doute naïf, mais je pensais trouver un logiciel gratuit. Matlab est payant lui aussi. Et je ne sais pas si un clone pourrait faire l'affaire.

Dernière solution (?) : trouver une bonne âme disposant du dit logiciel et qui pourrait se lancer dans ce défi, pas très gratifiant, sans doute, mais oh combien glorieux ! Bien sûr je fournirai tous les détails et explications nécessaires... Peut-être un étudiant, voire un professeur ? En tant qu'exercice ? Je ne sais pas...

Un grand merci en tous cas à tou(te)s ceux et celles qui sont intervenus pour tenter de m'aider jusqu'ici.
0
mamiemando Messages postés 33777 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Tu as un matlab gratuit : scilab
0
Faust0 Messages postés 45 Date d'inscription   Statut Membre Dernière intervention   30
 
Bonjour

1)Les inconnues appartiennent elles à l'ensemble des entiers positifs?
ou non

2)Y a t il une borne haute et basse pour chaque inconnues?
par exemple "a" est un entier qui ne varie qu'entre 100 et 150

3) les coefficients (80, 148, 464..) sont ils tous positifs?
0
Cernunnos
 
@ mamie : Je vais chercher le scilab.

@ Fausto
1) oui
2) entre 0 et... pas de limite haute, mais 1000 me semble assez grand pour couvrir tous les cas de figure.
3) oui, tous positifs (et pairs, mais ça, c'est un détail)
0
Faust0 Messages postés 45 Date d'inscription   Statut Membre Dernière intervention   30
 
ah jusqu'à 1000
ben c'est pas trop compliqué
tu écris un petit programme en pascal, en fortran, en basic bref en ce que tu connais
tu fais 20 boucles imbriquées
tu testes pour voir si à un moment tu obtiens 13378 avec ta formule
dans ce cas tu imprimes les valeurs des indices de boucle
et tu continues pour les éventuelles valeurs suivantes
bestial mais efficace et un peu long mais c'est du temp machine c'est pour cela qu'il faudrait borner au mieux

quant à calculer le determinant d'un matrice de rang 20 je laisse ça aux matheux d'autant plus qu'on n'est pas dans un système de 20 équations à 20 inconnues.
0
Cernunnos
 
Alors, j'essaye d'imaginer ce programme

au milieu la fameuse formule, et un système de boucle ou on implémente les variables les unes après les autres de façon à couvrir tout le "spectre des possibilités" ? Ca ne fait pas 1000 exposant 20 solutions ? 10 exp 23 cas de figure ? Même en imaginant qu'on devrait trouver la solution dans le 1er 100ème de la recherche, ça fait quand même 10 puissance 19 calculs..., allez, on arrondit à 10 puissance 15 ^^

Sur la manière dont fonctionne le programme, je lui demande de faire a=1, b=0 c=0 puis de comparer le résultat à la cible. Si ce n'est pas bon, a=a+1 et on recommence. Quand a x 80 > 13378, on recommence avec a=0 et b=1 et ainsi de suite... Quand un résultat est bon, les valeurs a b c d... sont affichées.

C'est ça ? Je vais chercher un programme de basic, alors...
0
Faust0 Messages postés 45 Date d'inscription   Statut Membre Dernière intervention   30
 
c'est bien cela et c'est d'ailleurs ce que tu essayes de faire à la main et au pifomètre.
mais comme tu l'as très bien vu le nombre d'iterations est ENORME c'est pour cela qu'il faudra bien borner tes variables
Si tes paramètres sont bien positifs comme tu l'as dit et que tu fais bien une somme.
"a" est compris entre 0 et 13378/80 soit 153
pour "m" l'amplitude est limitée entre 0 et 5
etc...
0
Cernunnos
 
En fait j'ai fait un peu de basic étant ado, je devrais pouvoir y arriver, je suppose.

Mais le bornage se fera de lui-même, étant donné que dès que le résultat de l'équation est supérieur à 13378, il recommence avec d'autres valeurs...

Sinon, pour scilab, apparemment il n'existe que sous Linux...
0
JvDo Messages postés 1978 Date d'inscription   Statut Membre Dernière intervention   859
 
Bonjour à tous,

As-tu les coefficients de ton équation entière?

Je suis en train de faire tourner un bout de VBA sur un double core avec des coefficients que j'ai extrapolés de ton Post du début.

L'algorithme (bestial) commence par les coefficients les plus élevés.
Il vient de finir le 16ème coefficient en 33mn pour 3.260 solutions sur 2.392.140 combinaisons.
Il avait fait le niveau 14 en 8mn et le 15 en 12mn.

La quantité de réponses exactes risque de rendre la réponse à ta question initiale peu exploitable.

Naturellement, tout dépend des coefficients et du résultat à atteindre.

Ceci dit, mon programme n'est pas optimisé et c'est du VBA. Donc en C ça doit décoiffer..... un peu

j'ai pris comme coefficients :
80, 148, 464, 584, 642, 854, 912, 978, 1142, 1238, 1320, 1532, 1656, 1714, 1820, 1998, 2120, 2210, 2334, 2498 et 13378 comme résultat

une estimation à la louche du temps de traitement et du nombre de résultats me fait penser que dans quelques années, si tout va bien, tu auras une quantité astronomique de solutions à étudier....

Par contre, si tes coefficients n'ont pas tous le même poids (le même intérêt ou la même importance) il est possible de les ordonner pour que les premières solutions les concernent.

Cordialement

PS : 1h38mn pour le niveau 17 avec 9.670 résultat pour 6.922.226 combinaisons
0
Faust0 Messages postés 45 Date d'inscription   Statut Membre Dernière intervention   30
 
oui je pense que ça ne doit pas poser de problème de programmation
tu pourras utiliser just basic qui est gratuit
http://www.justbasic.com/
( je sens qu'on va se faire pourrir pour oser utiliser une pareille relique)

tu nous diras les resultats
0
cernunnos
 
Bé ?? Elle est où ma réponse ?
Zut, j'ai du faire une fausse manip, je recommence :-(

J'ai installé VisualBasic, mais je n'ai pas encore eu le temps de plonger dedans.

Ce qu'à fait JvDo est génial, c'est tout à fait ça. Par contre je suis surpris du nombre de solutions ! Peut-être que j'aurais du m'en douter...

Voilà les coefficients réels :
80 158 464 908 688 1612 1326 6042 5164 5180 8052 2724 1452 196 260 518 650 2040 1694 2498
Effectivement une pondération pourrait être faite pour classer les unités selon leur intérêt (certaines unités sont chères et de peu d'intérêt)

Une autre manière de limiter le nombre de variables est possible : dans le jeu on peut utiliser un espion qui nous informe du plus haut niveau d'unité chez l'ennemi.

Au niveau des calculs, y aurait-il un gain à simplifier tous les éléments par 2 (puisque tous les nombres sont pairs) ? Je suppose que ça doit être négligeable...

Vraiment, autant de résultats, ça risque effectivement d'être peu exploitable, sachant que le nombre donné, 13 378, était un exemple, et que ça peut aller très loin (100 000, 200 000...)
0