Как найти корни функции в Scala? - PullRequest
0 голосов
/ 02 июля 2018

Я пишу программу на Scala и хочу найти корни уравнения: 2*x^3 + x*(1-2*l + 2*H)-m = 0, где l, H и m - это константы, рассчитанные ранее.

В Python я знаю, что есть brentq для таких случаев, но я не могу найти ничего похожего в Scala. Есть ли что-нибудь подобное или стоит попробовать найти другой способ решения этой проблемы?

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Если l, H и m являются константами, то это просто

x^3 + ax + b = 0

Где

a = 1/2 - l + H
b = -m/2

Есть очень волосатое аналитическое решение, см. Wolfram Alpha:

https://www.wolframalpha.com/input/?i=solve+x%5E3+%2B+ax+%2B+b+%3D+0

Выражение этого в Scala оставлено читателю в качестве упражнения:)

0 голосов
/ 02 июля 2018

Есть spire , который является числовой библиотекой для Scala. Я не очень хорошо это знаю, но, похоже, это работает в Spire 0.16.0:

scala> val m = 1
m: Int = 1

scala> val l = 2
l: Int = 2

scala> val H = 3
H: Int = 3

scala> import spire.implicits._
import spire.implicits._

scala> import spire.math.Number
import spire.math.Number

scala> val f = poly"2x^3 + ${1-2*l + 2*H}x - $m"
f: spire.math.Polynomial[spire.math.Rational] = (2x³ + 3x - 1)

scala> f.map(Number(_)).roots
res1: spire.math.poly.Roots[spire.math.Number] = Roots(0.3129084094792333580059444668826417)
0 голосов
/ 02 июля 2018

Я не знаю ни одной всеобъемлющей математической библиотеки в scala. Однако в Java есть один, который вы можете вызывать из своего кода scala.

Вы можете взглянуть на математику Apache commons и, в частности, на раздел 4.3, поиск корня .

...