def test_odefun_harmonic():
    mp.dps = 15
    # Harmonic oscillator
    f = odefun(lambda x, y: [-y[1], y[0]], 0, [1, 0])
    for x in [0, 1, 2.5, 8, 3.7]:    #  we go back to 3.7 to check caching
        c, s = f(x)
        assert c.ae(cos(x))
        assert s.ae(sin(x))
Exemple #2
0
def clenshaw_curtis_nodes(n):
  """Return Clenshaw-Curtis nodes (actually returns n+1 nodes)."""

  r = set()
  for k in range(n+1):
    r.add(mpmath.cos(k*mpmath.pi/mpmath.mpf(n)))

  return sorted(r)
Exemple #3
0
def test_odefun_harmonic():
    mp.dps = 15
    # Harmonic oscillator
    f = odefun(lambda x, y: [-y[1], y[0]], 0, [1, 0])
    for x in [0, 1, 2.5, 8, 3.7]:  #  we go back to 3.7 to check caching
        c, s = f(x)
        assert c.ae(cos(x))
        assert s.ae(sin(x))
Exemple #4
0
def clenshaw_curtis_nodes(n):
  """Return Clenshaw-Curtis nodes."""

  r = set()
  for i in range(n):
    r.add(mpmath.cos(i*mpmath.pi/mpmath.mpf(n-1)))

  return map_to_zero_one(r)
Exemple #5
0
def test_odefun_sinc_large():
    mp.dps = 15
    # Sinc function; test for large x
    f = sinc
    g = odefun(lambda x, y: [(cos(x) - y[0]) / x],
               1, [f(1)],
               tol=0.01,
               degree=5)
    assert abs(f(100) - g(100)[0]) / f(100) < 0.01
Exemple #6
0
def clenshaw_curtis_weights(n):
  """Return Clenshaw-Curtis weights (actually the n+1 weights)."""

  w = []
  for k in range(n+1):
    c_k = 1.0 if k % n == 0 else 2.0
    t_k = k*mpmath.pi/mpmath.mpf(n)

    acc = 1.0
    for j in range(1, n/2+1):
      b_j = 2.0 if j < n/2 else 1.0
      acc -= b_j / (4.0*j**2 - 1.0) * mpmath.cos(2*j*t_k)

    w.append(c_k / n * acc)

  return w
 p = np.poly1d([1, 0, 0, 0, 1])
 # use mayavi if possible.
 # otherwise, fall back to matplotlib.
 if use_mayavi:
     plot_both_mayavi(p)
     nroot_real_mayavi(5)
     nroot_imag_mayavi(5)
 else:
     plot_both_matplotlib(p)
     nroot_real_matplotlib(5)
     nroot_imag_matplotlib(5)
 
 # All the different integration examples.
 f1 = lambda z: z.conjugate()
 f2 = lambda z: mp.exp(z)
 c1 = lambda t: mp.cos(t) + 1.0j * mp.sin(t)
 c2 = lambda t: t + 1.0j * t
 c3 = lambda t: t
 c4 = lambda t: 1 + 1.0j * t
 c5 = lambda t: mp.cos(t) + 1.0j + 1.0j * mp.sin(t)
 print "z conjugate counterclockwise along the unit ball starting and ending at 1."
 print contour_int(f1, c1, 0, 2 * np.pi)
 print "z conjugate along a straight line from 0 to 1+1j."
 print contour_int(f1, c2, 0, 1)
 print "z conjugate along the real axis from 0 to 1, then along the line from 1 to 1+1j."
 print contour_int(f1, c3, 0, 1) + contour_int(f1, c4, 0, 1)
 print "z conjugate along the unit ball centered at 1j from 0 to 1+1j."
 print contour_int(f1, c5, -np.pi / 2, 0.)
 print "e^z counterclockwise along the unit ball starting and ending at 1."
 print contour_int(f2, c1, 0, 2 * np.pi)
 print "e^z along a straight line from 0 to 1+1j."
def test_odefun_sinc_large():
    mp.dps = 15
    # Sinc function; test for large x
    f = sinc
    g = odefun(lambda x, y: [(cos(x)-y[0])/x], 1, [f(1)], tol=0.01, degree=5)
    assert abs(f(100) - g(100)[0])/f(100) < 0.01
 def pi_inner_integral(y):
     vardict = {'y': y}
     out = maple_link.eval_stack(pi_stack, vardict)
     return out * cos(int(j) * y)
 def pi_inner_integral(y):
     vardict = {'y':y}
     out = maple_link.eval_stack(pi_stack, vardict)
     return out*cos(int(j)*y)
 def f(x):
     return d_polynomial(x, list_a) - sm.cos(x)
    p = np.poly1d([1, 0, 0, 0, 1])
    # use mayavi if possible.
    # otherwise, fall back to matplotlib.
    if use_mayavi:
        plot_both_mayavi(p)
        nroot_real_mayavi(5)
        nroot_imag_mayavi(5)
    else:
        plot_both_matplotlib(p)
        nroot_real_matplotlib(5)
        nroot_imag_matplotlib(5)

    # All the different integration examples.
    f1 = lambda z: z.conjugate()
    f2 = lambda z: mp.exp(z)
    c1 = lambda t: mp.cos(t) + 1.0j * mp.sin(t)
    c2 = lambda t: t + 1.0j * t
    c3 = lambda t: t
    c4 = lambda t: 1 + 1.0j * t
    c5 = lambda t: mp.cos(t) + 1.0j + 1.0j * mp.sin(t)
    print "z conjugate counterclockwise along the unit ball starting and ending at 1."
    print contour_int(f1, c1, 0, 2 * np.pi)
    print "z conjugate along a straight line from 0 to 1+1j."
    print contour_int(f1, c2, 0, 1)
    print "z conjugate along the real axis from 0 to 1, then along the line from 1 to 1+1j."
    print contour_int(f1, c3, 0, 1) + contour_int(f1, c4, 0, 1)
    print "z conjugate along the unit ball centered at 1j from 0 to 1+1j."
    print contour_int(f1, c5, -np.pi / 2, 0.)
    print "e^z counterclockwise along the unit ball starting and ending at 1."
    print contour_int(f2, c1, 0, 2 * np.pi)
    print "e^z along a straight line from 0 to 1+1j."
 def f(x):
     return d_polynomial(x, list_a) - sm.cos(x);