| 1 | initial version |
The thing is that spltest is not a symbolic function and cannot be called on symbolic arguments such as r. That is, spltest(r) you are trying to substitute is undefined.
To overcome this issue, one can define a symbolic function that will call spltest for numerical evaluation, but until then remains "unevaluated". Here is an example:
def spltest_evalf(self, x, parent=None, algorithm=None): return spltest(x)
spltest_func = function("spltest_func", nargs=1, evalf_func=spltest_evalf)
new_eq = eq.subs({nu(r): spltest_func(r)})
print( new_eq)
print( new_eq(1) )
print( new_eq(1).n() )
which prints:
r |--> 2*spltest_func(r)
2*spltest_func(1)
2.00000000000000
| 2 | No.2 Revision |
The thing is that spltest is not a symbolic function and cannot be called on symbolic arguments such as r. That is, spltest(r) you are trying to substitute is undefined.
To overcome this issue, one can define a symbolic function that will call spltest for numerical evaluation, but until then remains "unevaluated". Here is an example:
def spltest_evalf(self, x, parent=None, algorithm=None): return spltest(x)
spltest_func = function("spltest_func", nargs=1, evalf_func=spltest_evalf)
new_eq = eq.subs({nu(r): spltest_func(r)})
print( new_eq) new_eq )
print( new_eq(1) )
print( new_eq(1).n() )
which prints:
r |--> 2*spltest_func(r)
2*spltest_func(1)
2.00000000000000
For details on the functions machinery, see https://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/function_factory.html
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.