Я нашел решение, когда проводил исследование вопроса, но все же оставляю вопрос / ответ здесь. Я не смог найти другие ресурсы при поиске в Интернете, поэтому я надеюсь, что этот пост может кому-то помочь в будущем.
Здравствуйте, я использую 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))
Что дает
![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}](https://i.stack.imgur.com/op9K6.png)
Почему в интеграле есть мнимые постоянные? Я смутно помню кое-что о сокращениях ветвей из комплексного анализа, так что это может быть связано с этим?
Источником формулировки проблемы является критерий Келли , адаптированный к кривым превышения потерь.
Ожидаемый результат
Если я интегрирую только первое выражение, я получу вещественный интеграл без констант:
In [71]: integrate(ln(20000-100*p))
Out[71]: p*log(20000 - 100*p) - p - 200*log(p - 200)
Но этот результат также странный, так как результат не будет определен для p=0.1
, так как p-200
будет отрицательным. Очень странно.