我正在尝试找到一种方法来用函数中的另一个变量替换一个变量。 (不在表达式中) 在下面的示例中,在函数 v(t) 中,我想用值 0 替换变量 t0。
问题: v(t) = v(t).subs({t0:0}) 导致错误 v(t).subs({t0:0}) 不会进行替换
那么我该如何进行这个替换呢? 它适用于表达式,但是否可以在函数中执行相同的操作,如果可以,如何执行?
谢谢你们的帮助,伙计们。
# importation of modules required
import sympy as sy
from sympy import symbols, Function
# defintion of the symbols required and the function
Fnet, v0, t0, t, m = symbols('F_net v_0 t_0 t m')
def v(t):
return Fnet*t/m - Fnet*t0/m + v0
display ("v(t)", v(t))
# trying to substitute t0 by 0 in the function v(t)
v(t).subs({t0:0})
display ("v(t)", v(t))
# note : v(t) = v(t).subs({t0:0}) causes an error
您面临的问题主要是由于符号函数和Python函数之间的误解造成的。
在您的代码中,
v(t)
被定义为返回 SymPy 表达式的 Python 函数。当您尝试 v(t).subs({t0:0})
时,它会正确地将表达式 t0
中的 0
替换为 v(t)
。但是,它不会更改 Python 函数 v(t)
本身,每次调用时都会继续返回原始表达式。
如何实施上述步骤:
import sympy as sy
from sympy import symbols, Function
from IPython.display import display
Fnet, v0, t0, t, m = symbols('F_net v_0 t_0 t m')
def v(t):
return Fnet*t/m - Fnet*t0/m + v0
# Display original v(t)
display ("v(t) before substitution", v(t))
# Make a substitution in the expression returned by v(t)
new_expression = v(t).subs({t0:0})
# Redefine v(t) to use the new expression
def v(t):
return new_expression
# Display new v(t)
display ("v(t) after substitution", v(t))
运行上述代码后,新的
v(t)
将始终返回用t0
替换0
的表达式。