如何在 SymPy 中自动用 log(abs(x)) 替换 log(x)
How to replace log(x) by log(abs(x)) automatically in SymPy
我正在尝试使用 Sympy 求解微分方程 y'=cot(x)
:
x = symbols("x")
y = Function("y")(x)
dsolve(diff(y, x) - cot(x))
它给了我对数解:y(x) = C1 + log(sin(x))
。
我如何通过组合 log + abs 替换此表达式日志:log(sin(x))
-> log(abs(sin(x)))
?我可以手动完成,但不是很方便。有什么方法可以使用 SymPy 工具(类似于 subs
命令)吗?
请注意 abs
实际上并不需要:积分常数 C1
可以包含 I*pi
。不带 abs
的形式对所有复数 x
有效,而 abs
形式仅对实数 x 有效。
无论如何,你可以这样做:
In [6]: sol
Out[6]: y(x) = C₁ + log(sin(x))
In [7]: sol.replace(log, lambda e: log(abs(e)))
Out[7]: y(x) = C₁ + log(│sin(x)│)
我正在尝试使用 Sympy 求解微分方程 y'=cot(x)
:
x = symbols("x")
y = Function("y")(x)
dsolve(diff(y, x) - cot(x))
它给了我对数解:y(x) = C1 + log(sin(x))
。
我如何通过组合 log + abs 替换此表达式日志:log(sin(x))
-> log(abs(sin(x)))
?我可以手动完成,但不是很方便。有什么方法可以使用 SymPy 工具(类似于 subs
命令)吗?
请注意 abs
实际上并不需要:积分常数 C1
可以包含 I*pi
。不带 abs
的形式对所有复数 x
有效,而 abs
形式仅对实数 x 有效。
无论如何,你可以这样做:
In [6]: sol
Out[6]: y(x) = C₁ + log(sin(x))
In [7]: sol.replace(log, lambda e: log(abs(e)))
Out[7]: y(x) = C₁ + log(│sin(x)│)