def test_model_monovariate(func, var, par, k):
model = Model(func, var, par)
x, dx = np.linspace(0, 10, 100, retstep=True, endpoint=False)
U = np.cos(x * 2 * np.pi / 10)
fields = model.fields_template(x=x, U=U)
parameters = dict(periodic=True, k=k)
F = model.F(fields, parameters)
J_sparse = model.J(fields, parameters)
J_dense = model.J(fields, parameters, sparse=False)
J_approx = model.F.diff_approx(fields, parameters)
dxU = np.gradient(np.pad(U, 2, mode='wrap')) / dx
dxxU = np.gradient(dxU) / dx
dxU = dxU[2:-2]
dxxU = dxxU[2:-2]
assert np.isclose(F, k * dxxU, atol=1E-3).all()
assert np.isclose(J_approx, J_sparse.todense(), atol=1E-3).all()
assert np.isclose(J_approx, J_dense, atol=1E-3).all()
评论列表
文章目录