Optimization (Part 3, Quadratic (2) interpolation search)

In [40]:
import pandas, numpy
import quadratic2

import matplotlib.pyplot as plt
%matplotlib inline

plt.style.use('seaborn-whitegrid')

x (x - 2)

In [41]:
df1  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])
df2  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])
df3  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn1  = lambda x: x * (x - 2.0)
fn2  = lambda x: numpy.fabs(x * (x - 2.0))
fn3  = lambda x: (lambda x: 0.0 if x < 0.0 else x)(x * (x - 2.0))

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15, 5e-16, 1e-16]:
    st, xm, n = quadratic2.optim(fn1, -1.5, 20.1, e, 10000)
    df1 = df1.append({'status'          : st,
                      'eps'             : e,
                      'n'               : n,
                      'xmin'            : xm,
                      'str(xmin)'       : '%.15e' % (xm,)},
                     ignore_index=True)
    st, xm, n = quadratic2.optim(fn2, -20.1, 0.9, e, 10000)
    df2 = df2.append({'status'          : st,
                      'eps'             : e,
                      'n'               : n,
                      'xmin'            : xm,
                      'str(xmin)'       : '%.15e' % (xm,)},
                     ignore_index=True)
    st, xm, n = quadratic2.optim(fn3, -1.5, 20.1, e, 10000)
    df3 = df3.append({'status'          : st,
                      'eps'             : e,
                      'n'               : n,
                      'xmin'            : xm,
                      'str(xmin)'       : '%.15e' % (xm,)},
                     ignore_index=True) 
In [42]:
df1
Out[42]:
status eps n xmin str(xmin)
0 0 10 1 1.0 1.000000000000000e+00
1 0 1 1 1.0 1.000000000000000e+00
2 0 0.1 1 1.0 1.000000000000000e+00
3 0 1e-05 1 1.0 1.000000000000000e+00
4 0 1e-08 1 1.0 1.000000000000000e+00
5 0 1e-10 1 1.0 1.000000000000000e+00
6 0 1e-12 1 1.0 1.000000000000000e+00
7 0 1e-14 1 1.0 1.000000000000000e+00
8 0 1e-15 1 1.0 1.000000000000000e+00
9 0 5e-16 1 1.0 1.000000000000000e+00
10 0 1e-16 1 1.0 1.000000000000000e+00
In [43]:
df2
Out[43]:
status eps n xmin str(xmin)
0 0 10 1 7.622307e-01 7.622306569682037e-01
1 0 1 1 7.622307e-01 7.622306569682037e-01
2 0 0.1 1 7.622307e-01 7.622306569682037e-01
3 0 1e-05 20 -2.032045e-05 -2.032044786499250e-05
4 0 1e-08 30 1.153265e-08 1.153265216791977e-08
5 0 1e-10 38 -1.102791e-11 -1.102790795567679e-11
6 0 1e-12 42 -1.390004e-12 -1.390003634857634e-12
7 0 1e-14 48 2.080503e-14 2.080502993678364e-14
8 0 1e-15 53 2.619551e-16 2.619550540866947e-16
9 0 5e-16 53 2.619551e-16 2.619550540866947e-16
10 0 1e-16 56 3.440679e-17 3.440678602270285e-17
In [44]:
df3
Out[44]:
status eps n xmin str(xmin)
0 0 10 1 0.853165 8.531645569620252e-01
1 0 1 1 0.853165 8.531645569620252e-01
2 0 0.1 2 0.926582 9.265822784810126e-01
3 0 1e-05 15 0.999991 9.999910378757911e-01
4 0 1e-08 25 1.000000 9.999999912479256e-01
5 0 1e-10 32 1.000000 9.999999999316245e-01
6 0 1e-12 39 1.000000 9.999999999994658e-01
7 0 1e-14 45 1.000000 9.999999999999916e-01
8 0 1e-15 48 1.000000 9.999999999999989e-01
9 0 5e-16 50 1.000000 9.999999999999997e-01
10 -2 1e-16 54 0.000000 0.000000000000000e+00
In [45]:
fig, ax = plt.subplots(3, 1, figsize=(30, 50), sharex='col', sharey='row')

x1 = numpy.linspace(-2.0, 7.0, 5000)
x2 = numpy.linspace(-2.0, 7.0, 5000)
x3 = numpy.linspace(-2.0, 7.0, 5000)

ax[0].plot(x1, fn1(x1), color='black', linestyle='solid')
ax[0].set(xlim=(-2.0, 7.0))
m0 = df1.loc[df1['status'] == 0]['xmin'].values
ax[0].scatter(m0, fn1(m0), s= 40, color='red')

ax[1].plot(x2, fn2(x2), color='black', linestyle='solid')
ax[1].set(xlim=(-2.0, 7.0))
m1 = df2.loc[df2['status'] == 0]['xmin'].values
ax[1].scatter(m1, fn2(m1), s= 40, color='red')

ax[2].plot(x3, numpy.vectorize(fn3)(x3), color='black', linestyle='solid')
ax[2].set(xlim=(-2.0, 7.0))
m2 = df3.loc[df3['status'] == 0]['xmin'].values
ax[2].scatter(m2, numpy.vectorize(fn3)(m2), s= 40, color='red')
Out[45]:
<matplotlib.collections.PathCollection at 0x7f20fc3de940>

|x ^ 3|

In [46]:
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn = lambda x: numpy.fabs(x ** 3)

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14]:
    st, xm, n = quadratic2.optim(fn, -1.5, 20.1, e, 10000)
    df = df.append({'status'          : st,
                     'eps'             : e,
                     'n'               : n,
                     'xmin'            : xm,
                     'str(xmin)'       : '%.15e' % (xm,)},
                   ignore_index=True)
In [47]:
df
Out[47]:
status eps n xmin str(xmin)
0 0 10 1 3.769674e-01 3.769673663451294e-01
1 0 1 2 -1.821584e-01 -1.821584257600741e-01
2 0 0.1 4 -2.446742e-02 -2.446741870308652e-02
3 0 1e-05 14 -2.447424e-06 -2.447424135871646e-06
4 0 1e-08 22 -1.257872e-09 -1.257871852528225e-09
5 0 1e-10 27 1.247001e-11 1.247000518186421e-11
6 0 1e-12 32 -1.256791e-13 -1.256791142209066e-13
7 0 1e-14 37 1.252997e-15 1.252997466678767e-15
In [48]:
fig, ax = plt.subplots(1, 1, figsize=(10, 5), sharex='col', sharey='row')

x = numpy.linspace(-1.5, 20.1, 5000)

ax.plot(x, fn(x), color='black', linestyle='solid')
ax.set(xlim=(-1.5, 20.1))

m = df['xmin'].values

ax.scatter(m, fn(m), s= 40, color='red')
Out[48]:
<matplotlib.collections.PathCollection at 0x7f20fc358780>

x (x - 2) (x - 3)

In [49]:
df1  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)', 'delta'])
df2  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])
df3  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn1 = lambda x: x * (x - 2.0) * (x - 3.0)
fn2 = lambda x: numpy.fabs(x * (x - 2.0) * (x - 3.0))
fn3 = lambda x: (lambda x: 0.0 if x < 0.0 else x)(x * (x - 2.0) * (x - 3.0))

xmin = (5.0 + numpy.sqrt(7.0)) / 3.0

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15, 5e-16, 1e-16]:
    st, xm, n = quadratic2.optim(fn1, 1.1, 20.1, e, 10000)
    df1 = df1.append({'status'          : st,
                      'eps'             : e,
                      'n'               : n,
                      'xmin'            : xm,
                      'str(xmin)'       : '%.15e' % (xm,),
                      'delta'           : numpy.fabs(xm - xmin)},
                     ignore_index=True)
    st, xm, n = quadratic2.optim(fn2, 1.1, 2.5, e, 10000)
    df2 = df2.append({'status'          : st,
                      'eps'             : e,
                      'n'               : n,
                      'xmin'            : xm,
                      'str(xmin)'       : '%.15e' % (xm,)},
                     ignore_index=True)
    st, xm, n = quadratic2.optim(fn3, 1.1, 20.1, e, 10000)
    df3 = df3.append({'status'          : st,
                      'eps'             : e,
                      'n'               : n,
                      'xmin'            : xm,
                      'str(xmin)'       : '%.15e' % (xm,)},
                     ignore_index=True)   
In [50]:
df1
Out[50]:
status eps n xmin str(xmin) delta
0 0 10 1 2.601123 2.601122593549462e+00 5.253882e-02
1 0 1 2 2.111742 2.111742363308555e+00 4.368414e-01
2 0 0.1 4 2.539718 2.539718448604036e+00 8.865322e-03
3 0 1e-05 8 2.548583 2.548582769017290e+00 1.001338e-06
4 0 1e-08 11 2.548584 2.548583769198259e+00 1.156605e-09
5 0 1e-10 27 2.548584 2.548583770926521e+00 5.716569e-10
6 0 1e-12 33 2.548584 2.548583770985904e+00 6.310406e-10
7 0 1e-14 46 2.548584 2.548583770991671e+00 6.368071e-10
8 0 1e-15 61 2.548584 2.548583770992112e+00 6.372480e-10
9 -2 5e-16 63 0.000000 0.000000000000000e+00 2.548584e+00
10 -2 1e-16 63 0.000000 0.000000000000000e+00 2.548584e+00
In [51]:
df2
Out[51]:
status eps n xmin str(xmin)
0 0 10 1 2.107486 2.107485599619709e+00
1 0 1 1 2.107486 2.107485599619709e+00
2 0 0.1 1 2.107486 2.107485599619709e+00
3 0 1e-05 12 2.000017 2.000017253650585e+00
4 0 1e-08 22 2.000000 1.999999996190403e+00
5 0 1e-10 27 2.000000 2.000000000042037e+00
6 0 1e-12 32 2.000000 1.999999999999903e+00
7 0 1e-14 40 2.000000 2.000000000000003e+00
8 0 1e-15 42 2.000000 1.999999999999999e+00
9 -2 5e-16 44 0.000000 0.000000000000000e+00
10 -2 1e-16 44 0.000000 0.000000000000000e+00
In [52]:
df3
Out[52]:
status eps n xmin str(xmin)
0 0 10 1 2.601123 2.601122593549462e+00
1 0 1 2 2.061187 2.061186903268343e+00
2 0 0.1 5 2.533631 2.533630632264322e+00
3 0 1e-05 18 2.601114 2.601114354784657e+00
4 0 1e-08 28 2.601123 2.601122585503794e+00
5 0 1e-10 35 2.601123 2.601122593486605e+00
6 0 1e-12 41 2.601123 2.601122593548480e+00
7 0 1e-14 48 2.601123 2.601122593549455e+00
8 0 1e-15 51 2.601123 2.601122593549461e+00
9 0 5e-16 52 2.601123 2.601122593549462e+00
10 -2 1e-16 54 0.000000 0.000000000000000e+00
In [53]:
fig, ax = plt.subplots(3, 1, figsize=(40, 40), sharex='col', sharey='row')

x1 = numpy.linspace(1.0, 3.5, 5000)
x2 = numpy.linspace(1.0, 3.5, 5000)
x3 = numpy.linspace(1.0, 3.5, 5000)

ax[0].plot(x1, fn1(x1), color='black', linestyle='solid')
ax[0].set(xlim=(1.0, 3.5), ylim=(-1.0, 0.0))
m0 = df1.loc[df1['status'] == 0]['xmin'].values
ax[0].scatter(m0, fn1(m0), s= 40, color='red')

ax[1].plot(x2, fn2(x2), color='black', linestyle='solid')
ax[1].set(xlim=(1.0, 3.5))
m1 = df2.loc[df2['status'] == 0]['xmin'].values
ax[1].scatter(m1, fn2(m1), s= 40, color='red')

ax[2].plot(x3, numpy.vectorize(fn3)(x3), color='black', linestyle='solid')
ax[2].set(xlim=(1.0, 3.5), ylim=(-0.1, 1.0))
m2 = df3.loc[df3['status'] == 0]['xmin'].values
ax[2].scatter(m2, numpy.vectorize(fn3)(m2), s= 40, color='red')
Out[53]:
<matplotlib.collections.PathCollection at 0x7f20fc2df6d8>

|sin x ^ 2|

In [54]:
df1  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)', '|xmin - pi^0.5|'])
df2  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)', '|xmin - (2pi)^0.5|'])
df3  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn1 = lambda x: numpy.fabs(numpy.sin(x ** 2))
fn2 = lambda x: numpy.fabs(numpy.sin(x ** 2))
fn3 = lambda x: (lambda x: 0.0 if x < 0.0 else x)(numpy.sin(x ** 2))

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 5e-16, 1e-16]:
    st, xm, n = quadratic2.optim(fn1, 1.5, 2.0, e, 10000)
    df1 = df1.append({'status'          : st,
                     'eps'             : e,
                     'n'               : n,
                     'xmin'            : xm,
                     'str(xmin)'       : '%.15e' % (xm,),
                     '|xmin - pi^0.5|' : '%.15e' % (numpy.fabs(xm - numpy.sqrt(numpy.pi)),)},
                   ignore_index=True)

    st, xm, n = quadratic2.optim(fn2, 2.3, 2.7, e, 10000)
    df2 = df2.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,),
                     '|xmin - (2pi)^0.5|' : '%.15e' % (numpy.fabs(xm - numpy.sqrt(2.0 * numpy.pi)),)},
                   ignore_index=True)

    st, xm, n = quadratic2.optim(fn3, 1.5, 2.0, e, 10000)
    df3 = df3.append({'status'          : st,
                     'eps'             : e,
                     'n'               : n,
                     'xmin'            : xm,
                     'str(xmin)'       : '%.15e' % (xm,)},
                   ignore_index=True)
In [55]:
df1
Out[55]:
status eps n xmin str(xmin) |xmin - pi^0.5|
0 0 10 1 1.820788 1.820788320746435e+00 4.833446984091938e-02
1 0 1 1 1.820788 1.820788320746435e+00 4.833446984091938e-02
2 0 0.1 1 1.820788 1.820788320746435e+00 4.833446984091938e-02
3 0 1e-05 11 1.772444 1.772443708206681e+00 1.014269883481411e-05
4 0 1e-08 20 1.772454 1.772453845578007e+00 5.327508434405104e-09
5 0 1e-10 25 1.772454 1.772453850872444e+00 3.307176754674401e-11
6 0 1e-12 31 1.772454 1.772453850906447e+00 9.310330284506563e-13
7 0 1e-14 37 1.772454 1.772453850905518e+00 2.220446049250313e-15
8 0 5e-16 41 1.772454 1.772453850905516e+00 0.000000000000000e+00
9 -2 1e-16 42 0.000000 0.000000000000000e+00 1.772453850905516e+00
In [56]:
df2
Out[56]:
status eps n xmin str(xmin) |xmin - (2pi)^0.5|
0 0 10 1 2.555070 2.555070099658443e+00 4.844182502744276e-02
1 0 1 1 2.555070 2.555070099658443e+00 4.844182502744276e-02
2 0 0.1 1 2.555070 2.555070099658443e+00 4.844182502744276e-02
3 0 1e-05 9 2.506607 2.506607398291050e+00 2.087633995007110e-05
4 0 1e-08 19 2.506628 2.506628275205330e+00 5.743299169580496e-10
5 0 1e-10 26 2.506628 2.506628274645047e+00 1.404654170755748e-11
6 0 1e-12 31 2.506628 2.506628274631250e+00 2.500222251455853e-13
7 0 1e-14 35 2.506628 2.506628274630998e+00 2.664535259100376e-15
8 0 5e-16 35 2.506628 2.506628274630998e+00 2.664535259100376e-15
9 0 1e-16 35 2.506628 2.506628274630998e+00 2.664535259100376e-15
In [57]:
df3
Out[57]:
status eps n xmin str(xmin)
0 0 10 1 1.953428 1.953428123663827e+00
1 0 1 1 1.953428 1.953428123663827e+00
2 0 0.1 1 1.953428 1.953428123663827e+00
3 -2 1e-05 2 0.000000 0.000000000000000e+00
4 -2 1e-08 2 0.000000 0.000000000000000e+00
5 -2 1e-10 2 0.000000 0.000000000000000e+00
6 -2 1e-12 2 0.000000 0.000000000000000e+00
7 -2 1e-14 2 0.000000 0.000000000000000e+00
8 -2 5e-16 2 0.000000 0.000000000000000e+00
9 -2 1e-16 2 0.000000 0.000000000000000e+00
In [58]:
fig, ax = plt.subplots(1, 2, figsize=(30, 10), sharex='col', sharey='row')

x  = numpy.linspace(0.5, 3.0, 6000)

ax[0].plot(x, fn1(x), color='black', linestyle='solid')
ax[0].set(xlim=(0.5, 3.0), ylim=(-0.1, 1.1), xlabel='x', ylabel='|sin x^2|')
m1 = df1.loc[df1['status'] == 0]['xmin'].values
ax[0].scatter(m1, fn1(m1), s= 40, color='red')
m2 = df2.loc[df2['status'] == 0]['xmin'].values
ax[0].scatter(m2, fn2(m2), s= 40, color='red')

ax[1].plot(x, numpy.vectorize(fn3)(x), color='black', linestyle='solid')
ax[1].set(xlim=(0.5, 3.0), ylim=(-0.1, 1.1))
m3 = df3.loc[df3['status'] == 0]['xmin'].values
ax[1].scatter(m3, numpy.vectorize(fn3)(m3), s= 40, color='red')
Out[58]:
<matplotlib.collections.PathCollection at 0x7f20fc1eda20>

|e^{0.1 x} sin(x)|

In [59]:
df1  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)', '|xmin - pi|'])
df2  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)', '|xmin - 2pi|'])
df3  = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn1 = lambda x: numpy.fabs(numpy.exp(0.1 * x) * numpy.sin(x))
fn2 = lambda x: numpy.fabs(numpy.exp(0.1 * x) * numpy.sin(x))
fn3 = lambda x: (lambda x: 0.0 if x < 0.0 else x)(numpy.exp(0.1 * x) * numpy.sin(x))

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 5e-16, 1e-16]:
    st, xm, n = quadratic2.optim(fn1, 2.0, 4.5, e, 10000)
    df1 = df1.append({'status'          : st,
                     'eps'             : e,
                     'n'               : n,
                     'xmin'            : xm,
                     'str(xmin)'       : '%.15e' % (xm,),
                     '|xmin - pi|' : '%.15e' % (numpy.fabs(xm - numpy.pi),)},
                   ignore_index=True)
    
    st, xm, n = quadratic2.optim(fn2, 4.9, 7.5, e, 10000)
    df2 = df2.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,),
                     '|xmin - 2pi|' : '%.15e' % (numpy.fabs(xm - 2.0 * numpy.pi),)},
                   ignore_index=True)

    st, xm, n = quadratic2.optim(fn3, 2.5, 7.5, e, 10000)
    df3 = df3.append({'status'          : st,
                     'eps'             : e,
                     'n'               : n,
                     'xmin'            : xm,
                     'str(xmin)'       : '%.15e' % (xm,)},
                   ignore_index=True)
In [60]:
df1
Out[60]:
status eps n xmin str(xmin) |xmin - pi|
0 0 10 1 2.838569 2.838569273307304e+00 3.030233802824887e-01
1 0 1 1 2.838569 2.838569273307304e+00 3.030233802824887e-01
2 0 0.1 3 3.155421 3.155420568310210e+00 1.382791472041678e-02
3 0 1e-05 12 3.141545 3.141544617305964e+00 4.803628382932246e-05
4 0 1e-08 26 3.141593 3.141592666639734e+00 1.304994068362930e-08
5 0 1e-10 33 3.141593 3.141592653599581e+00 9.787726185095380e-12
6 0 1e-12 37 3.141593 3.141592653589726e+00 6.705747068735946e-14
7 0 1e-14 44 3.141593 3.141592653589794e+00 1.332267629550188e-15
8 -2 5e-16 48 0.000000 0.000000000000000e+00 3.141592653589793e+00
9 -2 1e-16 48 0.000000 0.000000000000000e+00 3.141592653589793e+00
In [61]:
df2
Out[61]:
status eps n xmin str(xmin) |xmin - 2pi|
0 0 10 1 6.549477 6.549477433756350e+00 2.662921265767642e-01
1 0 1 1 6.549477 6.549477433756350e+00 2.662921265767642e-01
2 0 0.1 3 6.319171 6.319171452525727e+00 3.598614534614075e-02
3 0 1e-05 11 6.283163 6.283163429910391e+00 2.187726919533617e-05
4 0 1e-08 20 6.283185 6.283185330007916e+00 2.282832944899837e-08
5 0 1e-10 28 6.283185 6.283185307320723e+00 1.411368799608681e-10
6 0 1e-12 35 6.283185 6.283185307179330e+00 2.566835632933362e-13
7 0 1e-14 40 6.283185 6.283185307179593e+00 7.105427357601002e-15
8 -2 5e-16 45 0.000000 0.000000000000000e+00 6.283185307179586e+00
9 -2 1e-16 45 0.000000 0.000000000000000e+00 6.283185307179586e+00
In [62]:
df3
Out[62]:
status eps n xmin str(xmin)
0 0 10 1 4.723764 4.723764436429738e+00
1 0 1 1 4.723764 4.723764436429738e+00
2 0 0.1 3 4.930941 4.930941109107435e+00
3 0 1e-05 16 4.999992 4.999991569959608e+00
4 0 1e-08 26 5.000000 4.999999991767538e+00
5 0 1e-10 33 5.000000 4.999999999935683e+00
6 0 1e-12 40 5.000000 4.999999999999497e+00
7 0 1e-14 46 5.000000 4.999999999999992e+00
8 -2 5e-16 51 0.000000 0.000000000000000e+00
9 -2 1e-16 51 0.000000 0.000000000000000e+00
In [63]:
fig, ax = plt.subplots(1, 2, figsize=(30, 5), sharex='col', sharey='row')

x  = numpy.linspace(2.5, 7.5, 6000)

ax[0].plot(x, fn1(x), color='black', linestyle='solid')
ax[0].set(xlim=(2.5, 7.5), ylim=(-0.1, 1.7), xlabel='x', ylabel='|sin x^2|')
m1 = df1.loc[df1['status'] == 0]['xmin'].values
ax[0].scatter(m1, fn1(m1), s= 40, color='red')
m2 = df2.loc[df2['status'] == 0]['xmin'].values
ax[0].scatter(m2, fn2(m2), s= 40, color='red')

ax[1].plot(x, numpy.vectorize(fn3)(x), color='black', linestyle='solid')
ax[1].set(xlim=(2.5, 7.5), ylim=(-0.1, 1.7))
m3 = df3.loc[df3['status'] == 0]['xmin'].values
ax[1].scatter(m3, numpy.vectorize(fn3)(m3), s= 40, color='red')
Out[63]:
<matplotlib.collections.PathCollection at 0x7f20fc1e5c88>

-5 x^5 + 4 x^4 -12 x^3 + 11 x^2 -2 x + 1 [-0.5, 0.5]

In [64]:
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn = lambda x: -5.0 * x**5 + 4.0 * x**4 - 12.0 * x**3 + 11.0 * x**2 - 2.0 * x + 1.0

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15]:
    st, xm, n = quadratic2.optim(fn, -0.5, 0.5, e, 10000)
    df = df.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,)},
                   ignore_index=True)
In [65]:
df
Out[65]:
status eps n xmin str(xmin)
0 0 10 1 0.131630 1.316301304149554e-01
1 0 1 1 0.131630 1.316301304149554e-01
2 0 0.1 1 0.131630 1.316301304149554e-01
3 0 1e-05 9 0.109862 1.098618863856130e-01
4 0 1e-08 15 0.109860 1.098599167643715e-01
5 0 1e-10 21 0.109860 1.098599167134191e-01
6 0 1e-12 27 0.109860 1.098599167635754e-01
7 0 1e-14 34 0.109860 1.098599167643653e-01
8 0 1e-15 37 0.109860 1.098599167643708e-01
In [66]:
fig, ax = plt.subplots(1, 1, figsize=(10, 5), sharex='col', sharey='row')

x = numpy.linspace(-0.5, 0.5, 5000)

ax.plot(x, fn(x), color='black', linestyle='solid')
ax.set(xlim=(-0.7, 0.7))

m = df['xmin'].values

ax.scatter(m, fn(m), s= 10, color='red')
Out[66]:
<matplotlib.collections.PathCollection at 0x7f20faec07f0>

- ln^2 (x - 2) + ln^2 (10 - x) - x ^ 0.2 [6, 9.9]

In [67]:
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn = lambda x: - numpy.log(x - 2.0) ** 2 + numpy.log(10.0 - x) ** 2 - numpy.power(x, 0.2)

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15]:
    st, xm, n = quadratic2.optim(fn, 6.0, 9.9, e, 10000)
    df = df.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,)},
                   ignore_index=True)
In [68]:
df
Out[68]:
status eps n xmin str(xmin)
0 0 10 1 8.320907 8.320907204183392e+00
1 0 1 1 8.320907 8.320907204183392e+00
2 0 0.1 4 8.715421 8.715421242830690e+00
3 0 1e-05 65 9.206185 9.206185399047456e+00
4 0 1e-08 111 9.206243 9.206243144595646e+00
5 0 1e-10 117 9.206243 9.206243172063763e+00
6 0 1e-12 117 9.206243 9.206243172063763e+00
7 0 1e-14 117 9.206243 9.206243172063763e+00
8 0 1e-15 117 9.206243 9.206243172063763e+00
In [69]:
fig, ax = plt.subplots(1, 1, figsize=(20, 5), sharex='col', sharey='row')

x = numpy.linspace(6.0, 9.9, 5000)

ax.plot(x, fn(x), color='black', linestyle='solid')
ax.set(xlim=(6.0, 10.0))

m = df['xmin'].values

ax.scatter(m, fn(m), s= 20, color='red')
Out[69]:
<matplotlib.collections.PathCollection at 0x7f20fae7beb8>

-3 x sin(0.75 x) + e^{-2 x} [0, 2pi]

In [70]:
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn = lambda x: - 3.0 * x * numpy.sin(0.75 * x) + numpy.exp(-2.0 * x)

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15]:
    st, xm, n = quadratic2.optim(fn, 0.0, 2.0 * numpy.pi, e, 10000)
    df = df.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,)},
                   ignore_index=True)
In [71]:
df
Out[71]:
status eps n xmin str(xmin)
0 0 10 1 2.647083 2.647082987024505e+00
1 0 1 1 2.647083 2.647082987024505e+00
2 0 0.1 2 2.691865 2.691864721523927e+00
3 0 1e-05 8 2.706475 2.706475106832269e+00
4 0 1e-08 12 2.706476 2.706475582793379e+00
5 0 1e-10 21 2.706476 2.706475580452379e+00
6 0 1e-12 28 2.706476 2.706475580488280e+00
7 0 1e-14 36 2.706476 2.706475580488815e+00
8 -2 1e-15 41 0.000000 0.000000000000000e+00
In [72]:
fig, ax = plt.subplots(1, 1, figsize=(20, 10), sharex='col', sharey='row')

x = numpy.linspace(0.0, 2.0 * numpy.pi, 5000)

ax.plot(x, fn(x), color='black', linestyle='solid')
ax.set(xlim=(0.0, 2.0 * numpy.pi))

m = df['xmin'].values
ax.scatter(m, fn(m), s= 20, color='red')
Out[72]:
<matplotlib.collections.PathCollection at 0x7f20fae3e5c0>

e^{3 x} +5 e^{-2 x} [0, 1]

In [73]:
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn = lambda x: numpy.exp(3.0 * x) + 5.0 * numpy.exp(-2.0 * x)

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15]:
    st, xm, n = quadratic2.optim(fn, 0.0, 1.0, e, 10000)
    df = df.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,)},
                   ignore_index=True)
In [74]:
df
Out[74]:
status eps n xmin str(xmin)
0 0 10 1 0.230070 2.300698583092384e-01
1 0 1 1 0.230070 2.300698583092384e-01
2 0 0.1 1 0.230070 2.300698583092384e-01
3 0 1e-05 6 0.240791 2.407908720319528e-01
4 0 1e-08 12 0.240795 2.407945594782837e-01
5 0 1e-10 18 0.240795 2.407945594236454e-01
6 0 1e-12 24 0.240795 2.407945594774299e-01
7 0 1e-14 31 0.240795 2.407945594782770e-01
8 0 1e-15 34 0.240795 2.407945594782828e-01
In [75]:
fig, ax = plt.subplots(1, 1, figsize=(20, 10), sharex='col', sharey='row')

x = numpy.linspace(0.0, 1.0, 5000)

ax.plot(x, fn(x), color='black', linestyle='solid')
ax.set(xlim=(0.0, 1.0))

m = df['xmin'].values
ax.scatter(m, fn(m), s= 20, color='red')
Out[75]:
<matplotlib.collections.PathCollection at 0x7f20fadfb8d0>

0.2 x ln x + (x - 2.3)^2 [0.5, 2.5]

In [76]:
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'xmin', 'str(xmin)'])

fn = lambda x: 0.2 * x * numpy.log(x) + (x - 2.3)**2

for e in [10, 1, 1e-1, 1e-5, 1e-8, 1e-10, 1e-12, 1e-14, 1e-15]:
    st, xm, n = quadratic2.optim(fn, 0.5, 2.5, e, 10000)
    df = df.append({'status'             : st,
                     'eps'                : e,
                     'n'                  : n,
                     'xmin'               : xm,
                     'str(xmin)'          : '%.15e' % (xm,)}, 
                   ignore_index=True)
In [77]:
df
Out[77]:
status eps n xmin str(xmin)
0 0 10 1 2.125531 2.125530534865416e+00
1 0 1 1 2.125531 2.125530534865416e+00
2 0 0.1 1 2.125531 2.125530534865416e+00
3 0 1e-05 3 2.124640 2.124639778809396e+00
4 0 1e-08 4 2.124640 2.124639773076488e+00
5 0 1e-10 12 2.124640 2.124639775268782e+00
6 0 1e-12 26 2.124640 2.124639775376816e+00
7 0 1e-14 32 2.124640 2.124639775377250e+00
8 0 1e-15 43 2.124640 2.124639775377411e+00
In [78]:
fig, ax = plt.subplots(1, 1, figsize=(20, 10), sharex='col', sharey='row')

x = numpy.linspace(0.5, 2.5, 5000)

ax.plot(x, fn(x), color='black', linestyle='solid')
ax.set(xlim=(0.5, 2.5))

m = df['xmin'].values
ax.scatter(m, fn(m), s= 20, color='red')
Out[78]:
<matplotlib.collections.PathCollection at 0x7f20fadaa6d8>