Mathématiques avec Python et Ruby/Résolution de systèmes en Ruby

De testwiki
Aller à la navigation Aller à la recherche

Modèle:Mathématiques avec Python et Ruby

Modèle:Cadre code

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:

{3x2y=1x+y=8

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 {3x2y=1x+y=8 peut aussi s'écrire matriciellement (3211)(xy)=(18) soit AX=B avec A=(3211) et B=(18). Alors sa solution X=(xy) s'obtient par le calcul matriciel X=A1B, 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.