前に生成された要素が次の要素に含まれるようなシーケンスを生成したいのですが、これを行う方法がわかりません。
つまり、その項目が次のようになるようなリストを生成します。
ここで、x は単なる Sympy シンボルです
[x,(x)*(x+1),(x)*(x+1)*(x+2)]
それよりも[x,x+1,x+2]
みたいなことを考えている
k.append(k*(K+o))
しかし、型エラーが発生し続けます
どんな助けでも大歓迎です!
前に生成された要素が次の要素に含まれるようなシーケンスを生成したいのですが、これを行う方法がわかりません。
つまり、その項目が次のようになるようなリストを生成します。
ここで、x は単なる Sympy シンボルです
[x,(x)*(x+1),(x)*(x+1)*(x+2)]
それよりも[x,x+1,x+2]
みたいなことを考えている
k.append(k*(K+o))
しかし、型エラーが発生し続けます
どんな助けでも大歓迎です!
使用できますsympy.RaisingFactorial
:
import sympy.RaisingFactorial as RF
from sympy.abc import x
length=3
ans = [RF(x,i) for i in xrange(1,length+1)]
これにより、次のことが得られます。
[x, x*(x + 1), x*(x + 1)*(x + 2)]
たぶん、再帰lambda
関数とmap
?
>>> fact = lambda x: x == 0 and 1 or x * fact(x - 1)
>>> map(fact, range(4))
[1, 1, 2, 6]
他にも多くの方法があります。を返したい場合はstring
、再帰関数を定義してstring
;を返すようにします。
def fact(i):
if i == 0:
return 'x'
else:
return fact(i - 1) + '*(x+%d)' % i
その後
>>> map(fact, range(4))
['x', 'x*(x+1)', 'x*(x+1)*(x+2)', 'x*(x+1)*(x+2)*(x+3)']
sympy
文字列を使用していて、文字列の使用が「アンチパターン」であると思われる場合
import sympy
def fact(i):
if i == 0:
return sympy.Symbol('x')
else:
return sympy.Symbol('(x+%d)' % i) * fact(i - 1)
生産する
>>> map(fact, range(4))
[x, (x+1)*x, (x+1)*(x+2)*x, (x+1)*(x+2)*(x+3)*x]
Poly
既製の関数がないと仮定すると、根によって多項式 ( ではない) を簡単に定義できます...
def poly_by_roots(roots, sym):
return prod(map(lambda x: sym-x, roots))
次に、ルートのリストに適用します
polys = [poly_by_roots(range(a,1), x) for a in range(-5,1)]
これは最も効率的な方法ではありません。つまり、前の多項式が だけ異なるという事実を使用する方法(x+i)
です。たとえば、
def poch_list(x,n):
if n==0:
return [x]
else:
val = poch_list(x,n-1)
return val + [val[-1]*(x+n)]
これにより、記号的な長さが許可されますが、これは良いことである場合とそうでない場合があります。