sin、cos の再帰的計算法

IIR フィルターを使って sin、cos を再帰的に求める / Python で再現する

参考記事: Interface(インターフェース) 2017年10月号, p.159 計算手順はわかるが理窟は全然わからない。 手順は下のとおりである。 a = 2 cos(Δθ)、c = -cos(Δθ)、s = sin(Δθ) の 3 つだけを組み込み函数か何かでちゃんと計算しておく。 u[n] = a * u[n-1] …

IIR フィルターを使って sin、cos を再帰的に求める / Excel で確かめる

参考: Interface(インターフェース) 2017年10月号, p.159 -cos(Δθ)、sin(Δθ)、2 cos(Δθ) の 3 つの値を最初に計算しておけば、あとは足し算、引き算、掛け算だけで再帰的に sin、cos が順次求まる。振幅も 1 のまま変化しない。理窟はまったくわからない。 .…

加法定理を使って sin、cos を再帰的に求める 7 of 7 / Wolfram の漸化式 RecurrenceTable[] で表現する

参考: Interface(インターフェース) 2017年10月号, pp.158-159 initRad=0.; deltaRad=Pi/8.; sinDeltaRad=Sin[deltaRad]; cosDeltaRad=Cos[deltaRad]; sol=RecurrenceTable[{rad[n]==rad[n-1]+deltaRad, sin[n]==sin[n-1]*cosDeltaRad+cos[n-1]*sinDeltaRad,…

加法定理を使って sin、cos を再帰的に求める 6 / TI-Nspire の漸化式 seqGen() で表現する

参考: Interface(インターフェース) 2017年10月号, pp.158-159 sincos(initθ,δθ,sinδθ,cosδθ,num):=seqGen({θ(n-1)+δθ,sin_(n-1)*cosδθ+cos_(n-1)*sinδθ,cos_(n-1)*cosδθ-sin_(n-1)*sinδθ},n,{θ,sin_,cos_},{1,num},[[0][sin(initθ)][cos(initθ)]])実行結果:…

加法定理を使って sin、cos を再帰的に求める 5 / Python で再現する

参考: Interface(インターフェース) 2017年10月号, pp.158-159 import matplotlib.pyplot as plt import numpy as np def SinCos(initθ, Δθ): # 最初の sin、cos と sinΔθ、cosΔθ だけは組み込み函数を使って普通に計算するが、 # それ以降は掛け算、足し算…

加法定理を使って sin、cos を再帰的に求める 4 / 振幅の誤差の補正を簡略化する

参考: Interface(インターフェース) 2017年10月号, pp.158-159 1/sqrt(x) という式での補正は平方根の計算が必要なためかなりのコストを伴う。しかし漸化式の振幅である x=sin^2 + cos^2 がすぐに 1 からずれることはない。 そこで、1/sqrt(x) を、x=1 を中…

加法定理を使って sin、cos を再帰的に求める 3 / 振幅の誤差を補正する

参考: Interface(インターフェース) 2017年10月号, pp.158-159 真値の振幅は常に 1 である。 漸化式の sin、cos を漸化式の振幅で割れば漸化式の振幅は常に 1 に保たれる。 Excel で確かめてみる。演算誤差が出やすいように極端な例として sin(Δθ)、cos(Δθ) …

加法定理を使って sin、cos を再帰的に求める 2 / Excel で確かめてみる

参考: Interface(インターフェース) 2017年10月号, pp.158-159 振幅の徐々にずれてゆくことがわかる (はっきり現れるよう sin(Δθ)、cos(Δθ) を小数点以下 3 桁に丸めた)。 .xlsx recurSinCos.xlsx - Google ドライブ

加法定理を使って sin、cos を再帰的に求める 1

参考: Interface(インターフェース) 2017年10月号, pp.158-159 sin(θ) を θ = 0 から Δθ 刻み (ここでは 0.1 とする) で sin(0), sin(0.1), sin(0.2), ...... のように順次計算することを考える。 同様に cos(θ) を θ = 0 から Δθ 刻み (ここでは 0.1 とする…