Solución:
Me gustaría proponer nerdamer. Puede resolver algebraicamente hasta funciones cuarticas y puede resolver numéricamente un rango de funciones. Otra biblioteca a considerar es Algebrite.
//solve linear equations
var x = nerdamer.solve('(x+1)*3=x-6', 'x');
console.log(x.toString());
//quadratic
var x2 = nerdamer.solve('x^2-8x+15', 'x');
console.log(x2.toString());
//quadratic algebraically
var x3 = nerdamer.solve('x^2-ax+3*b', 'x');
console.log(x3.toString());
//multiple roots
var x4 = nerdamer.solve('x^6+41*x^5+652*x^4+5102*x^3+20581*x^2+40361*x+30030', 'x');
console.log(x4.toString());
//functions - numerically around to zero up to a predefined range
var x5 = nerdamer.solve('cos(x)^2+sin(x-1)', 'x');
console.log(x5.toString());
//solve a system of linear equations
var x6 = nerdamer.solveEquations(['2x+y=7', 'x-y+3z=11', 'y-z=-1']);
console.log(x6.toString());
//solve a system of nonlinear equations
var x7 = nerdamer.solveEquations(['3*x^2/y=2', 'z*x*y-1=35', '5*z^2+7=52']);
console.log(x7.toString());
<script src="https://cdn.jsdelivr.net/npm/[email protected]/nerdamer.core.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/Algebra.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/Calculus.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/Solve.js"></script>
Usted puede aproximado la solución haciendo lo que Excel llama “Búsqueda de objetivos”: probar valores para x
hasta que ambos lados de la ecuación coincidan aproximadamente. Puede hacer esto dividiendo la ecuación por "="
signo, reemplazando cada ocurrencia de x
con un valor, eval
en ambos lados y determinar si la diferencia cae por debajo de cierto umbral. Si bien es relativamente simple, hay fallas en este método (aparte del hecho de que es una aproximación), por ejemplo, el algoritmo puede pensar que los dos lados están convergiendo cuando en realidad es solo un mínimo / máximo local y divergerá después de la la diferencia cae justo por debajo de su umbral. También deberá probar varios puntos de inicio para resolver ecuaciones con más de una solución.
Para que un programa realmente resolver una ecuación como lo haría un humano (reordenando los dos lados de la ecuación y aplicando funciones inversas, derivadas / integrales y todo eso) es mucho más compleja, y de alguna manera se siente completamente propietaria;)
Una búsqueda rápida da como resultado algebra.js y js-solver. No sé nada sobre ellos, pero parecen legítimos. algebra.js tiene una buena API de programación orientada a objetos, pero no parece manejar funciones trigonométricas.