wikipediaをサラサラと見るだけでもオススメします。
・wikipedia>Identities_without_variables(特定の角度に関する式)
tan50°+tan60°+tan70°=tan50°・tan 60°・tan70°=tan 80°
以下、長文です。
・私は今回、余接cot(cotangent,コタンジェント) のありがたみを感じました。
・「三角関数表(正弦tan) 0°〜180°」をsympyで計算しました。
・tan 定義域(google検索結果)
・解答のポイント
①基本角度(基準角度)?10°づつだよね。今回有名角じゃないdeg=10°。t=tan10°と置く。
②有名じゃないtanだけ集めて、tに紐付けて積を計算、有名角tanにならないかな。
③有名角のtanをtに紐付ける。
・オリジナル youtube 3つです。
・sympyについて、私は、理解できない箇所について、不十分です。申し訳ありません。
➀sympyで(floatだけで)
後半で。
②③PASSLABO 様 (youtube 0:00〜10:34)
>加法定理を使う時は、どっちかが有名角 (02:34)
>偶数と奇数のバトル (03:20)
>有名角に一番近いもの (04:46)
>チャートとかFocusGoldに載っていない (07:50)
④⑤KATSUYA【東大数学9割】様 (youtu 0:00〜15:35)
>2013千葉大で、でている。 (01:05)
>過去問。良問ばかりならんでいる訳ではない。 (14:23)
>捨てるべき問題を見極める。 (15:08)
⑥⑦合格舎 様 (youtube 0:00〜10:31)
>ひとつずれた... (02:55)
>基準を揃えて... (05:00)
>有名角に直すには... (06:30)
ChatGPT-3.5先生へ(???わかりませんでした。???)
以下の計算をお願いします。
(tan(50°)*tan(70°))/(tan(60°)*tan(80°))
... の値は約 0.334 です。
無理数で
???申し訳ありませんが、...計算結果は少数として近似される必要があります。 ???少数???
sympyで教えて下さい
ChatGPT-3.5先生の出力(省略)
on line sympy で
...print(result.evalf()) # 結果を評価して表示
...0.333333333333333
WolframAlphaで(できました。)
結果 1/3
➀sympyで(floatだけで)
・50°,70°,80° で 「1/ひとなみにおごれや」でした。
・cot(60°)=1/tan(60°)で「1/ひとなみにおごれや」でした。
from sympy import *
f=(tan(50*pi/180)*tan(70*pi/180 ))/(tan(60*pi/180)*tan(80*pi/180 ))
print("#",f)
print("#",1/float(f),float(f))
# sqrt(3)*tan(5*pi/18)*tan(7*pi/18)/(3*tan(4*pi/9))
# 3.0 0.3333333333333333
print()
g=f*tan(60*pi/180)
print("#",g)
print("#",g.expand(trig=true))
print("#",g.rewrite(tan).expand(trig=true))
print("#",1/float(g),float(g))
# tan(5*pi/18)*tan(7*pi/18)/tan(4*pi/9)
# tan(5*pi/18)*tan(7*pi/18)/tan(4*pi/9)
# tan(5*pi/18)*tan(7*pi/18)/tan(4*pi/9)
# 1.7320508075688774 0.5773502691896257
できませんでした。5,6,7,8倍角は、無理ですか?
・(私の三角関数表より) tan(10°) → tan(pi/18)
コメントで、教えてもらいました。ありがとうございました。
apart() performs a partial fraction decomposition on a rational function.
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html#apart
from sympy import *
var('θ',real=True)
f=(tan(5*θ)*tan(7*θ))/(tan(6*θ)*tan(8*θ))
g=f.expand(trig=True).simplify()
print("#",f)
print("#",g)
print("#",g.subs({θ:10*pi/180}).simplify())
# (結果省略)
②sympyで(PASSLABO 様を参考に)置き換えを使うパターン
from sympy import *
var('a',real=True)
A=(tan( 5 *pi/18)*tan( 7 *pi/18))/ (tan(6*pi/18)*tan(8*pi/18) ) #;print("#A=",A)
A= tan( 5 *pi/18)*tan( 7 *pi/18) * tan(6*pi/18)*tan(1*pi/18) #;print("#A=",A)
A= tan((6-1)*pi/18)*tan((6+1)*pi/18) * tan(6*pi/18)*tan(1*pi/18) ;print("#A=",A)
#
Aoiro= (tan(6*pi/18)-tan(1*pi/18))/(1+tan(6*pi/18)*tan(1*pi/18)) \
*(tan(6*pi/18)+tan(1*pi/18))/(1-tan(6*pi/18)*tan(1*pi/18)) \
* tan(1*pi/18) # ;print("#Aoiro=",Aoiro)
Aoiro=(sqrt(3)-a)/(1+sqrt(3)*a) * (sqrt(3)+a)/(1-sqrt(3)*a)*a # ;print("#Aoiro=",Aoiro)
Aoiro=Aoiro.simplify() ;print("#Aoiro=",Aoiro)
#
Sanbai= tan( 3 *pi/18) # ;print("#Sanbai=",Sanbai)
Sanbai= tan((2+1)*pi/18) # ;print("#Sanbai=",Sanbai)
Sanbai=(tan( 2 *pi/18)+tan(1*pi/18))/(1-tan(2*pi/18)*tan(1*pi/18)) # ;print("#Sanbai=",Sanbai)
Sanbai=((2*a)/(1-a**2)+a)/(1-2*a/(1-a**2)*a) # ;print("#Sanbai=",Sanbai)
Sanbai=Sanbai.simplify() ;print("#Sanbai=",Sanbai)
#
print("#Aoiro-Sanbai=",(Aoiro-Sanbai).simplify())
#
print("#Aoiro/tan(60°)=",tan(3*pi/18)*1/tan(6*pi/18))
#A= sqrt(3)*tan(pi/18)*tan(5*pi/18)*tan(7*pi/18)
#Aoiro= a*(a**2 - 3)/(3*a**2 - 1)
#Sanbai= a*(3 - a**2)/(1 - 3*a**2)
#Aoiro-Sanbai= 0
#Aoiro/tan(60°)= 1/3
③sympyで(PASSLABO 様を参考に)裏技を使うパターン
・両辺にsin20°を掛けます。(07:14)
・和積の公式、積和の公式
<Julia(SymPy)で三角関数の加法定理、倍角の公式、和積の公式、合成を求める方法
from sympy import *
from sympy.simplify.fu import TR8
var('A,B,C' ,real=True)
var('θ' ,real=True)
var('θ2,θ4,θ6,θ8,θ10',real=True)
def myGousei(sinMcos):
return (sinMcos.rewrite(sin)).simplify()
eqA=Eq(A , 1/sqrt(3)*(cos(2*θ) *cos(2*θ2)*cos(2*θ4) ) \
/(sin(2*θ)* sin(2*θ2) *sin(2*θ4))) ;print("#eqA=",eqA)
print()
eqB=Eq(B , cos(2*θ) *cos(2*θ2)*cos(2*θ4) ) ;print("#eqB=",eqB)
eqB=Eq(sin(2*θ)*eqB.lhs ,myGousei(sin(2*θ)*cos(2*θ ))*cos(2*θ2 )*cos(2*θ4) ) # ;print("#eqB=",eqB)
eqB=Eq( eqB.lhs , myGousei(sin(2*θ2) *cos(2*θ2))*cos(2*θ4) /2 ) # ;print("#eqB=",eqB)
eqB=Eq(eqB.lhs.subs({θ:pi/18}), myGousei(sin(2*θ4) *cos(2*θ4))/4 ) # ;print("#eqB=",eqB)
eqB=Eq(eqB.lhs , sin(16*pi/18)/8) # ;print("#eqB=",eqB)
eqB=Eq(eqB.lhs/sin(pi/9) ,eqB.rhs/sin(pi/9) ) ;print("#eqB=",eqB)
print()
eqC=Eq(C,(sin(2*θ)* sin(4*θ) *sin(8*θ))) ;print("#eqC=",eqC)
eqC=Eq(C,TR8(sin(2*θ)* sin(4*θ))*sin(8*θ)) #;print("#eqC=",eqC)
rep={cos(2*θ):cos(θ2),cos(6*θ):cos(θ6),sin(8*θ):sin(θ8)}
eqC=Eq(C,eqC.rhs.subs(rep).expand()) #;print("#eqC=",eqC)
rep={θ6:6*pi/18}
eqC=Eq(C,eqC.rhs.subs(rep).expand()) #;print("#eqC=",eqC)
eqC=Eq(C,((sin(θ2 )+sin(θ8))/2).rewrite(sin).expand(trig=true)) #;print("#eqC=",eqC)
eqC=Eq(C,((sin(θ10)+sin(θ6))/4)-sin(θ8)/4) #;print("#eqC=",eqC)
eqC=Eq(C,((sin(θ8 )+sin(θ6))/4)-sin(θ8)/4) #;print("#eqC=",eqC)
eqC=Eq(C,eqC.rhs).subs(rep) ;print("#eqC=",eqC)
print()
BwC=eqB.rhs/eqC.rhs
print("#B/C= 1/",(denom(BwC)/numer(BwC)))
#eqA= Eq(A, sqrt(3)*cos(2*θ)*cos(2*θ2)*cos(2*θ4)/(3*sin(2*θ)*sin(2*θ2)*sin(2*θ4)))
#eqB= Eq(B, cos(2*θ)*cos(2*θ2)*cos(2*θ4))
#eqB= Eq(B, 1/8)
#eqC= Eq(C, sin(2*θ)*sin(4*θ)*sin(8*θ))
#eqC= Eq(C, sqrt(3)/8)
#B/C= 1/ sqrt(3)
④sympyで(KATSUYA【東大数学9割】様を参考に) 2013 千葉大を参考にするパターン
「tan10°=tan20°tan30°tan40° を示せ.」より
・print文の表示です。
from sympy import *
f = ( tan(5*pi/18) *tan(7*pi/18))/(tan(6*pi/18)*tan(8*pi/18)) # ;print("#",f)
eq1=Eq( tan(1*pi/18), tan(2*pi/18) *tan(3*pi/18)*tan(4*pi/18) ) # ;print("#",eq1)
eq2=Eq(1/tan(8*pi/18),1/(tan(7*pi/18) *tan(6*pi/18)*tan(5*pi/18))) # ;print("#",eq2)
f =f.subs({eq2.lhs:eq2.rhs}) ;print("#",f)
# 1/3
⑤sympyで(KATSUYA【東大数学9割】様を参考に)置き換えを使うパターン
# ver0.1
from sympy import *
var('α,β,θ,t',real=True)
eqTanαβ=Eq(tan(α+β),tan(α+β).expand(trig=True).factor()) #;print("#",eqTanαβ)
eqTan3θ=Eq(tan(3*θ),tan(3*θ).expand(trig=True).factor()) #;print("#",eqTan3θ)
t80=1/tan(pi/18)
t50=eqTanαβ.rhs.subs({α:6*pi/18,β:-pi/18})
t70=eqTanαβ.rhs.subs({α:6*pi/18,β: pi/18})
t30=( eqTan3θ.rhs).subs({tan(θ):t})
f578=((t50*t70)/(t80)).simplify().subs({tan(pi/18):t})
print("#", t30)
print("#",f578)
print("#",f578-t30)
t30=1/sqrt(3)
t60= sqrt(3)
print("#",t30/t60)
# t*(t**2 - 3)/(3*t**2 - 1)
# t*(t**2 - 3)/(3*t**2 - 1)
# 0
# 1/3
⑥sympyで(合格舎 様を参考に)
・次の⑦の一部を関数にしました。
・置き換えのパターンです。
# ver0.2
from sympy import *
var('θ,α,β',real=True)
var('x,y' ,real=True)
def myEqRep(inEq,inRep):
return Eq(inEq.lhs.subs(inRep),inEq.rhs.subs(inRep))
def myEqDic(inEq):
return {inEq.lhs:inEq.rhs}
def myTan_50_70_80():
eqTanαβ=Eq(tan(α+β),tan(α+β).expand(trig=True).factor()) ; print("#",eqTanαβ)
eqtan50=Eq(tan(5*pi/18),eqTanαβ.rhs.subs({tan(α):tan(6*pi/18),tan(β):-tan(1*pi/18)}).factor()) ; print("#",eqtan50)
eqtan70=Eq(tan(7*pi/18),eqTanαβ.rhs.subs({tan(α):tan(6*pi/18),tan(β): tan(1*pi/18)}).factor()) ; print("#",eqtan70)
eqtan80=Eq(tan(8*pi/18),1/tan(1*pi/18)) ; print("#",eqtan80);print()
return myEqDic(eqtan50) | myEqDic(eqtan70) | myEqDic(eqtan80)
def myTan_30():
eqTan3θ=Eq(tan(3*θ),tan(3*θ).expand(trig=True).factor()) ; print("#",eqTan3θ)
eqtan30=myEqRep(eqTan3θ,({θ:1*pi/18}))
eqtan30=Eq(eqtan30.rhs,eqtan30.lhs) ; print("#",eqtan30);print()
return myEqDic(eqtan30)
rep =myTan_50_70_80()
rep30=myTan_30()
rep60={tan(6*pi/18):sqrt(3)}
#
t5="tan(5*pi/18)"
t7="tan(7*pi/18)"
t6="tan(6*pi/18)"
t8="tan(8*pi/18)"
print("#",t5,"*",t7,"/",t6,"",t8)
print("#", ((((sympify(t5)* sympify(t7)).subs(rep).simplify())*tan(pi/18)).subs(rep30)/tan(pi/18)) / \
(sympify(t6)*(sympify(t8)).subs(rep)) )
#
# Eq(tan(α + β), -(tan(α) + tan(β))/(tan(α)*tan(β) - 1))
# Eq(tan(5*pi/18), (-tan(pi/18) + sqrt(3))/(sqrt(3)*tan(pi/18) + 1))
# Eq(tan(7*pi/18), -(tan(pi/18) + sqrt(3))/(-1 + sqrt(3)*tan(pi/18)))
# Eq(tan(4*pi/9), 1/tan(pi/18))
# Eq(tan(3*θ), (tan(θ)**2 - 3)*tan(θ)/(3*tan(θ)**2 - 1))
# Eq((-3 + tan(pi/18)**2)*tan(pi/18)/(-1 + 3*tan(pi/18)**2), sqrt(3)/3)
# tan(5*pi/18) * tan(7*pi/18) / tan(6*pi/18) tan(8*pi/18)
# 1/3
⑦sympyで(合格舎 様を参考に)
・最初に作成です。
# ver0.1
from sympy import *
var('α,β,a,θ' ,real=True)
var('Tn3,Tn5,Tn6,Tn7,Tn8',real=True)
p1=1*pi/18
p5=5*pi/18
p6=6*pi/18
p7=7*pi/18
p8=8*pi/18
rep={tan(pi/18):a}
eqTanαβ=Eq(tan(α+β),tan(α+β).expand(trig=True).factor()) #;print("#",eqTanαβ)
eqTn5 =Eq(Tn5,eqTanαβ.rhs.subs({α:p6,β:-p1}).subs(rep).simplify()) #;print("#",eqTn5)
eqTn7 =Eq(Tn7,eqTanαβ.rhs.subs({α:p6,β: p1}).subs(rep).simplify()) #;print("#",eqTn7)
eqTn6 =Eq(Tn6,tan(p6)) #;print("#",eqTn6)
eqTn8 =Eq(Tn8,(1/tan(p1)).subs(rep)) #;print("#",eqTn8)
f=((eqTn5.rhs*eqTn7.rhs)/(eqTn6.rhs*eqTn8.rhs)).simplify() ;print("#",f)
#
eqTan3θ=Eq(tan(3*θ),tan(3*θ).expand(trig=True).factor()) #;print("#",eqTan3θ)
eqTn3 =Eq(eqTan3θ.lhs.subs({θ:p1}) ,
eqTan3θ.rhs.subs({θ:p1}).subs(rep).simplify()) ;print("#"," "*7,numer(eqTn3.rhs),"/ (",denom(eqTn3.rhs),")")
print()
g="(tan(5*pi/18) * tan(7*pi/18) ) / (tan(6*pi/18)*tan(8*pi/18))" ;print("#",g)
f=(f*3).subs({eqTn3.rhs:eqTn3.lhs})/3 ;print("#",f)
# sqrt(3)*a*(a**2 - 3)/(3*(3*a**2 - 1))
# a*(a**2 - 3) / ( 3*a**2 - 1 )
# (tan(5*pi/18) * tan(7*pi/18) ) / (tan(6*pi/18)*tan(8*pi/18))
# 1/3
⑧だめでした。TR13 sympyで
・できると思ったんですけど。
Change products of tan or cot.
https://docs.sympy.org/latest/modules/simplify/fu.html#sympy.simplify.fu.TR13
# だめでした。TR13
# ver0.1
from sympy import *
from sympy.simplify.fu import TR13
t5="tan(5*pi/18)"
t7="tan(7*pi/18)"
t6="tan(6*pi/18)"
t8="tan(8*pi/18)"
f ="("+t5+"*"+t7+")/("+t6+"*"+t8+")"
print("#",f,float(1/sympify(f)))
print("#", (sympify(t5)*sympify(t7))/(sympify(t6)*sympify(t8)))
print("#",TR13(sympify(t5)*sympify(t7)))
print("#",TR13(sympify(t6)*sympify(t8)))
g=TR13( sympify(t5)*sympify(t7) )/TR13( sympify(t6)*sympify(t8) ).simplify()
print("#",g,1/float(g))
# sqrt(3)*(sqrt(3)*tan(5*pi/18)/3 + 1 + sqrt(3)*tan(7*pi/18)/3)/(3*tan(4*pi/9)) 3.0
いつもと違うおすすめです。
・過去問勉強中
2013千葉大を含む。
いつもの? sympyの実行環境と 参考のおすすめです。
(テンプレート)
未整理
>前期理科【6】<KATSUYA【東大数学9割】様