You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.2 KiB
PythOn
90 lines
3.2 KiB
PythOn
10 years ago
|
|
||
|
|
||
|
import unittest
|
||
|
import numpy as np
|
||
|
from numpy import cos, pi
|
||
|
from numpy.testing import assert_array_almost_equal
|
||
|
from wafo.padua import (padua_points, testfunct, padua_fit,
|
||
|
padua_fit2,
|
||
|
padua_cubature, padua_val)
|
||
|
|
||
|
|
||
|
class PaduaTestCase(unittest.TestCase):
|
||
|
def test_padua_points_degree0(self):
|
||
|
pad = padua_points(0)
|
||
|
expected = [[-1],[-1]]
|
||
|
assert_array_almost_equal(pad, expected, 15)
|
||
|
|
||
|
def test_padua_points_degree1(self):
|
||
|
pad = padua_points(1)
|
||
|
expected = [cos(np.r_[0,1,1]*pi),
|
||
|
cos(np.r_[1,0,2]*pi/2)]
|
||
|
|
||
|
assert_array_almost_equal(pad, expected, 15)
|
||
|
|
||
|
def test_padua_points_degree2(self):
|
||
|
pad = padua_points(2, domain=[0,1,0,2])
|
||
|
expected = [(cos(np.r_[0,0,1,1,2,2]*pi/2)+1)/2,
|
||
|
cos(np.r_[1,3,0,2,1,3]*pi/3)+1]
|
||
|
|
||
|
assert_array_almost_equal(pad, expected, 15)
|
||
|
|
||
|
def test_testfunct(self):
|
||
|
vals = [testfunct(0, 0, id) for id in range(12)]
|
||
|
expected = [7.664205912849231e-01, 0.7071067811865476, 0,
|
||
|
1.6487212707001282, 1.9287498479639178e-22, 1.0,
|
||
|
1.0, 1.0, 1.0, 0.0, 1.0, 0.0]
|
||
|
assert_array_almost_equal(vals, expected, 15)
|
||
|
|
||
|
def test_padua_fit_even_degree(self):
|
||
|
points = padua_points(10)
|
||
|
C0f, abs_error = padua_fit(points, testfunct, 6)
|
||
|
expected = np.zeros((11, 11))
|
||
|
expected[0,0] = 1;
|
||
|
assert_array_almost_equal(C0f, expected, 15)
|
||
|
|
||
|
def test_padua_fit_odd_degree(self):
|
||
|
points = padua_points(9)
|
||
|
C0f, abs_error = padua_fit(points, testfunct, 6)
|
||
|
expected = np.zeros((10, 10))
|
||
|
expected[0,0] = 1;
|
||
|
assert_array_almost_equal(C0f, expected, 15)
|
||
|
|
||
|
def test_padua_fit_odd_degree2(self):
|
||
|
points = padua_points(9)
|
||
|
C0f, abs_error = padua_fit2(points, testfunct, 6)
|
||
|
expected = np.zeros((10, 10))
|
||
|
expected[0,0] = 1;
|
||
|
assert_array_almost_equal(C0f, expected, 15)
|
||
|
|
||
|
def test_padua_cubature(self):
|
||
|
domain = [0,1,0,1]
|
||
|
points = padua_points(500, domain)
|
||
|
C0f, abs_error = padua_fit(points, testfunct, 0)
|
||
|
val = padua_cubature(C0f, domain)
|
||
|
expected = 4.06969589491556e-01
|
||
|
assert_array_almost_equal(val, expected, 15)
|
||
|
|
||
|
def test_padua_val_unordered(self):
|
||
|
domain = [0,1,0,1]
|
||
|
points = padua_points(20, domain)
|
||
|
C0f, abs_error = padua_fit(points, testfunct, 0)
|
||
|
X = [0,0.5,1]
|
||
|
|
||
|
val = padua_val(X, X, C0f, domain)
|
||
|
expected = [7.664205912849228e-01, 3.2621734202884815e-01,
|
||
|
3.587865112678535e-02]
|
||
|
assert_array_almost_equal(val, expected, 14)
|
||
|
|
||
|
def test_padua_val_grid(self):
|
||
|
domain = [0,1,0,1]
|
||
|
a, b, c, d = domain
|
||
|
points = padua_points(21, domain)
|
||
|
C0f, abs_error = padua_fit(points, testfunct, 0)
|
||
|
X1 = np.linspace(a, b, 2)
|
||
|
X2 = np.linspace(c, d, 2)
|
||
|
val = padua_val(X1, X2, C0f,domain, use_meshgrid=True);
|
||
|
expected = [[7.664205912849229e-01,1.0757071952145181e-01],
|
||
|
[2.703371615911344e-01,3.5734971024838565e-02]]
|
||
|
assert_array_almost_equal(val, expected, 14)
|