From 80763506b73cf3a273ff8f39b2db033e1f0116f1 Mon Sep 17 00:00:00 2001 From: xflywind <43030857+ringabout@users.noreply.github.com> Date: Thu, 6 Oct 2022 21:28:45 +0800 Subject: [PATCH] add patches for stricteffects --- src/numericalnim/optimize.nim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/numericalnim/optimize.nim b/src/numericalnim/optimize.nim index 18a0963..9e4d42a 100644 --- a/src/numericalnim/optimize.nim +++ b/src/numericalnim/optimize.nim @@ -2,6 +2,9 @@ import std/[strformat, sequtils, math, deques] import arraymancer import ./differentiate +when not defined(nimHasEffectsOf): + {.pragma: effectsOf.} + proc steepest_descent*(deriv: proc(x: float64): float64, start: float64, gamma: float64 = 0.01, precision: float64 = 1e-5, max_iters: Natural = 1000):float64 {.inline.} = ## Gradient descent optimization algorithm for finding local minimums of a function with derivative 'deriv' ## @@ -75,7 +78,11 @@ proc conjugate_gradient*[T](A, b, x_0: Tensor[T], tolerance: float64): Tensor[T] rsold = rsnew -proc newtons*(f: proc(x: float64): float64, deriv: proc(x: float64): float64, start: float64, precision: float64 = 1e-5, max_iters: Natural = 1000): float64 {.raises: [ArithmeticError].} = +proc newtons*(f: proc(x: float64): float64, + deriv: proc(x: float64): float64, + start: float64, precision: float64 = 1e-5, + max_iters: Natural = 1000 + ): float64{.raises: [ArithmeticError], effectsOf: [f, deriv].} = ## Newton-Raphson implementation for 1-dimensional functions ## Given a single variable function f and it's derivative, calcuate an approximation to f(x) = 0