gpt4 book ai didi

python - 为什么 sympyIntegrate 在对实值对数表达式进行积分时会引入虚数常数?

转载 作者:行者123 更新时间:2023-12-01 06:27:51 25 4
gpt4 key购买 nike

I found the solution while doing research for the question, but I still post the question/answer here. I could not find other resources while searching online, so I hope this post might help someone in the future.

您好,我正在使用 sympy 来计算分段定义函数的积分。然而,积分引入了虚数常数。

最小示例

from sympy import *
f = interpolating_spline(1, Symbol('p'), [0,0.1,1], [0,10,1000])
r = (ln(20000-f)).simplify()
s = integrate(r)
print('r='+latex(r))
print('s='+latex(s))

这给出

r=\log{\left(\begin{cases} 20000 - 100.0 p & \text{for}: p \geq 0 \wedge p \leq 0.1 \20100.0 - 1100.0 p & \text{for}: p \geq 0.1 \wedge p \leq 1 \end{cases} \right)} s=\begin{cases} \text{NaN} & \text{for}: p < 0 \1.0 p \log{\left(20000 - 100.0 p \right)} - 1.0 p - 200.0 \log{\left(100.0 p - 20000.0 \right)} + 1980.69751050723 + 200.0 i \pi & \text{for}: p \leq 0.1 \1.0 p \log{\left(20100.0 - 1100.0 p \right)} - 1.0 p - 18.2727272727273 \log{\left(1100.0 p - 20100.0 \right)} + 181.054613456189 + 18.2727272727273 i \pi & \text{for}: p \leq 1 \\text{NaN} & \text{otherwise} \end{cases}

为什么积分中有虚数常数?我隐约记得一些关于复杂分析中的分支切割的事情,所以它可能与此有关?

问题表述的起源是 Kelly criterion ,适应损失超出曲线。

预期结果

如果我只对第一个表达式进行积分,我会得到一个没有常数的实值积分:

In [71]: integrate(ln(20000-100*p))
Out[71]: p*log(20000 - 100*p) - p - 200*log(p - 200)

但是这个结果也很奇怪,因为 p=0.1 不会定义结果,因为 p-200 将为负数。很奇怪。

最佳答案

将集成策略更改为手动

使用manual=True集成策略时,常量消失。

In [84]: print('r='+latex(integrate(r,manual=True)))

r=\begin{cases} \text{NaN} & \text{for}: p < 0 \- 1.0 p - 0.01 \left(20000 - 100.0 p\right) \log{\left(20000 - 100.0 p \right)} + 200.0 \log{\left(20000 \right)} & \text{for}: p \leq 0.1 \- 1.0 p - 0.000909090909090909 \left(20100.0 - 1100.0 p\right) \log{\left(20100.0 - 1100.0 p \right)} - 1799.64289705104 + 200.0 \log{\left(20000 \right)} & \text{for}: p \leq 1 \\text{NaN} & \text{otherwise} \end{cases}

我在https://docs.sympy.org/latest/modules/integrals/integrals.html#sympy.integrals.integrals.integrate的文档中找到了这个选项

关于python - 为什么 sympyIntegrate 在对实值对数表达式进行积分时会引入虚数常数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60041886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com