如何在 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)│)