Улучшение моей F # реализации метода Ньютона, чтобы найти корни - PullRequest
0 голосов
/ 29 декабря 2018

Я реализовал метод Ньютона, чтобы найти корни функции.Мне интересно, смогу ли я оптимизировать код, чтобы сделать его более эффективным по времени и пространству и визуально понятным.Здесь я использовал изменяемую переменную, но мне интересно, можем ли мы сделать это без.Вот вопрос и код, который я написал: enter image description here

open System

let newton (f:(float->float),x0: float,tol:float, dx:float)=
    let mutable x=x0
    while Math.Abs (f x) >= tol do
        //compute derivative
        let fderivative = (f x+dx-f x)/dx
        x<-x-(f x)/fderivative
    x

1 Ответ

0 голосов
/ 29 декабря 2018

Вы можете использовать рекурсию, чтобы избежать мутации:

let newton (f: float -> float,x0,tol,dx)=
    let rec loop x =
        if abs (f x) < tol then x
        else
            let f' = (f x+dx-f x)/dx
            x - f x / f' |> loop
    loop x0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...