f(x).subs() 替换 sympy

问题描述 投票:0回答:1

我正在尝试找到一种方法来用函数中的另一个变量替换一个变量。 (不在表达式中) 在下面的示例中,在函数 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 function sympy substitution
1个回答
0
投票

您面临的问题主要是由于符号函数和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
的表达式。

© www.soinside.com 2019 - 2024. All rights reserved.