Библиотека решателя уравнений JavaScript - PullRequest
12 голосов
/ 23 декабря 2010

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

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

Ответы [ 4 ]

7 голосов
/ 23 декабря 2010

Вы можете приблизить решение, выполнив то, что Excel называет "Поиск цели" - тестирование значений для x до тех пор, пока обе стороны уравнения не будут приблизительно совпадать.Вы можете сделать это, разделив уравнение на знак "=", заменив каждый случай x значением, eval с обеих сторон и определив, не падает ли разница ниже определенного порога.Хотя этот метод относительно прост, у этого метода есть недостатки (кроме факта, что он является приближенным), например, алгоритм может думать, что две стороны сходятся, когда на самом деле это просто локальный минимум / максимум, и будет расходиться послеразница падает чуть ниже вашего порога.Вам также необходимо проверить несколько начальных точек, чтобы решить уравнения с более чем одним решением.

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

4 голосов
/ 26 июля 2018

Я хотел бы предложить 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>
3 голосов
/ 04 октября 2015

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

1 голос
/ 23 декабря 2010

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

...