In [2]:
import numpy as np

In [11]:
def error(p):
    u = p[0]
    v = p[1]
    return (u*np.exp(v) - 2*v*np.exp(-u)) ** 2

In [34]:
def d_error(p):
    u = p[0]
    v = p[1]
    dp = np.array([2*(u*np.exp(v) - 2*v*np.exp(-u))*(np.exp(v) + 2*v*np.exp(-u)), 
          2*(u*np.exp(v) - 2*v*np.exp(-u))*(u*np.exp(v) - 2*np.exp(-u))])
    return dp


def d_error_du(p):
    u = p[0]
    v = p[1]
    du = 2*(u*np.exp(v) - 2*v*np.exp(-u))*(np.exp(v) + 2*v*np.exp(-u))
    return du

def d_error_dv(p):
    u = p[0]
    v = p[1]
    dv = 2*(u*np.exp(v) - 2*v*np.exp(-u))*(u*np.exp(v) - 2*np.exp(-u))
    return dv

In [107]:
p = np.array([1.0, 1.0])

h = 0.1

while error(p) > (10 ** -14):
    p = p -  h * d_error(p)

print(error(p))
print(p)


1.20868339442e-15
[ 0.04473629  0.02395871]

In [116]:
p = np.array([1.0, 1.0])

h = 0.1

# while error(p) > (10 ** -14):
for i in range(15):
    print("p [%.5f %.5f] - error %.5f" % (p[0], p[1], error(p)))
    p[0] = p[0] -  h * d_error_du(p)
    print("p [%.5f %.5f] - error %.5f" % (p[0], p[1], error(p)))
    p[1] = p[1] -  h * d_error_dv(p)


p [1.00000 1.00000] - error 3.93040
p [-0.36954 1.00000] - error 15.19961
p [-0.36954 -2.03992] - error 34.29016
p [6.39247 -2.03992] - error 0.70241
p [6.39247 -2.17870] - error 0.53414
p [6.37700 -2.17870] - error 0.53175
p [6.37700 -2.28347] - error 0.43266
p [6.36461 -2.28347] - error 0.43113
p [6.36461 -2.36821] - error 0.36504
p [6.35428 -2.36821] - error 0.36397
p [6.35428 -2.43959] - error 0.31647
p [6.34542 -2.43959] - error 0.31568
p [6.34542 -2.50138] - error 0.27976
p [6.33768 -2.50138] - error 0.27916
p [6.33768 -2.55590] - error 0.25099
p [6.33081 -2.55590] - error 0.25051
p [6.33081 -2.60473] - error 0.22778
p [6.32464 -2.60473] - error 0.22740
p [6.32464 -2.64898] - error 0.20866
p [6.31904 -2.64898] - error 0.20834
p [6.31904 -2.68945] - error 0.19261
p [6.31393 -2.68945] - error 0.19234
p [6.31393 -2.72675] - error 0.17893
p [6.30923 -2.72675] - error 0.17871
p [6.30923 -2.76135] - error 0.16715
p [6.30488 -2.76135] - error 0.16696
p [6.30488 -2.79361] - error 0.15687
p [6.30084 -2.79361] - error 0.15671
p [6.30084 -2.82385] - error 0.14783
p [6.29708 -2.82385] - error 0.14769