Scala подскажите пожалуйста

Реализовать метод ньютона для решения уравнения ( x^3+18*x-83 = 0)

Import scala.math.abs

object laba1
{
def square(x: Double) = x * x

def improve(guess: Double, x: Double) =
(guess + x / guess) / 2

def isGoodEnough(guess: Double, x: Double) =
abs(square(guess) - x) < 0.001

def sqrtIter(guess: Double, x: Double): Double =
if (isGoodEnough(guess, x))
guess
else
sqrtIter(improve(guess, x), x)

def sqrt(x: Double) = sqrtIter(1.0, x)

def main(args: Array[String])
{
var x = 0
println("Корень из " + x + " is " + sqrt(x))
}
}

Не понимаю как сделать чтобы решал уравнение


Ответы (1 шт):

Автор решения: Дмитрий Никифоров

В коде из вопроса решается задача нахождения квадратного корня из числа. В Вашем комментарии приведён код, работающий с произвольными функциями. Для его использования нужно передать функцию и её производную в качестве параметров f и dfdx метода

def method(x0: Double, f: Double => Double, dfdx: Double => Double, e: Double): Double

Можно написать методы

def fun(x: Double) : Double = x*x*x+18*x-83
def dfun(x: Double) : Double = 3*x*x+18

и вызвать так:

method(0, fun, dfun, 0.000001)

Но более идиоматичный подход -- использование лямба-выражений:

method(0, x => x*x*x+18*x-83, x => 3*x*x+18, 0.00001)
→ Ссылка