Sympy Python вставляет один многочлен в другой, более крупный, получает окончательный многочлен

У меня есть функция для возврата значения a на основе PolyFit, в зависимости от значений a0, c, c0:

import sympy

a = Symbol("a")
a0 = Symbol("a0")
c = Symbol("c")
c0 = Symbol("c0")
t = Symbol("t")

a_func = Poly(0, a0, c, c0) 
coeff = np.array([-0.71424954,  1.7335939 , -1.76528173,  1.2361201 ,  0.00255529])  
num_a_coeff = len(coeff)
for ii in xrange(num_a_coeff):

    a_func += coeff[ii] * ((c-c0)/a0)**(num_a_coeff-1-ii)

a_func = a0 + (a_func * c)

он еще плохо отформатирован, как типичное полиномиальное выражение, num_a_coeff в моем случае 5. Я хочу реализовать эту a_func в другом выражении:

multiFit_coeff = np.array([944210317e-03,-280710762e-03,378400594e-04])
# gives power of 1, a, c, t
multiFit_power = np.array([[5,0,0,0],[4,3,2,0],[,4,1,0]])
main_func = []
num_coeff = len(multiFit_coeff)
for i in xrange(num_coeff):

    temp = multiFit_coeff[i] * 
        (1**multiFit_power_less[i][0] * 
        a_func**inc.multiFit_power[i][1] * 
        c**multiFit_power[i][2] *
        t**multiFit_power[i][3])

    main_func.append(temp)

Итак, у меня есть выражение, которое зависит от a0, c0, c и t. Максимальная мощность каждой переменной (a_func, c и t) в последнем выражении равна 5. Итак, у меня есть, например, такое выражение:

a_func**4 * c

Поскольку в конце я хотел бы иметь полином от c (a0, c0, t - константы), я попытался использовать

main_func.append(sympy.polys.poly_from_expr(temp, c))

в последнем цикле for, чтобы сохранить красиво оформленный многочлен в список. Но расчет не заканчивается, когда я сталкиваюсь с тем, что a_func работает от 3 или более значений ... Есть идеи, как решить эту проблему? Я думал, что этот расчет не должен быть таким уж трудным для сочувствия. Большое спасибо за любые предложения. Кстати, это мой первый вопрос :-)


person user2489877    schedule 16.06.2013    source источник
comment
У вас есть опечатка в строке, где вы присваиваете multiFit_power.   -  person asmeurer    schedule 16.06.2013


Ответы (1)


Мне трудно понять, что происходит в вашем дампе кода, но если я правильно понимаю, что вы хотите, я думаю, вам просто нужен collect(a_func, c), который вытащит все коэффициенты a_func по отношению к c.

person asmeurer    schedule 16.06.2013
comment
Спасибо за ответ, но в моем случае эта функция ничего не делает, она просто возвращает то же выражение. poly_from_expr работает, но это занимает слишком много времени для очень больших уравнений - person user2489877; 17.06.2013
comment
Если это не то, что вы хотите, я предлагаю вам попытаться прояснить свой вопрос. Поместите образец выражения, которое у вас есть, и того, что вы хотите получить (вместо того, чтобы ожидать, что люди попытаются выяснить, что происходит из вашего кода). - person asmeurer; 17.06.2013