前提・実現したいこと
Pythonを始めたばかりで、初歩的な質問かもしれません。
(x,a,b,c)を変数として3次方程式x^{3}-ax^{2}-bx-c=0をxについて解いたとき、虚数単位Iが含まれないか解βが1つ現れます。このβに対し、後で(a,b,c)に具体的な整数値を代入したとき、特定の(a,b,c)に対しては何故か虚数単位Iが出現します(例えば(a,b,c)=(4,-1-1)など)。
もしこの現象がsympyではしばしば起こってしまうものでしたら、あきらめようかと思いますが、そうでなければ、こうした現象が起こらないようにしたいです。ソースコードに問題があるのなら、ご指摘いただきたいと思います。
追記1:『生じないはずの現象』ですが、(a,b,c)=(4,-1,-1)のような実数解しか持たない場合でも常に虚数単位Iが出現します。この点についての質問でした。いくつか回答を頂きましたが、私の書き方が悪いために意図した内容とは違う回答でしたので、この場で謝罪いたします。申し訳ありません。
追記2:『生じないはずの現象』について追記です。実は(a,b,c)=(4,-1,-1)は1より大きい解と絶対値が1未満の解を2つもちます(Pisot数と呼ばれる代数的整数の性質です)。そこで(a,b,c)=(4,-1,-1)として
sympy.solve(sympy.Eq(f,0),x)
で解を出力すると、すべて虚数単位を有する解を出力します。
発生している問題・エラーメッセージ
エラーは発生していません。
該当のソースコード
import sympy import math import numpy print("3次の代数的整数βの最小多項式をx^3-ax^2-bx-cとする.") sympy.var("x,a,b,c") f=x**3-a*x**2-b*x-c sol=sympy.solve(sympy.Eq(f,0),x) print("このとき, x^3-ax^2-bx-c=0の解は") print("x1=",sympy.simplify(sol[0])) print("x2=",sol[1]) print("x3=",sol[2]) print("今, a,b,cを次のように定める.") a1=int(input("aを入力せよ.")) b1=int(input("bを入力せよ.")) c1=int(input("cを入力せよ.")) s0=sol[0].subs([(a,a1),(b,b1),(c,c1)]) s1=sol[1].subs([(a,a1),(b,b1),(c,c1)]) s2=sol[2].subs([(a,a1),(b,b1),(c,c1)]) beta=s0 print("このとき, β=",beta)
回答3件
あなたの回答
tips
プレビュー