File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/MatriceCarree-MC6IbkYy.js.map
{"version":3,"file":"MatriceCarree-MC6IbkYy.js","sources":["../../src/lib/mathFonctions/outilsMaths.js","../../src/lib/mathFonctions/MatriceCarree.js"],"sourcesContent":["import FractionEtendue from '../../modules/FractionEtendue.js'\nimport { fraction } from '../../modules/fractions.js'\nimport { randint } from '../../modules/outils.js'\nimport { ecritureAlgebrique } from '../outils/ecritures.js'\nimport { matriceCarree } from './MatriceCarree.js'\nimport Decimal from 'decimal.js'\nimport { Polynome } from './Polynome.js'\n\n/**\n * retourne une FractionEtendue à partir de son écriture en latex (ne prend pas en compte des écritures complexes comme\n * \\dfrac{4+\\dfrac{4}{5}}{5-\\dfrac{3}{5}}\n * @param {string} fractionLatex la fraction écrite en latex (avec des accolades) exemple : \\frac{5}{7} ou \\dfrac{5}{7}\n * @returns {FractionEtendue}\n */\nexport function fractionLatexToMathjs (fractionLatex) {\n const parts = fractionLatex.split('{')\n const num = Number(parts[1].slice(0, -1))\n const den = Number(parts[2].slice(0, -1))\n return new FractionEtendue(num, den)\n}\n\n/**\n * delta(true) retourne dans un tableau des valeurs de a, b, c telles que b*b-4*a*c >0\n * delta(false) retourne dans un tableau des valeurs de a, b, c telles que b*b-4*a*c <0\n * @author Jean-Claude Lhote\n */\nexport function choisiDelta (positif) {\n let d, a, b, c\n do {\n a = randint(-5, 5, 0)\n b = randint(-5, 5, 0)\n c = randint(-5, 5, 0)\n d = b * b - 4 * a * c\n } while (positif ? d <= 0 : d >= 0)\n return [a, b, c]\n}\n\n/**\n * fonction qui retourne un polynome du second degré correctement écrit.\n * @param {number} a\n * @param {number} b\n * @param {number} c\n * @returns {string}\n */\nexport function expTrinome (a, b, c) {\n let expr = ''\n if (typeof a === 'number') {\n switch (a) {\n case 0:\n break\n case -1:\n expr += '-x^2'\n break\n case 1:\n expr += 'x^2'\n break\n default:\n expr += `${a}x^2`\n break\n }\n } else {\n expr += `${a}x^2`\n }\n if (typeof b === 'number') {\n switch (b) {\n case 0:\n break\n case -1:\n expr += '-x'\n break\n case 1:\n expr += '+x'\n break\n default:\n if (a === 0) {\n expr += `${b}`\n } else expr += `${ecritureAlgebrique(b)}x`\n break\n }\n } else {\n if (a === 0) {\n expr += `${b}x`\n } else {\n expr += `+${b}x`\n }\n }\n if (typeof c === 'number') {\n if (a === 0 && b === 0) {\n expr += `${c}`\n } else {\n if (c !== 0) {\n expr += `${ecritureAlgebrique(c)}`\n }\n }\n } else {\n expr += `+${c}`\n }\n return expr\n}\n\n/**\n * Une fonction qui retourrne le polynome de Lagrange passant par une liste de points\n * @param {{x:number,y:number}[]} listePoints\n * @return {Polynome}\n */\nexport function interpolationDeLagrange (listePoints) {\n // tout d'abord vérifier qu'il n'y a pas de doublons en x !\n const listeOrdonnee = listePoints.sort((el1, el2) => el1.x - el2.x)\n const setPoints = []\n for (let i = 1; i < listeOrdonnee.length; i++) {\n // si deux points qui se suivent dans la liste ordonnée ont des abscisses différentes, alors on peut stocker le plus petit\n if (listeOrdonnee[i - 1].x !== listeOrdonnee[i].x) setPoints.push(listeOrdonnee[i - 1])\n }\n // comme on n'a pas stocké le dernier, on le fait\n setPoints.push(listeOrdonnee[listeOrdonnee.length - 1])\n if (setPoints.length < 2) throw Error('Pour une interpolation de Lagrange, il faut au moins deux points d\\'abscisses différentes')\n const n = setPoints.length - 1\n // On initialise à zéro\n let result = 0\n for (let j = 0; j <= n; j++) {\n // pour un produit on initialise à 1\n let prod = 1\n for (let i = 0; i <= n; i++) {\n if (j !== i) {\n const den = setPoints[j].x - setPoints[i].x\n prod = new Polynome({ coeffs: [-setPoints[i].x / den, 1 / den] }).multiply(prod)\n }\n }\n prod = prod.multiply(setPoints[j].y)\n result = prod.add(result)\n }\n return result\n}\n\n/**\n * Fonction qui retourne les coefficients a et b de f(x)=ax²+bx+c à partir des données de x1,x2,f(x1),f(x2) et c.\n *@param {number} x1\n *@param {number} x2\n * @param {number} y1\n * @param {number} y1\n * @param {number} c\n * @return {[[number,number],[number,number]]}\n * @author Jean-Claude Lhote\n */\nexport function resolutionSystemeLineaire2x2 (x1, x2, fx1, fx2, c) {\n const matrice = matriceCarree([[x1 ** 2, x1], [x2 ** 2, x2]])\n const determinant = matrice.determinant()\n if (determinant.isEqual(0)) {\n return [[0, 0], [0, 0], [0, 0]]\n }\n const [a, b] = matrice.cofacteurs().transposee().multiplieVecteur([fx1 - c, fx2 - c])\n if (Number.isInteger(a) && Number.isInteger(b) && Number.isInteger(determinant)) {\n window.notify(`Les coefficients trouvés sont des entiers avant division par le déterminant,\n cela ne devrait pas arriver puisque multiplieVecteur() produit des FractionEtendue.\n Le déterminant est : ${determinant} et les numérateurs ${a} et ${b}`, { determinant, a, b })\n const fa = determinant.inverse.multiplieEntier(a)\n const fb = determinant.inverse.multiplieEntier(b)\n return [[fa.numIrred, fa.denIrred], [fb.numIrred, fb.denIrred]]\n } else {\n const fa = a.diviseFraction(determinant)\n const fb = b.diviseFraction(determinant)\n return [\n [fa.numIrred, fa.denIrred],\n [fb.numIrred, fb.denIrred]\n ]\n }\n}\n\n/**\n * Fonction qui retourne les coefficients a, b et c de f(x)=ax^3 + bx² + cx + d à partir des données de x1,x2,x3,f(x1),f(x2),f(x3) et d (entiers !)\n * sous forme de fraction irréductible. Si pas de solution (déterminant nul) alors retourne [[0,0],[0,0],[0,0]]\n * @author Jean-Claude Lhote\n */\nexport function resolutionSystemeLineaire3x3 (x1, x2, x3, fx1, fx2, fx3, d) {\n const matrice = matriceCarree([[x1 ** 3, x1 ** 2, x1], [x2 ** 3, x2 ** 2, x2], [x3 ** 3, x3 ** 2, x3]])\n const y1 = fx1 - d\n const y2 = fx2 - d\n const y3 = fx3 - d\n const determinant = matrice.determinant()\n if (determinant.isEqual(0)) {\n return [[0, 0], [0, 0], [0, 0]]\n }\n const [a, b, c] = matrice.cofacteurs().transposee().multiplieVecteur([y1, y2, y3])\n if (Number.isInteger(a) && Number.isInteger(b) && Number.isInteger(c) && Number.isInteger(determinant)) { // code caduque : determinant est une FractionEtendue de même que a,b et c\n const fa = determinant.inverse.multiplieEntier(a)\n const fb = determinant.inverse.multiplieEntier(b)\n const fc = determinant.inverse.multiplieEntier(c)\n window.notify(`Les coefficients trouvés sont des entiers avant division par le déterminant,\n cela ne devrait pas arriver puisque multiplieVecteur() produit des FractionEtendue.\n Le déterminant est : ${determinant} et les numérateurs ${a}, ${b} et ${c}`, { determinant, a, b, c })\n return [\n [fa.numIrred, fa.denIrred],\n [fb.numIrred, fb.denIrred],\n [fc.numIrred, fc.denIrred]\n ]\n } else {\n const fa = a.diviseFraction(determinant)\n const fb = b.diviseFraction(determinant)\n const fc = c.diviseFraction(determinant)\n return [\n [fa.numIrred, fa.denIrred],\n [fb.numIrred, fb.denIrred],\n [fc.numIrred, fc.denIrred]\n ]\n }\n}\n\nexport function rationnalise (x) {\n if (x instanceof FractionEtendue) return x\n if (typeof x === 'number' || x instanceof Decimal) {\n if (Number.isInteger(x)) {\n return new FractionEtendue(Number(x), 1)\n }\n const f = fraction(x.toFixed(2))\n return f\n }\n // c'est pas un number, c'est pas une FractionEtendue... ça doit être une Fraction de mathjs\n return new FractionEtendue(x.n * x.s, x.d)\n}\n","import { fraction, matrix, parse } from 'mathjs'\nimport FractionEtendue from '../../modules/FractionEtendue.js'\nimport { egal } from '../../modules/outils.js'\nimport { rationnalise } from './outilsMaths.js'\n\n/**\n * Classe MatriceCarree\n * Cette classe a été crée à une époque où nous n'utilisions pas encore la librairie mathjs !\n * Vous avez le choix d'utiliser ce code ou d'utiliser mathjs et toutes ses possibilités de calcul matriciel\n * Générateur de Matrice :\n * Si l'argument est un nombre, alors on s'en sert pour définir la taille de la matrice carrée qu'on rempli de zéros.\n * Sinon, c'est le tableau qui sert à remplir la Matrice\n * @author Jean-Claude Lhote\n */\nexport class MatriceCarree {\n constructor (table) {\n let ligne\n this.table = []\n if (typeof (table) === 'number') {\n this.dim = table // si c'est un nombre qui est passé en argument, c'est la taille, et on rempli la table de 0\n for (let i = 0; i < this.dim; i++) {\n ligne = []\n for (let j = 0; j < this.dim; j++) {\n ligne.push(0)\n }\n this.table.push(ligne)\n }\n } else { // si l'argument est une table, on la copie dans this.table et sa longueur donne la dimension de la matrice\n this.dim = table.length\n for (const ligne of table) { // on copie table dans this.table, élément par élément mais en convertissant en FractionEtendue\n this.table.push([])\n for (const elt of ligne) {\n const val = rationnalise(elt)\n this.table[this.table.length - 1].push(val)\n }\n }\n }\n /**\n * Méthode : Calcule le déterminant de la matrice carrée\n * @author Jean-Claude Lhote\n * @return {FractionEtendue}\n */\n this.determinant = function () {\n const n = this.dim // taille de la matrice = nxn\n let determinant = new FractionEtendue(0)\n let M\n for (let i = 0; i < n; i++) { // on travaille sur la ligne du haut de la matrice :ligne 0 i est la colonne de 0 à n-1\n // if (n==1) determinant=this.table[0][0]\n if (n === 2) {\n determinant = this.table[0][0].produitFraction(this.table[1][1]).differenceFraction(this.table[1][0].produitFraction(this.table[0][1])).simplifie()\n } else {\n M = this.matriceReduite(0, i)\n determinant = determinant.sommeFraction(M.determinant().produitFraction(this.table[0][i].multiplieEntier((-1) ** i)))\n }\n }\n return determinant\n }\n /**\n * Méthode : m=M.matriceReduite(l,c) retourne une nouvelle matrice obtenue à partir de la matrice M (carrée) en enlevant la ligne l et la colonne c\n * (Utilisée dans le calcul du déterminant d'une matrice carrée.)\n * @author Jean-Claude Lhote\n */\n this.matriceReduite = function (l, c) {\n const resultat = []\n let ligne\n for (let i = 0; i < this.table.length; i++) {\n if (i !== l) {\n ligne = []\n for (let j = 0; j < this.table.length; j++) {\n if (j !== c) ligne.push(this.table[i][j])\n }\n if (ligne.length > 0) resultat.push(ligne)\n }\n }\n return matriceCarree(resultat)\n }\n /**\n * Méthode : m=M.cofacteurs() retourne la matrice des cofacteurs de M utilisée dans l'inversion de M.\n */\n this.cofacteurs = function () { // renvoie la matrice des cofacteurs.\n const n = this.dim\n let resultat = []\n let ligne\n let M\n if (n > 2) {\n for (let i = 0; i < n; i++) {\n ligne = []\n for (let j = 0; j < n; j++) {\n M = this.matriceReduite(i, j)\n ligne.push(M.determinant().multiplieEntier((-1) ** (i + j)).simplifie())\n }\n resultat.push(ligne)\n }\n } else if (n === 2) {\n resultat = [[this.table[1][1], -this.table[1][0]], [-this.table[0][1], this.table[0][0]]]\n } else return false\n return matriceCarree(resultat)\n }\n /**\n * Méthode : m=M.transposee() retourne la matrice transposée de M utilisée pour l'inversion de M\n */\n this.transposee = function () { // retourne la matrice transposée\n const n = this.dim\n const resultat = []\n let ligne\n for (let i = 0; i < n; i++) {\n ligne = []\n for (let j = 0; j < n; j++) {\n ligne.push(this.table[j][i].simplifie())\n }\n resultat.push(ligne)\n }\n return matriceCarree(resultat)\n }\n /**\n * m=M.multiplieParFraction(f) Multiplie tous les éléments de la matrice par f. Utilisée pour l'inversion de M\n * @param {FractionEtendue} f\n */\n this.multiplieParFraction = function (f) { // retourne k * la matrice\n const n = this.dim\n const resultat = []\n let ligne\n for (let i = 0; i < n; i++) {\n ligne = []\n for (let j = 0; j < n; j++) {\n const f2 = new FractionEtendue(this.table[i][j])\n ligne.push(f2.produitFraction(f).simplifie())\n }\n resultat.push(ligne)\n }\n return matriceCarree(resultat)\n }\n /**\n * m=M.multiplieParReel(k) Multiplie tous les éléments de la matrice par k. Utilisée pour l'inversion de M\n * @param {*} k\n */\n this.multiplieParReel = function (k) { // retourne k * la matrice on essaye de convertir k en FractionEtendue\n const n = this.dim\n k = fraction(k.toFixed(2))\n k = new FractionEtendue(k.s * k.n, k.d)\n const resultat = []\n let ligne\n for (let i = 0; i < n; i++) {\n ligne = []\n for (let j = 0; j < n; j++) {\n ligne.push(k.produitFraction(this.table[i][j]).simplifie())\n }\n resultat.push(ligne)\n }\n return matriceCarree(resultat)\n }\n\n /**\n * Méthode : Calcule le produit d'une matrice nxn par un vecteur 1xn (matrice colonne): retourne un vecteur 1xn.\n * @return {FractionEtendue[]| boolean}\n */\n this.multiplieVecteur = function (V) { // Vecteur est un simple array pour l'instant\n const n = this.dim\n\n if (n === V.length) {\n const resultat = []\n for (let i = 0; i < n; i++) {\n let somme = new FractionEtendue(0)\n for (let j = 0; j < n; j++) {\n V[j] = rationnalise(V[j])\n somme = somme.sommeFraction(this.table[i][j].produitFraction(V[j])).simplifie()\n }\n resultat.push(somme)\n }\n return resultat\n } else return false\n }\n /**\n * Méthode : m=M.inverse() Retourne la matrice inverse de M. Utilisation : résolution de systèmes linéaires\n */\n this.inverse = function () { // retourne la matrice inverse (si elle existe)\n const d = this.determinant()\n if (!egal(d, 0)) {\n return this.cofacteurs().transposee().multiplieParFraction(d.inverse().simplifie())\n } else return false\n }\n /**\n * Méthode : m=M.multiplieMatriceCarree(P) : retourne m = M.P\n *\n */\n this.multiplieMatriceCarree = function (M) {\n const n = this.dim\n const resultat = []\n let ligne\n let somme\n for (let i = 0; i < n; i++) {\n ligne = []\n for (let j = 0; j < n; j++) {\n somme = new FractionEtendue(0)\n for (let k = 0; k < n; k++) {\n somme = somme.sommeFraction(this.table[i][k].produitFraction(M.table[k][j]).simplifie())\n }\n ligne.push(somme.simplifie())\n }\n resultat.push(ligne)\n }\n return matriceCarree(resultat)\n }\n this.toTex = function () {\n let matrice = this.table\n matrice = matrix(matrice)\n matrice = matrice.toString()\n matrice = parse(matrice).toTex().replaceAll('bmatrix', 'pmatrix')\n return matrice\n }\n }\n}\n\n/**\n * Crée une nouvelle instance de la classe MatriceCarree à partir d'un tableau.\n *\n */\nexport function matriceCarree (table) {\n return new MatriceCarree(table)\n}\n"],"names":["choisiDelta","positif","d","b","c","randint","interpolationDeLagrange","listePoints","listeOrdonnee","el1","el2","setPoints","n","result","j","prod","i","den","Polynome","resolutionSystemeLineaire2x2","x1","x2","fx1","fx2","matrice","matriceCarree","determinant","a","fa","fb","resolutionSystemeLineaire3x3","x3","fx3","y1","y2","y3","fc","rationnalise","x","FractionEtendue","Decimal","fraction","MatriceCarree","table","ligne","elt","val","M","l","resultat","f","f2","k","V","somme","egal","matrix","parse"],"mappings":"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"}