import pandas, numpy
import bisection
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('seaborn-whitegrid')
df1 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)'])
df2 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)'])
df3 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, en = bisection.optim(fn1, -1.5, 20.1, e, 10000)
df1 = df1.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn2, -20.1, 0.9, e, 10000)
df2 = df2.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn3, -1.5, 20.1, e, 10000)
df3 = df3.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df1
df2
df3
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')
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 1e-15, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn, -1.5, 20.1, e, 10000)
df = df.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df
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')
df1 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)', 'delta'])
df2 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)'])
df3 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, en = bisection.optim(fn1, 1.1, 20.1, e, 10000)
df1 = df1.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,),
'delta' : numpy.fabs(xm - xmin)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn2, 1.1, 2.5, e, 10000)
df2 = df2.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn3, 1.1, 20.1, e, 10000)
df3 = df3.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df1
df2
df3
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')
df1 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)', '|xmin - pi^0.5|'])
df2 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)', '|xmin - (2pi)^0.5|'])
df3 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 1e-15, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn1, 1.5, 2.0, e, 10000)
df1 = df1.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,),
'|xmin - pi^0.5|' : '%.15e' % (numpy.fabs(xm - numpy.sqrt(numpy.pi)),)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn2, 2.3, 2.7, e, 10000)
df2 = df2.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'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, en = bisection.optim(fn3, 1.5, 2.0, e, 10000)
df3 = df3.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df1
df2
df3
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')
df1 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)', '|xmin - pi|'])
df2 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', 'xmin', 'str(xmin)', '|xmin - 2pi|'])
df3 = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 1e-15, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn1, 2.0, 4.5, e, 10000)
df1 = df1.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,),
'|xmin - pi|' : '%.15e' % (numpy.fabs(xm - numpy.pi),)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn2, 4.9, 7.5, e, 10000)
df2 = df2.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,),
'|xmin - 2pi|' : '%.15e' % (numpy.fabs(xm - 2.0 * numpy.pi),)},
ignore_index=True)
st, xm, n, en = bisection.optim(fn3, 2.5, 7.5, e, 10000)
df3 = df3.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df1
df2
df3
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')
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn, -0.5, 0.5, e, 10000)
df = df.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df
fig, ax = plt.subplots(1, 1, figsize=(30, 10), 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.loc[df['status'] == 0]['xmin'].values
ax.scatter(m, fn(m), s= 40, color='red')
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn, 6.0, 9.9, e, 10000)
df = df.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df
fig, ax = plt.subplots(1, 1, figsize=(30, 10), 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.loc[df['status'] == 0]['xmin'].values
ax.scatter(m, fn(m), s= 40, color='red')
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn, 0.0, 2.0 * numpy.pi, e, 10000)
df = df.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df
fig, ax = plt.subplots(1, 1, figsize=(30, 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.loc[df['status'] == 0]['xmin'].values
ax.scatter(m, fn(m), s= 40, color='red')
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn, 0.0, 1.0, e, 10000)
df = df.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df
fig, ax = plt.subplots(1, 1, figsize=(30, 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.loc[df['status'] == 0]['xmin'].values
ax.scatter(m, fn(m), s= 40, color='red')
df = pandas.DataFrame(columns=['status', 'eps', 'n', 'en', '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, 5e-16, 1e-16]:
st, xm, n, en = bisection.optim(fn, 0.5, 2.5, e, 10000)
df = df.append({'status' : st,
'eps' : e,
'n' : n,
'en' : en,
'xmin' : xm,
'str(xmin)' : '%.15e' % (xm,)},
ignore_index=True)
df
fig, ax = plt.subplots(1, 1, figsize=(30, 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.loc[df['status'] == 0]['xmin'].values
ax.scatter(m, fn(m), s= 40, color='red')