num_functions = 100
degree = 3
space = FunctionSet(lambda a: lambda x:
sum(a[i] * x**i for i in range(degree + 1))
)
coeffs = torch.randn(degree + 1, num_functions)
poly = space(coeffs)
u = torch.stack([p(x) for p in poly])
In DeepXDE, the same code is:
space = dde.data.PowerSeries(N=degree + 1)
coeffs = space.random(num_functions)
u = space.eval_batch(coeffs, x)
We should introduce the following functionality:
[ ] poly = space.random(num_functions) which returns an object that contains the list of functions, but can also be evaluated as follows
[ ] u = poly(x) which returns the same as the eval_batch in DeepXDE
Maybe it makes sense to rename FunctionSet to FunctionSpace then (as in DeepXDE) that holds the mathematical description of the parametric function space, and use the name FunctionSet for the object that holds the list of functions already evaluated at a set of coefficients.
Currently, we have sth. like
In DeepXDE, the same code is:
We should introduce the following functionality:
poly = space.random(num_functions)
which returns an object that contains the list of functions, but can also be evaluated as followsu = poly(x)
which returns the same as theeval_batch
in DeepXDEMaybe it makes sense to rename
FunctionSet
toFunctionSpace
then (as in DeepXDE) that holds the mathematical description of the parametric function space, and use the nameFunctionSet
for the object that holds the list of functions already evaluated at a set of coefficients.