]> git.rustad.me Git - nummat1/commitdiff
Add newton iteration
authorBjørn Rustad <rustadbjornen@gmail.com>
Wed, 28 Sep 2011 12:57:11 +0000 (14:57 +0200)
committerBjørn Rustad <rustadbjornen@gmail.com>
Wed, 28 Sep 2011 12:57:11 +0000 (14:57 +0200)
newton.py [new file with mode: 0644]

diff --git a/newton.py b/newton.py
new file mode 100644 (file)
index 0000000..8ea7538
--- /dev/null
+++ b/newton.py
@@ -0,0 +1,32 @@
+from function import function_g, gradient_g, hessian_g
+import generate
+import surf
+import numpy as np
+import matplotlib.pyplot as plt
+from numpy.linalg import norm, inv
+
+def newton_iter(x, grad_g, hess_g):
+    return x - inv(hess_g(x)).dot(grad_g(x))
+
+H = generate.spdmatrix(2, 3)
+b = generate.vector(2, -1, 1)
+c = generate.vector(2, -3, 3)
+
+alpha = 0.1
+xiter = np.array([1, 1])
+x0_norm = norm(gradient_g(xiter, H, b, c))
+
+tolerance = 0.0001
+
+relative_residual = norm(gradient_g(xiter, H, b, c)) / x0_norm
+relative_residuals = [relative_residual]
+
+while relative_residual > tolerance:
+    xiter = newton_iter(xiter, lambda x: gradient_g(x, H, b, c), lambda x:
+            hessian_g(x, H, b, c))
+    relative_residual = norm(gradient_g(xiter, H, b, c)) / x0_norm
+    relative_residuals.append(relative_residual)
+
+    print xiter
+
+print "Cirka null: ", gradient_g(xiter, H, b, c)