LoginSignup
0
0

(tan50°tan70°)/(tan60°tan80°)「2024年 防衛医科大 tanの計算」をChatGPTとWolframAlphaとsympyでやってみたい。

Last updated at Posted at 2023-11-15

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)

>裏技を使うパターン(6:25〜10:34)

④⑤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割】様

0
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
0
0