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)