Sympy.solve никогда не возвращается для определенных коэффициентовPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Sympy.solve никогда не возвращается для определенных коэффициентов

Сообщение Anonymous »

Форма выражения (соответствующая переменной, называемой «выражение» ниже), критические точки которого я пытаюсь найти, одинакова во всех случаях, поскольку единственное, что меняется между успехом и неудачей, — это значения показатели степени для каждого члена.
Вот минимальный воспроизводимый пример:

Код: Выделить всё

from sympy import symbols, Mul, diff, solve
from decimal import Decimal

class Histogram:
def __init__(self, bins, pdf):
self.bins = bins
self.pdf = pdf

histogram = Histogram(
bins=[-1, 0, 1],
pdf=[Decimal('0.454861111111111104943205418749130330979824066162109375'),
Decimal('0'),
Decimal('0.545138888888888839545643349993042647838592529296875')]
)

def computation(histogram):

A = Decimal('1')
e = Decimal('1')
M_factor = Decimal('1.0828567056280801')
x = symbols('x')
product_terms = []
profit = lambda cp: (e * M_factor ** cp - e) * x
commission = lambda cp: (e * M_factor ** cp + e) * Decimal('0.0005') * x

for candles_profit, freq in zip(histogram.bins, histogram.pdf):
profit_term = profit(candles_profit)
commission_term = commission(candles_profit)
term = ((A + profit_term - commission_term) / A) ** freq
product_terms.append(term)

expression = Mul(*product_terms)
derivative = diff(expression, x)
solutions = solve(derivative, x)
print("Solutions:", solutions)

computation(histogram)
Переменная «выражение» в приведенной выше вычислительной функции превращается в отладчике в следующее:

Код: Выделить всё

(1.0 - 0.0774785191289289x)^0.454861111111111 \* (0.0818152772752661x + 1.0)^0.545138888888889
Если вы создадите файл Python с приведенным выше примером и запустите его, он никогда не вернется при попытке найти критические точки выражения.
Уникальный Я вижу, что особенность, которая может объяснить неудачу, заключается в том, что в ее показателях есть повторяющиеся десятичные дроби, как в рациональном числе, таком как 2/3. Чтобы подтвердить свою интуицию о том, что это является источником ошибки, я еще раз просмотрел сделки, которые сформировали гистограмму для этого символа: 131 были в сегменте -1 и 157 были в сегменте +1. 131/288 = 0,454861 ​​с повторяющейся 1 и 157/288 = 0,545138 с повторяющейся 8. Таким образом, получается, что хотя десятичные значения сохраняют много позиций точности в гистограмме, которую мы передаем в вычислительную функцию, эти значения неточны. поскольку повторение через некоторое время прекращается, но даже это не имеет значения, потому что Sympy обрезает значения до этого момента. Поскольку Sympy.solve преобразует мои входные десятичные дроби Python в числовые значения с плавающей запятой, а не в рациональные числа Sympy, разумно ли ожидать, что это является источником проблемы? Если да, то как я могу изменить свой код, чтобы вычисления выполнялись правильно, а не застревали навсегда?

Подробнее здесь: https://stackoverflow.com/questions/790 ... efficients
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Sympy.solve никогда не возвращается для определенных коэффициентов
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Sympy.solve никогда не возвращается для определенных коэффициентов
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Sympy.solve никогда не возвращается для определенных коэффициентов
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Функциональность Sympy.solve зависит от предоставленных коэффициентов
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Функциональность Sympy.solve зависит от предоставленных коэффициентов
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»