Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

### In Files

• bigdecimal/lib/bigdecimal/newton.rb

Quicksearch

# Newton

### Public Instance Methods

nlsolve(f,x) click to toggle source
```
# File bigdecimal/lib/bigdecimal/newton.rb, line 41
def nlsolve(f,x)
nRetry = 0
n = x.size

f0 = f.values(x)
zero = f.zero
one  = f.one
two  = f.two
p5 = one/two
d  = norm(f0,zero)
minfact = f.ten*f.ten*f.ten
minfact = one/minfact
e = f.eps
while d >= e do
nRetry += 1
# Not yet converged. => Compute Jacobian matrix
dfdx = jacobian(f,f0,x)
# Solve dfdx*dx = -f0 to estimate dx
dx = lusolve(dfdx,f0,ludecomp(dfdx,n,zero,one),zero)
fact = two
xs = x.dup
begin
fact *= p5
if fact < minfact then
raise "Failed to reduce function values."
end
for i in 0...n do
x[i] = xs[i] - dx[i]*fact
end
f0 = f.values(x)
dn = norm(f0,zero)
end while(dn>=d)
d = dn
end
nRetry
end
```
norm(fv,zero=0.0) click to toggle source
```
# File bigdecimal/lib/bigdecimal/newton.rb, line 32
def norm(fv,zero=0.0)
s = zero
n = fv.size
for i in 0...n do
s += fv[i]*fv[i]
end
s
end
```