2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】sympyのcoeffは式を展開(expand)してから利用する【sympy】

Posted at

前書き

繰り返し計算練習ができるサイトを作っているのですが、ある関数の動作で少し詰まったので備忘録代わりに書いておきます。

coeff

coeffはsympyに備え付けられた関数です。
(Polynomials Manipulation Module Reference)

かなり広い使い方ができるようですが、自分はもっぱら多項式を用意して、指定した次数の係数を返してもらうのに使っています。

coeff_sample1.py
import sympy as sy


x = sy.Symbol("x", real=True)
expr = x ** 2 - 5 * x + 6
print(expr.coeff(x, 2))
print(expr.coeff(x, 1))
print(expr.coeff(x, 0))
出力
1
-5
6

何かと便利なのでよくお世話になるのですが、実はこのcoeffメソッド、式の与え方によって挙動が変わることがあります。私が引っ掛かったのはここですね。具体的には因数分解された形で計算すると、ごろっと挙動が変わります。

coeff_sapmle2.py
import sympy as sy


x = sy.Symbol("x", real=True)
# expr = x ** 2 - 5 * x + 6
expr = (x - 2) * (x - 3)
print(expr.coeff(x, 2))
print(expr.coeff(x, 1))
print(expr.coeff(x, 0))
出力
0
0
0

これを防ぐためには、expandをかませればokです。

coeff_sample3.py
import sympy as sy


x = sy.Symbol("x", real=True)
# expr = x ** 2 - 5 * x + 6
# expr = (x - 2) * (x - 3)
expr = sy.expand((x - 2) * (x - 3))
print(expr.coeff(x, 2))
print(expr.coeff(x, 1))
print(expr.coeff(x, 0))
出力
1
-5
6

これに気付かず半日くらい苦労しました。

後書き

ネット上であまり情報が見つからなかったので、結構苦労しました。思うに、もっともっと高度で複雑な計算のために利用している人が大半で、私のようにあらゆる数や式をLaTeX形式で出力してくれることの恩恵を一番重視しているユーザーがそこまで居ないのではないでしょうか。高校数学まででやるような初歩的な計算はあまり資料がないことも少なくありませんからね。

以上、短い上にニッチですが、どなたかの助けになれれば幸いです。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?