パイソニスタの方へ
2点教えて下さい。 1点教えて下さい。
(1) 本文「sympyで(T氏の数学日記 様の方法を参考に)」内の、掛け算を実行しない。
(2023/08/29済) 私は、expand()の使い方を間違っていました。()の追加です。ページ中盤。
(2) 本文「sympyで(T氏の数学日記 様の方法を参考に)」内の、
表現「0<2α<π/4」の表現方法について。
参考
>不等式をやめて、以下の処理で区間に変換しています
オリジナル
上と同じです。大学入試数学問題集成 様>【3】テキスト
xxxx ChatGPTで(できませんでした。) xxx
2通りでやってみました。
正の数α,β,a,bが2*α+β=pi/4,tan(α)=1/a,tan(β)=1/bを満たすとき,aを用いてbを表しなさい.
????>これで、aを用いてbを表す式が得られました。
Solve[{α>0,β>0,a>0,b>0,2*α+β=pi/4, tan(α)=1/a,tan(β)=1/b}, {α,β,b}]
>You can solve this system of equations using Mathematica or a similar computational software. Here's how you can do it in Mathematica:.......
>(DepL翻訳)この連立方程式は,Mathematica または同様の計算ソフトを使って解くことができます.Mathematica での解き方は次のとおりです.
ChatGPT先生の言われるとおりでした。
xxxx WolframAlphaで(できませんでした。) xxx
Solve[{α>0,β>0,a>0,b>0,2*α+β==pi/4, tan(α)==1/a,tan(β)==1/b}, {α,β,b}]
結果
(整数解はありません)
xxx sympyで(T氏の数学日記 様の方法を参考に) xxx できませんでした。
>αの範囲からaの範囲を厳密に調べ,最後の結論で分母が0にならないことを確かめる...
sympy.simplify.fu.TR12(rv, first=True)
Separate sums in tan.
https://docs.sympy.org/latest/modules/simplify/fu.html#sympy.simplify.fu.TR12
(2023/08/29済) 私は、expand()の使い方を間違っていました。
eqA.lhsmy1.expand()→(eqA.lhsmy1).expand()
掛け算にカッコが必要でした。eqB=を直しました。
from sympy import *
from sympy.simplify.fu import TR12
var('α,β,a,b',real=True,nonnegative=True)
eq1=Eq(2*α+β ,pi/4) ;print("#eq1",eq1)
eq2=Eq(tan(α), 1/a) ;print("#eq2",eq2)
eq3=Eq(tan(β), 1/b) ;print("#eq3",eq3)
mySubs={eq2.lhs:eq2.rhs,eq3.lhs:eq3.rhs}
#
eq4=Eq( tan(eq1.lhs) ,tan(eq1.rhs) ) ;print("#eq4",eq4)
eq5=Eq( TR12(eq4.lhs) ,eq4.rhs ) ;print("#eq5",eq5)
eq6=Eq(numer(eq5.lhs) ,eq5.rhs*denom(eq5.lhs) ) ;print("#eq6",eq6)
eq7=Eq(eq6.lhs.expand(trig=True).simplify(),eq6.rhs.expand(trig=True).simplify() ) ;print("#eq7",eq7)
eq8=Eq(eq7.lhs*denom(eq7.lhs) ,eq7.rhs*denom(eq7.lhs) ) ;print("#eq8",eq8)
eq9=Eq(eq8.lhs.subs(mySubs) ,eq8.rhs.subs(mySubs) ) ;print("#eq9",eq9)
eqA=Eq(eq9.lhs.expand() ,eq9.rhs.expand() ) ;print("#eqA",eqA)
my1=a**2*b
eqB =Eq((eqA.lhs*my1).expand() ,(eqA.rhs*my1).expand() ) ;print("#eqA",eqA)
eqC =Eq( eqB.lhs*(-1) , eqB.rhs*(-1) ) ;print("#eqC",eqC)
ans =solve(eqC,b)[0]
eqD =Eq( numer(ans) ,denom(ans)*b ) ;print("#eqD",eqD)
# 2023/08/28
# この間は、勉強中です。Interval(0,2*α) and Interval(2*α,pi/4)
# ここで、~
# したがって、...
eqE =Eq( b ,solve(eqD,b)[0] ) ;print("#eqE",eqE)
eqF =Eq( b ,-numer(eqE.rhs)/-denom(eqE.rhs) ) ;print("#eqF",eqF)
#eq1 Eq(2*α + β, pi/4)
#eq2 Eq(tan(α), 1/a)
#eq3 Eq(tan(β), 1/b)
#eq4 Eq(tan(2*α + β), 1)
#eq5 Eq((tan(2*α) + tan(β))/(-tan(2*α)*tan(β) + 1), 1)
#eq6 Eq(tan(2*α) + tan(β), -tan(2*α)*tan(β) + 1)
#eq7 Eq(((tan(α)**2 - 1)*tan(β) - 2*tan(α))/(tan(α)**2 - 1), (tan(α)**2 + 2*tan(α)*tan(β) - 1)/(tan(α)**2 - 1))
#eq8 Eq((tan(α)**2 - 1)*tan(β) - 2*tan(α), tan(α)**2 + 2*tan(α)*tan(β) - 1)
#eq9 Eq((-1 + a**(-2))/b - 2/a, -1 + 2/(a*b) + a**(-2))
#eqA Eq(-1/b - 2/a + 1/(a**2*b), -1 + 2/(a*b) + a**(-2))
#eqB Eq(-a**2 - 2*a*b + 1, -a**2*b + 2*a + b)
#eqC Eq(a**2 + 2*a*b - 1, a**2*b - 2*a - b)
#eqD Eq(-a**2 - 2*a + 1, b*(-a**2 + 2*a + 1))
#eqE Eq(b, (-a**2 - 2*a + 1)/(-a**2 + 2*a + 1))
#eqF Eq(b, (a**2 + 2*a - 1)/(a**2 - 2*a - 1))
sympyで(α,β,bの3元連立方程式で)
・がんばれば、3行で?できました。
・π/8を使っていません。おかしいですね。
from sympy import *
var('α,β,a,b',real=True,nonnegative=True)
print("#",solve([Eq(2*α+β ,pi/4),
Eq(tan(α), 1/a),
Eq(tan(β), 1/b)],[α,β,b])[0][2].expand(trig=True).simplify())
# (a**2 + 2*a - 1)/(a**2 - 2*a - 1)
上と同じです。
from sympy import *
var('α,β,a,b',real=True,nonnegative=True)
eq1=Eq(2*α+β ,pi/4)
eq2=Eq(tan(α), 1/a)
eq3=Eq(tan(β), 1/b)
ans=solve([eq1,eq2,eq3],[α,β,b])
print("# α=",ans[0][0])
print("# β=",ans[0][1])
print("# b=",ans[0][2])
print()
print("#",ans[0][2])
print("#",ans[0][2].simplify())
print("#",ans[0][2].expand(trig=True))
print("#",ans[0][2].expand(trig=True).simplify())
# α= atan(1/a)
# β= -2*atan(1/a) + pi/4
# b= tan(2*atan(1/a) + pi/4)
# tan(2*atan(1/a) + pi/4)
# tan(2*atan(1/a) + pi/4)
# 2/(a - 2*a/(a - 1/a) + 2/(a**2 - 1) - 1/a) + 1/(1 - 2/(a - 1/a))
# (a**2 + 2*a - 1)/(a**2 - 2*a - 1)
sympyの実行環境
①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。
??? タブレット環境で、コピー貼り付けが実行できませんでした。???
参考
>expandは式の展開をしますが、そのときtrig=Trueと指定することにより、加算公式の計算をすることができます。
以下、いつもの?おすすめです。