Как извлечь коэффициенты из моего уравнения: x ^ 3 - 60x ^ 2 + 1100x - 6000 / -6000? - PullRequest
0 голосов
/ 21 апреля 2020

Учитывая массив целых чисел, я пытаюсь извлечь коэффициент перед каждым "x^i", ...., "x^3", "x^2", "x".

Учитывая уравнение v(x) = (x-x0)(x-x1)...(x-x(i-1)) / (xi-x0)(xi-x1)...(xi-x(i-1))

Например, если заданный массив [30, 20, 10, 0], то ожидаемый результат будет:

x^3 - 60x^2 + 1100x - 6000 / -6000

Я почти на месте Мне просто нужно найти способ получить 1, -60, 1100, -6000 из числителя.

Я пробовал различные методы разделения, но, похоже, это не сработало.

Мой текущий код:

from sympy import *

def extract_coeff(array):
    coeff = []

    x=Symbol('x')
    count = 0
    for item in array:
        if item != 0:
            count = count + 1

    total = len(array)
    list = []

    numerator_list = []
    numerator = 1
    denom_list = []
    denom = 1

    for i in range(total):
        list.append(array[i])

    for item in list:
        denom_list.append((list[-1] - item))

    denom_list.pop()

    for item in denom_list:
        denom = denom * item

    # numerator
    for item in array:
        if item != 0:
            numerator = numerator * (x-item)

    numerator = expand(numerator)

    print(numerator)
    numerator = str(numerator)

    # store coefficient
    if numerator[0] == 'x':
        coeff.append(1)

    # trying to split (PLEASE HELP)
    numerator = numerator.replace('+ ', ', ')
    print(numerator.split(', '))

extract_coeff([30,20,10,0])

1 Ответ

0 голосов
/ 21 апреля 2020

Скажем, у вас есть уравнение

>>> from sympy.abc import x
>>> eq = (x**3 - 60*x**2 + 1100*x - 6000) / -6000

И вы хотите взглянуть на числитель. Если вы уверены, что нет составных дробей, тогда numer(eq) будет работать. Если может быть несколько терминов, как в x/3 + x, используйте as_numer_denom()

>>> n, d = eq.as_numer_denom()

. Теперь преобразуйте числитель n в Poly и запросите все коэффициенты:

>>> Poly(n).all_coeffs()
[-1, 60, -1100, 6000]

Поскольку знаменатель был отрицательным, этот отрицательный знак теперь находится в числителе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...