Получить определенные части симпи-раствора

У меня огромное символическое сочувствие на форме

expression = factor * (f1*a + f2*b + f3*c + f4*d + f5*e)

где все множители от a до e состоят из нескольких членов. То есть:

a = exp(2x) + exp(3x) + sin(Ix). 

Я хочу создать массив в форме

array = factor * [a,b,c,d,e] 

Но не вижу более точного способа сделать это. Я пытался использовать факторную функцию, но она дает мне только выражение в форме «выражения» выше.

До сих пор я использовал

print(expression)

а затем сделал грубую копирование и вставку факторов от a до e. Поскольку я собираюсь получить выражения с большим количеством терминов, чем в этом примере, я хочу сделать это без процедуры копирования и вставки. Любые идеи?


person Amund Jenssen    schedule 02.08.2016    source источник


Ответы (1)


Вот простой пример, который можно экстраполировать на большее количество терминов.

import sympy as sp

x = sp.var('x')
f1, f2 = sp.symbols('f1:3')
factor = sp.symbols('factor')

a = x**2 + sp.sin(x) + sp.exp(sp.I * x)
b = sp.log(x)/(x+1)**2

# example expression:
expression = (factor * (f1 * a + f2 * b)).expand()
print(expression)

# collect coefficients of f1 and f2
coeffs = sp.collect(expression.expand(),[f1,f2], evaluate=False)
print(coeffs)

# show the coefficients w/o the factor factor
[(coeffs[f]/factor).simplify() for f in (f1,f2)]
f1*factor*x**2 + f1*factor*exp(I*x) + f1*factor*sin(x) + f2*factor*log(x)/(x**2 + 2*x + 1)
{f2: factor*log(x)/(x**2 + 2*x + 1), f1: factor*x**2 + factor*exp(I*x) + factor*sin(x)}

[x**2 + exp(I*x) + sin(x), log(x)/(x**2 + 2*x + 1)]
person Stelios    schedule 02.08.2016
comment
Нет, я не знаю факторов a- ›e. Это просто символические результаты предыдущего расчета. f1- ›f5 определены как символы, хотя - person Amund Jenssen; 02.08.2016
comment
@AmundJenssen Было бы справедливо сказать, что у вас есть expression, которая является сложной функцией x, и вы хотите найти a,b,..,e такой, что expression = factor * (f1*a+...+f5*e)? - person Stelios; 02.08.2016
comment
Ну, отчасти да, отчасти нет. выражение является функцией от f1: 6, где факторы a- ›e являются функциями другой переменной (также известной как символ) - person Amund Jenssen; 02.08.2016