Simplifier une équation

Résolu
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 29 avril 2009 à 03:42
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 17 avril 2013 à 11:57
Salut, c'est pas souvent ... mais ça arrive, j'aurais besoin qu'un matheux se penche la dessus :

est-il possible de simplifier ceci :

J = (3 * (X div 3)) + (Y div 3)

N = (3 * (X mod 3)) + (Y mod 3)

sincerement, les equations ... c'est vachement loin (scolairement parlant) ... et je me souviens plus comment on les simplifie...
j'ai bien essayé de "tripoter" dans tout les sens ... mais ... ça donne rien, exemple :J (3*(X+Y)) div 9 gros caca qui pue.

dans le contexte : X et Y vont de 0 a 8
soit
for X := 0 to 8 do
  for Y := 0 to 8 do
  begin
   J[X,Y] := (3*(X div 3))+(Y div 3);
   N[X,Y] := (3*(X mod 3))+(Y mod 3);
  end;

la sequence que j'obtiens etant :
pour J :
  X
Y   0 1 2 3 4 5 6 7 8
  0 0,0,0,1,1,1,2,2,2,
  1 0,0,0,1,1,1,2,2,2,
  2 0,0,0,1,1,1,2,2,2,
  3 3,3,3,4,4,4,5,5,5,
  4 3,3,3,4,4,4,5,5,5,
  5 3,3,3,4,4,4,5,5,5,
  6 6,6,6,7,7,7,8,8,8,
  7 6,6,6,7,7,7,8,8,8,
  8 6,6,6,7,7,7,8,8,8

pour N :
  X
Y   0 1 2 3 4 5 6 7 8
  0
0,1,2,0,1,2,0,1,2,
  1
3,4,5,3,4,5,3,4,5,
  2
6,7,8,6,7,8,6,7,8,
  3
0,1,2,0,1,2,0,1,2,
  4
3,4,5,3,4,5,3,4,5,
  5
6,7,8,6,7,8,6,7,8,
  6
0,1,2,0,1,2,0,1,2,
  7
3,4,5,3,4,5,3,4,5,
  8 6,7,8,6,7,8,6,7,8

Il me semble que je ne puisse simplifier plus les deux equations ... mais dans le doute, je pose la question.

merci a tous pour vos futures réflexions sur ce sujet.
un peu de glucose pour votre cerveau ?

<hr size="2" width="100%" />

20 réponses

Utilisateur anonyme
29 avril 2009 à 08:49
Salut f0xi

Désolé mais ce n'est pas simplifiable .

1)Un petit rappel  :
a*(b+c)=a*b+a*c

Ton sentiment de simplification vient d'ici. Sauf que 3 n'est le facteur que de (X div 3)
et non
(Y div 3).

Il aurait fallut que tu es :
(3 * (X div 3)) + (3 *(Y div 3))=3*(
X div 3+Y div 3)

2)La division :

m/a+n/a = (m+n)/a et non (m+n)/(a*a)

Par contre (m/a)*(n/a)=(m*n)/a*a)

Par contre s'il y a autre chose apres (systeme d'équation, dérivée ect ect), il y a peut etre moyen de simplifier des calculs intermédiaires.
3
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
29 avril 2009 à 14:09
Salut,

Y'a ça aussi :

type
  TTab = array[0..8,0..8] of byte;




const J : TTab =
((0,0,0,1,1,1,2,2,2),
 (0,0,0,1,1,1,2,2,2),
 (0,0,0,1,1,1,2,2,2),
 (3,3,3,4,4,4,5,5,5),
 (3,3,3,4,4,4,5,5,5),
 (3,3,3,4,4,4,5,5,5),
 (6,6,6,7,7,7,8,8,8),
 (6,6,6,7,7,7,8,8,8),
 (6,6,6,7,7,7,8,8,8));
3
Utilisateur anonyme
29 avril 2009 à 14:39
Salut

<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta name="GENERATOR" content="OpenOffice.org 3.0 (Win32)" /><style type="text/css"><!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
--></style>Si on regarde de plus près on constate des redondances
 

X

Y  
0 1 2 3 4 5 6 7 8

 

0

0,0,0,1,1,1,2,2,2,
 
1

0,0,0,1,1,1,2,2,2,
 
2

0,0,0,1,1,1,2,2,2,
 
3

3,3,3,4,4,4,5,5,5,
 
4

3,3,3,4,4,4,5,5,5,
 
5

3,3,3,4,4,4,5,5,5,
 
6

6,6,6,7,7,7,8,8,8,
 
7

6,6,6,7,7,7,8,8,8,
 
8

6,6,6,7,7,7,8,8,8

Pourquoi
ne pas faire un tableau de J et utiliser cette redondance:

Var
  X,Y:Integer;
Begin
  For Y:=0 To 8 Do
  If Y Mod 3 =0 Then
    Begin
      For X:=0 To 8 Do
        Begin
          J[X,Y]:=(3*(X div 3))+(Y div 3);
          move(J[X,Y],J[X,Y+1],1);
          move(J[X,Y],J[X,Y+2],1);
        End;
    End;
End;

Je me trompe peut etre mais copier des octets est plus rapide que de refaire un J[X,Y]:=(3*(X div 3))+(Y div 3). Puis en plus tu pourrais utiliser des pointeurs
3
Utilisateur anonyme
29 avril 2009 à 14:59
Arfff le boulet : Y doit alors etre compris entre 0 et 6 sinon aie aie aie

Rectification :

Arfff le boulet :

Var
X,Y:Integer;
Begin
For Y:=0 To 6 Do
If Y Mod 3 =0 Then
Begin
For X:=0 To 8 Do
Begin
J[X,Y]:=(3*(X div 3))+(Y div 3);
move(J[X,Y],J[X,Y+1],1);
move(J[X,Y],J[X,Y+2],1);
End;
End;
End;
3

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

Posez votre question
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
29 avril 2009 à 15:20
@Cantador

Si le contexte change c'est pourri bien sûr.   Sinon, c'est ce qui donne la meilleure perf' 

Sinon, y'a aussi ça (sauf erreur) :

var
Qx,Rx,Qy,Ry: Word;
...
for X := 0 to 8 do
  for Y := 0 to 8 do
  begin
   DivMod(X,3,Qx,Rx);
   DivMod(Y,3,Qy,Ry);
   J[X,Y] :=  3 * Qx + Qy; // ou Qx+Qx+Qx+Qy
   N[X,Y] := 3 * Rx + Ry; // ou Rx+Rx+Rx+Ry
  end;
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
30 avril 2009 à 19:01
Bonsoir

Juste pour le plaisir !!!

Un petit rappel
  dividende modulo diviseur = dividende - diviseur * ( dividende div diviseur)
 
Si on pose :
  D = Dividende
  d = diviseur



On a alors :
  (D mod d) = D-d*(D div d)        [eq1]
et
  (D div d) = (D-(D mod d))/d      [eq2]



Soit  J 3(X div 3) + (Y div 3) J1 + J2   N 3(X mod 3) + (Y mod 3) N1 + N2
 
En utilisant l'équation [Eq1], et en posant T1=(X div 3) et T2=(Y div 3) on obtient :



J1=3*T1
N1=3*(X mod 3)
  =3*(X-3*(X div 3))
  =3*X-3*3*T1
  =3*X-3*J1
 
J2=T2
N2=(Y mod 3)
  =(Y-3*(Y div 3))
  =Y-3*J2
 
En utilisant l'équation [Eq2], et en posant T1=(X mod 3) et T2=(Y mod 3) on obtient :



N1=3*T1
J1=3*(X div 3)
  =3*(X-(X mod 3))/3
  =X-(X mod 3)
  =X-T1     
 
N2=T2
J2=(Y div 3)
  =(Y-(Y mod 3))/3
  =(Y-T2)/3 
 
Bref, le plus interessant (à première vue) semblerait être le calcul de N1 et de J1
à partie de l'équation [Eq2] soit :



T1 = (X mod 3) 
J  = (X-T1) + (Y div 3)
N  = (3*T1) + (Y mod 3)


En conclusion, cette "simplification" ne change pas grand chose, surtout face à un tableau précalculé.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
3
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 avril 2009 à 13:37
"
J = (3 * (X div 3)) + (Y div 3)
N = (3 * (X mod 3)) + (Y mod 3)
"

Pour les mod je ne sais pas du tout, mais pour le div ... moi je vois ceci :

3 * (X div 3)

Ca revient à diviser X par 3, puis multiplier ce résultat par 3 ... autant faire X !

3 * (X / 3) = X
X / 3 = X / 3

L'égalité est justifiée, donc 3 * (X div 3) équivaut à X ...

Tout ce que vois pour l'instant ...

Cordialement, Bacterius !
0
Utilisateur anonyme
29 avril 2009 à 13:50
Bacterius :  (15 Div 2)*2 = 14 et non 15 ;
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 avril 2009 à 13:55
Arf zut oui j'ai trop pensé mathématiques et pas assez "nombre entiers".
Ca ne marche que pour les nombres pairs ...
C'est bête ^^
Mais au fond, je me demande si ça ne serait pas plus rapide de travailler en Single et d'utiliser la division décimale (/) plutôt que d'effectuer (en nombre entier, certes) une division puis une multiplication ? Je ne crois pas au fond ...

Cordialement, Bacterius !
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
29 avril 2009 à 14:06
meci francky, c'est un peu plus clair.

en fait, pour generer les 81 chiffres, cela ne prend que 12 a 15 cycles. pas enorme.

j'ai simplifié en utilisant 4 tableaux et 2 additions. je descend a 5 a 7 cycles, ce qui est pas mal.

<hr size="2" width="100%" />
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 avril 2009 à 14:29
Salut,
dans le contexte : X et Y vont de 0 a 8
et si le contexte change ?

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 avril 2009 à 16:41
C'est f0xi qui va être content...
va enfin jouer au boulier compteur !

cantador
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 avril 2009 à 00:36
salut, merci pour toutes vos reponses.

@Bacterius :

oui X/3*3 = X mais X div 3 * 3 <> X
normal tu avait oublié le contexte des entiers

en fait comme je l'ai dis precedement j'utilise 4 tableaux de 9 valeurs (36) et pas un tableau de 81!

en gros cela donne :

var
  X,Y : integer;
const
  CXA : array[0..8] of integer = (0,0,0,3,3,3,6,6,6);
  CXB : array[0..8] of integer = (0,3,6,0,3,6,0,3,6);
  CYA : array[0..8] of integer = (0,0,0,1,1,1,2,2,2);
  CYB : array[0..8] of integer = (0,1,2,0,1,2,0,1,2);
begin
  for X := 0 to 8 do
    for Y := 0 to 8 do
     Square[X,Y] := @ColRow[CXA[X]+CYA[Y], CXB[X]+CYB[Y]];
end;

puisque le but est de transformer les coordonnées d'une matrice colones+lignes en matrice decoupée en 9 matrices de 3x3
donc de 9x9 a 9x3x3 :)

et vous aurez tous reconnus ... je vous le donne en mille, une grille de Sudoku.
le but etant ben sur d'avoir 3 mode de lecture de la matrice :
en colones ou en lignes par ColRow
et en carré de 3x3 par Square

<hr size="2" width="100%" />
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 avril 2009 à 13:04
Je me disais bien que le contexte devait surement avoir son importance sinon
f0xi nous aurait fourni les deux tableaux de résultats en demandant de faire un programme permettant de les obtenir..

Heureusement que f0xi a fait "un peu" l'école buissonnière pendant ses cours de maths sinon, nous serions dans de beaux draps aujourd'hui pour lire ses sources..
Déjà que c'est difficile.. !!!

cantador
0
fredelem Messages postés 136 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 1 décembre 2022 2
13 avril 2013 à 17:28
Désolé d'intervenir quatre ans après que la discussion soit terminée mais, ayant eu deux questions à poser ces temps-ci, je commence seulement à m'intéresser au forum. Je suis venu faire un tour dans les maths et comme le mot "simplifier" m'attire, j'ai été attiré par ce message.

S'il s'agissait d'une question faisant partie d'un problème, je pense que la réponse attendue était:

Pour le calcul de J: remplacer X par (X mod 3) et Y par (Y mod 3), ce qui donnait:
J = X + Y/3

Pour le calcul de N, je ne vois pas de simplification (car 3*(X mod 3), ce n'est pas égal à (3x mod 9).
Mais si on remplaçait X par (X mod 3) et Y par (Y mod 3), on obtenait
N= 3*X + Y

On s'apercevait alors de ce qui n'était pas évident a priori: N=3*J.
0
fredelem Messages postés 136 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 1 décembre 2022 2
13 avril 2013 à 20:09
Je me suis mal exprimé et ce que j'ai dit n'est pas clair.

J'aurais dû dire:
Posons
X' := X mod 3
et
Y' := Y mod 3

On s'aperçoit alors que les expressions


J = (3 * (X div 3)) + (Y div 3)
N = (3 * (X mod 3)) + (Y mod 3)

peuvent s'écrire:

J = X' + Y'/3
N = 3X' + Y'
0
fredelem Messages postés 136 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 1 décembre 2022 2
16 avril 2013 à 09:23
Je m'aperçois que je me suis trompé. Je reprends.

Je maintiens X'= (X mod 3) et Y= (Y mod 3)


Commençons par modifier J.
(X div 3) ça peut aussi s'écrire
. (X- (X Mod 3)) /3
ou
. (X/3) - (X'/3)

Donc si on multiplie ça par 3, on trouve (X - X')

(Y div 3) peut s'écrire (Y-Y')/3 soit (Y/3) - (Y'/3)

Donc J peut s'écrire (X - X') + (Y/3 - Y'/3)


A quoi est égal 3J ?
3J = 3X - 3X' + Y - Y
ou
(3X+Y) - (3X'+Y')

Pour N, aucun calcul à faire, ça vient tout seul

N= 3 X' + Y'.


[i] (On voit bien qu'on ne peut y apporter aucune simplification. C'est la somme de 2
nombres sans lien entre eux. C'est comme si on avait 3a+b , a et b n'ayant aucun lien entre eux.)/i

On voit que 3J = (3 X + Y) - N

d'où

J = X + Y/3 - N/3

Pas terrible comme simplification mais c'est mieux que rien.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 avril 2013 à 15:34
bonjour,

Tu sais, il doit en avoir un paquet de questions sans réponse
depuis 4 ans..

alors bienvenue au club

cantador
0
fredelem Messages postés 136 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 1 décembre 2022 2
16 avril 2013 à 19:32
D'accord mon intervention n'était pas absolument indispensable mais on ne sait jamais.

Si une commission d'enquête venait un jour vérifier le sérieux du groupe, elle pourrait constater qu'ici on ne rigole pas. Tant qu'il y a de la vie, il y a des réponses.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 avril 2013 à 11:57
cantador
0
Rejoignez-nous