Voir le flux RSS

autran

Bibliothèque JavaScript pour manipuler les polynomes (1ere partie)

Note : 2 votes pour une moyenne de 5,00.
par , 14/01/2017 à 19h29 (436 Affichages)
Pour faire suite à mon dernier billet (peut-on développer avec JavaScript comme avec les autres langages objets) je me lance dans l'écriture d'une bibliothèque permettant de manipuler des fonctions polynômes. J’ai eu beau chercher sur internet, je n’ai rien trouvé de simple et rapide dans ce langage. Aussi, j’ai décidé de développer 2 classes pour manipuler les fonctions polynômes.
Le besoin est assez simple :
Construire des polynômes
Additionner (soustraire) ou multiplier entre eux ces polynômes
Dériver ou intégrer des polynômes
L’idée est de partir du principe qu'un polynôme est une collection de monôme. Un monôme est défini par son degré (puissance à laquelle est élevée la variable) et son coefficient.
Afin de pallier au problème des polynômes creux une telle implémentation en Java mériterait d'avoir systématiquement recours à une liste, mais en JavaScript un simple tableau sera suffisant dans la mesure où le langage nous offre un objet Array qui se redimensionne automatiquement.
Nous aurons donc une classe Monome et une classe Polynome. Comme la dérivation et l'intégration sont linéaires pour les polynômes, notre architecture nous permettra de mettre à profit la délégation entre ces 2 objets.
Dans ce premier billet, je vous livre la classe Monome et une IHM de test en HTML5 pour la tester.
le fichier monome.js :
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class Monome {
  constructor(puissance, valeur) {
    this.degre = puissance;
  	this.coef = valeur;
    this.integrale = () => new Monome(this.degre+1, this.coef/(this.degre+1));
    this.toString = () => this.coef + "x^" + this.degre;
    this.derivee = () => this.degre === 0 ? new Monome(0,0) : new Monome(this.degre-1, this.degre*this.coef);
    this.calculer = x => this.coef * Math.pow(x, this.degre);
    this.multiplier = monome => new Monome(this.degre + monome.degre, this.coef * monome.coef);
    this.compareTo = monome => this.degre - monome.degre;
  }
}
et le fichier monome.html pour tester la classe
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<!doctype html>
<html lang="fr">
	<head>
		<meta charset="UTF-8">
		<title> Calcul de polynomes </title>
		<script type="text/javascript" src="monome.js"></script>
		<script type="text/javascript">
 
                        function showPolynome1() {
                                var coef1 = parseFloat(document.getElementById("coef1").value, 10);
                                var degre1 = parseInt(document.getElementById("degre1").value, 10);
                                var monome1 = new Monome(degre1, coef1);
                                document.getElementById("poly1").innerHTML = monome1.toString();
                        }
 
                        function showPolynome2() {
                                var coef2 = parseFloat(document.getElementById("coef2").value, 10);
                                var degre2 = parseInt(document.getElementById("degre2").value, 10);
                                var monome2 = new Monome(degre2, coef2);
                                document.getElementById("poly2").innerHTML = monome2.toString();
                        }
 
                        function derivee1() {
                                var coef1 = parseFloat(document.getElementById("coef1").value, 10);
                                var degre1 = parseInt(document.getElementById("degre1").value, 10);
                                var monome1 = new Monome(degre1, coef1);
                                document.getElementById("deriv1").innerHTML = monome1.derivee().toString();
                        }
 
                        function derivee2() {
                                var coef2 = parseFloat(document.getElementById("coef2").value, 10);
                                var degre2 = parseInt(document.getElementById("degre2").value, 10);
                                var monome2 = new Monome(degre2, coef2);
                                        document.getElementById("deriv2").innerHTML = monome2.derivee().toString();
                        }
 
                        function integrale1() {
                                var coef1 = parseFloat(document.getElementById("coef1").value, 10);
                                var degre1 = parseInt(document.getElementById("degre1").value, 10);
                                var monome1 = new Monome(degre1, coef1);
                                var result = degre1 === -1 ? coef1 + "Log(x)" : monome1.integrale().toString();         
                                document.getElementById("integ1").innerHTML = result;
                        }
 
                        function integrale2() {
                                var coef2 = parseFloat(document.getElementById("coef2").value, 10);
                                var degre2 = parseInt(document.getElementById("degre2").value, 10);
                                var monome2 = new Monome(degre2, coef2);
                                var result = degre2 === -1 ? coef2 + "Log(x)" : monome2.integrale().toString();         
                                document.getElementById("integ2").innerHTML = result;
                        }
 
                        function multiplier() {
                                var coef1 = parseFloat(document.getElementById("coef1").value, 10);
                                var degre1 = parseInt(document.getElementById("degre1").value, 10);
                                var monome1 = new Monome(degre1, coef1);
                                var coef2 = parseFloat(document.getElementById("coef2").value, 10);
                                var degre2 = parseInt(document.getElementById("degre2").value, 10);
                                var monome2 = new Monome(degre2, coef2);
                                document.getElementById("mult").innerHTML = monome1.multiplier(monome2).toString();
                        }
                </script>
	</head>
	<body>
		<section>
			<article>
				<legend><h1>Entrer les parametres des monomes</h1></legend>
				<fieldset>
					<label><b>Monome 1 : </b></label>
					<label>Degré =</label>
					<input id="degre1" type="number" style="width:100px">
					<label>Coefficient =</label>
					<input id="coef1" type="number" style="width:100px">
					<button type="submit" onclick="showPolynome1()">Afficher</button>
					<label id="poly1"></label>
					<button type="submit" onclick="derivee1()">Deriver</button>
					<label id="deriv1"></label>
					<button type="submit" onclick="integrale1()">Integrer</button>
					<label id="integ1"></label>
				</fieldset>
				<fieldset>
					<label><b>Monome 2 : </b></label>
					<label>Degré =</label>
					<input id="degre2" type="number" style="width:100px">
					<label>Coefficient =</label>
					<input id="coef2" type="number" style="width:100px">
					<button type="submit" onclick="showPolynome2()">Afficher</button>
					<label id="poly2"></label>
					<button type="submit" onclick="derivee2()">Deriver</button>
					<label id="deriv2"></label>
					<button type="submit" onclick="integrale2()">Integrer</button>
					<label id="integ2"></label>
				</fieldset>
			</article>
			<article>
				<legend><h1>Multiplication</h1></legend>
				<fieldset>
					<button type="submit" onclick="multiplier()">Multiplier</button>
					<label><b>Monome 1 x Monome 2  = </b></label>
					<label id="mult"></label>
				</fieldset>
			</article>
		</section>
	</body>
</html>
Dans le prochain billet je vous donnerai la deuxième et dernière classe (Polynome). De cette façon cela me permet de prendre encore quelques heures pour développer la classe finale et me faire remonter un bug éventuel dans la classe Monome.
Donc n'hésitez pas à réagir sur le fond ou la forme de cet article.

Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Viadeo Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Twitter Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Google Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Facebook Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Digg Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Delicious Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog MySpace Envoyer le billet « Bibliothèque JavaScript pour manipuler les polynomes (1ere partie) » dans le blog Yahoo

Mis à jour 15/01/2017 à 10h39 par autran

Catégories
HTML / CSS , Javascript , Développement Web

Commentaires