Soru Tüm katsayıları semiyole nasıl ekleriz


Coeff () kullanarak belirli bir terimin katsayısını alabilirsiniz;

x, a = symbols("x, a")
expr = 3 + x + x**2 + a*x*2
expr.coeff(x)
# 2*a + 1

Burada x, x ** 2 (ve benzeri) gibi tüm katsayıları çıkarmak istiyorum;

# for example
expr.coefficients(x)
# want {1: 3, x: (2*a + 1), x**2: 1}

As_coefficients_dict () bir yöntem var, ama bu benim istediğim şekilde çalışmıyor gibi görünüyor;

expr.as_coefficients_dict()
# {1: 3, x: 1, x**2: 1, a*x: 2}
expr.collect(x).as_coefficients_dict()
# {1: 3, x**2: 1, x*(2*a + 1): 1}

25
2018-04-09 07:39


Menşei


İfadenizde limit var mı exprYani, her zaman bir polinom mu? Derecesi sınırlıdır? - Carsten
@Carsten Eğer "sınırsız" bir yol varsa harika olurdu ve aslında özellikle (çünkü) muhtemelen () muhtemelen sınırsız olduğunu, ancak en azından bir polinom üzerinde çalışan bir yönteme ihtiyaç olduğunu düşünüyorum. - akai


Cevaplar:


En kolay yol kullanmaktır Poly

>>> a = Poly(expr, x)
>>> a.coeffs()
[1, 2*a + 1, 3]

20
2018-04-10 23:24





all_coeffs() kullanmaktan daha iyi olabilir coeffs() bir için Poly. Fark, bunların ikisinde de var. coeffs() bir değere sahip olan tüm katsayıları içeren bir listeyi döndürür ve katsayıları olanları yok sayar. 0 buna karşılık all_coeffs() Katsayısı sıfır olanları da içeren tüm katsayıları döndürür.

>>> a = Poly(x**3 + a*x**2 - b, x)
>>> a.coeffs()
[1, a, -b]

>>> a.all_coeffs()
[1, a, 0, -b]

30
2018-06-09 19:16



Teşekkürler. Pantolonumla yakalandım coeffs() sıfırlanmış katsayıları göz ardı etme. Ayrıca buna değer numpy kullanırken ters sıralamayı kullanır numpy polinom yapıyor a.reverse() - Alexander McFarlane


Yapabileceğiniz bir şey, aşağıdaki gibi bir sözlük anlamayı kullanmaktır:

dict = {x**p: expr.collect(x).coeff(x**p) for p in range(1,n)}

n en yüksek güç + 1'dir. Bu durumda n = 3. Yani listeye sahip olursun [1,2]

Bu verirdi

dict = {x: (2*a+1), x**2: 1}

Sonra tek bir terimle

dict[1] = 3

Yani

 dict = {1:3,x:(2*a+1),x**2:1}

Ayrıca deneyebilirsiniz:

a = list(reversed(expr.collect(x).as_ordered_terms()))
dict = {x**p: a[p],coeff(x**p) for p in range(1,n)}
dict[1] = a[0] # Would only apply if there is single term such as the 3 in the example

n en yüksek güç + 1'dir.


2
2018-04-09 09:35