Библиотека решателей уравнений JavaScript

есть ли библиотека или функция JavaScript, которая будет решать уравнения для переменных?

например 9 = 3 + x и решить для x. Но он также должен решать более сложные уравнения, которые включают синус, Косинус и касательную.

4 ответов


вы можете примерное решение, делая то, что excel называет "поиск цели" - тестирование значений для x пока обе стороны уравнения примерно совпадают. Вы можете сделать это, разделив уравнение на "=" знак, заменяющий каждое появление x стоимостью, evaling обе стороны, и определение, если разница падает ниже определенного порога. Хотя относительно простой, есть недостатки этого метода, хотя (кроме того, что это аппроксимация), например, алгоритм может думать, что две стороны сходятся, когда на самом деле это всего лишь локальный min/max и будет расходиться после того, как разница падает чуть ниже вашего порога. Вам также нужно будет протестировать несколько начальных точек для решения уравнений с более чем одним решением.

для программы На самом деле решить уравнение как человек (путем перестановки двух сторон уравнения и применения обратных функций, производных / интегралов и прочего) является гораздо сложнее, и почему-то чувствует себя полностью несвободным ;)


быстрый поиск появляется алгебра.js и Яш-решатель. Я ничего о них не знаю, но они кажутся законными. алгебра.js имеет хороший API ООП, но, похоже, не обрабатывает тригонометрические функции.


посмотрите на скрипт в программа метода Ньютона для f (x)=0. Он решает уравнение, используя Ньютона метод касательных.


Я хотел бы предложить nerdamer. Он может алгебраически решить до квартичных функций, и он может численно решить ряд функций. Еще одна библиотека для рассмотрения -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());
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/nerdamer.core.js"></script>
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/Algebra.js"></script>
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/Calculus.js"></script>
<script src="https://cdn.jsdelivr.net/npm/nerdamer@0.7.16/Solve.js"></script>