
En notant x le prix d'un xylophone et y celui d'un youkoulélé, l'énoncé se traduit algébriquement par 2y=3x+1 et x+y=8.
On va donc voir comment résoudre le système de deux équations à deux inconnues suivant:
Méthode itérative
Dans le cas présent, il se trouve que x et y sont entiers naturels. Si on sait que c'est le cas, on peut les chercher par tâtonnement avec une boucle sur x et sur y. On va successivement fabriquer un tableau bidimensionnel avec les entiers de 0 à 100 (deux premières lignes) puis regarder quels couples de ce tableau vérifient à la fois les deux conditions données par le système:
total=[[]] (0..100).each{|x| (0..100).each{|y| total.push([x,y])}} solutions=total.select{|c| 3*c[0].to_f-2*c[1].to_f==-1 and c[0].to_f+c[1].to_f==8} puts(solutions)
Méthode algébrique
Le système peut aussi s'écrire matriciellement
soit
avec
et
. Alors sa solution
s'obtient par le calcul matriciel
, ce qui se fait directement avec le module matrix de Ruby:
require 'matrix' require 'mathn' A=Matrix[[3,-2],[1,1]] B=Matrix[[-1],[8]] solution=A.inverse*B puts(solution)
En ayant choisi mathn avec, les solutions s'écrivent automatiquement sous forme de fractions si elles ne sont pas entières.
