トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Tips-sincos

  三角関数

sin/cos の近似値を求める

πについては tips-PI_FFT

三角関数系、基本12パターン(要「直角三角形」)

△ABC において

∠ACB が直角/ 
∠ABC をθ , ∠BCAをφ , ∠CABをτ
辺AB を r ( 斜辺 )(辺c)
辺BC を x ( 底辺 )(辺a)
辺CA を y ( 高さ )(辺b)

とした時

r = x / cosθ    :「r」を「x」と「θ」から求める
r = y / sinθ    :「r」を「y」と「θ」から求める
r = √(x2 + y2)   :「r」を「x」と「y」から求める
x = cosθ * r    :「x」を「θ」と「r」から求める 
x = y / tanθ    :「x」を「y」と「θ」から求める 
x = √(r2 - y2)   :「x」を「r」と「y」から求める
y = sinθ * r    :「y」を「θ」と「r」から求める
y = tanθ * x    :「y」を「θ」と「x」から求める
y = √(r2 - x2)   :「y」を「r」と「x」から求める
θ = asin(y / r) :「θ」を「y」と「r」から求める
θ = acos(x / r) :「θ」を「x」と「r」から求める
θ = atan(y / x) :「θ」を「y」と「x」から求める (tan^-1 とも書く)

正弦定理

(b/sinθ)=(c/sinφ)=(a/sinΤ)
角(∠)と向かい合う辺で。。(直角三角形だと分かりづらい)
def seigen(AA, aa):
   """ 
   正弦定理
   AA : degree
   sin(AA) / aa = 1/(2R)
   sin(A)/a = sin(B)/b = sin(C)/c = 1/(2R)
   つまり、 sin(A) = a/(2R)
   ��ABCにおいて、辺a, b, cはそれぞれ角A, B, Cの対辺
   BC=a, CA=b, AB=c 外接円の半径R
   """
   rad = sympy.rad(AA)
   ret = sympy.N ( sympy.sin(rad) / aa )
   return ret

余弦定理

a^2=b^2+c^2-2*b*c*cosΤ
2つの辺とそれに挟まれる角の大きさ(cos)で。。
def yogen2(a, b, c):
   """ 第二余弦定理 
   cos(C) = (a^2 + b^2 - c^2) / (2ab)
   """
   CC = (a**2 + b**2 - c**2) / (2 * a * b)
   return CC
 
def yogen2a(a, b, C):
   """ 第二余弦定理 
   c^2 = (a^2 + b^2 - (2a*b*cos(C))
   """
   CC = sympy.rad(C)
   ret2 = (a**2 + b**2 ) - (2 * a * b * sympy.cos(CC))
   ret = sympy.sqrt(ret2)
   return ret
def yogen1(b, c, B, C):
   """
   第一余弦定理
   ��ABC において
   a = BC, b = CA, c = AB
   ∠CBA = A, ∠ABC = B, ∠BCA = C
   a = b*cos(C) + c*cos(B)
   b = c*cos(A) + a*cos(C)
   c = a*cos(B) + b*cos(A)
   """
   ret = b*sympy.cos(C) + c*sympy.cos(B)
   return ret

加法定理

sin(θ+φ)=sinθ*cosφ+cosθ*cosφ
cos(θ+φ)=cosθ*cosφ-sinθ*sinφ
((θーφ)の場合は符号を反転する )

近似値 SIN ( マクローリン展開 ) Tips-maxima

SIN(X) = x -(x^3)/(3!)+(x^5)/(5!)-(x^7)/(7!)+(x^9)/(9!)
maxima
(%i9)  f(x):=sum(((-1)^k)*(x^(2*k+1))/(2*k+1)!,k,0,n),simpsum;
固定値
(%i10) f(x):=sum(((-1)^k)*(x^(2*k+1))/(2*k+1)!,k,0,10),simpsum;

近似値 COS Tips-maxima

COS(X) = 1 -(x^2)/2! +(x^4)/4! -(x^6)/6! +(x^8)/8!
maxima
(%i12) sum(((-1)^k)*(x^(2*k)/(2*k)!),k,0,n),simpsum;
固定値
(%i13) f(x) := sum(((-1)^k)*(x^(2*k)/(2*k)!),k,0,10),simpsum;
試してみる
(%i1) KPI:1019514486099146/324521540032945; ## 20桁
(%i1) KPI:103993/33102; ## 10桁
(%i1) dg:(30 * %pi / 180) ;
(%i2) f(x) := sum(((-1)^k)*(x^(2*k)/(2*k)!),k,0,10),simpsum;
(%i3) float(f(dg)-cos(dg)) ;
(%i4) dg:(60 * %pi / 180) ;
(%i5) float(f(dg)-cos(dg)) ;
(%o10)                       7.988719676478221E-17
(%i1) dg:(30 * KPI / 180) ;
(%i2) f(x) := sum(((-1)^k)*(x^(2*k)/(2*k)!),k,0,10),simpsum;
(%i3) float(f(dg)-cos(dg)) ;
(%i4) dg:(60 * KPI / 180) ;
(%i5) float(f(dg)-cos(dg)) ; 
( 17桁は多すぎる??)

https://nc-program.s-projects.net/math6.html