Module | Newton
In: | bigdecimal/lib/bigdecimal/newton.rb

### Methods

nlsolve norm

### Included Modules

LUSolve Jacobian

### Public Instance methods

nlsolve(f,x)

[Source]

    # File bigdecimal/lib/bigdecimal/newton.rb, line 39
      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
              raize "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)

[Source]

    # File bigdecimal/lib/bigdecimal/newton.rb, line 30
      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

[Validate]