Javascript находит пересечения с учетом двух функций

#javascript #math #equation #solver

Вопрос:

Сегодня я пытаюсь решить для координат, в которых функции пересекаются. Сейчас я использую библиотеку nerdarmer, но она возвращает только одно решение из всех возможных. Например, я хочу, чтобы приведенный ниже код выводил -1, 0, 1, но он выводит только 0. Другой пример: если я хочу найти пересечения между y = 0 и sin(x), я хочу, чтобы вывод был…, (- 2pi, 0), (- pi, 0), (pi, 0), (2pi, 0), (3pi, 0), …

 intersect("x^3", "x")
function intersect(f1, f2){
    var x = nerdamer.solve('f1', 'f2');
    console.log(x.toString());  
}
 

Есть ли какой-нибудь способ получить все возможные решения?

Комментарии:

1. y = 0, а sin(x) дает бесконечное число решений. Как можно получить «все возможные решения» для этого случая?

2. Для этих случаев, учитывая координату, я хотел бы получить ближайшие решения (например, ближайшее решение справа и слева от заданной координаты).

3. Возможно, вам было бы лучше использовать уже существующие API, такие как Wolfram Alpha API, которые могут решать относительно сложные уравнения, вместо того, чтобы пытаться изобрести колесо или найти стороннюю библиотеку (последняя из которых не по теме в SO).

4. Вы пробовали Nerdamer «Если у вас есть запрос на функцию или предложение, пожалуйста, оставьте сообщение ниже или сообщите нам об этом на Github. Мы можем помочь только в том случае, если знаем, что вам нужно, и с нетерпением ждем ваших предложений». в разделе комментариев к nerdamer.com «Вы также можете отправить мне электронное письмо по адресу martin.r.donk@gmail.com .»

5. Я постараюсь отправить им сообщение, спасибо. Что касается wolfram alpha, есть ли примеры javascript о том, как я могу использовать их api для решения функций?

Ответ №1:

Вы неправильно поняли синтаксис nerdamer.решите

Первый аргумент-это формула или уравнение. Второй аргумент-это переменная, для которой нужно решить. Если первый аргумент не является уравнением, предполагается, что он равен 0. В вашем случае x^3=0. у которого есть только решение 0.

Если вы хотите пересечь уравнения, вам нужно будет установить их равными друг другу в первом аргументе. И во втором аргументе просто укажите x. (или измените его в соответствии с вашими потребностями, если требуется).

 intersect("x^3", "x")
function intersect(f1, f2){
    var x = nerdamer.solve(f1 "=" f2, "x");
    console.log(x.toString());  //outputs [0,1,-1]
}
 

Редактировать:

В вашем примере вы также напрямую помещаете строки «f1» и «f2» в функцию solve, которая, похоже, просто решает f=0;