sin、cos の再帰的計算法
参考記事: Interface(インターフェース) 2017年10月号, p.159 計算手順はわかるが理窟は全然わからない。 手順は下のとおりである。 a = 2 cos(Δθ)、c = -cos(Δθ)、s = sin(Δθ) の 3 つだけを組み込み函数か何かでちゃんと計算しておく。 u[n] = a * u[n-1] …
参考: Interface(インターフェース) 2017年10月号, p.159 -cos(Δθ)、sin(Δθ)、2 cos(Δθ) の 3 つの値を最初に計算しておけば、あとは足し算、引き算、掛け算だけで再帰的に sin、cos が順次求まる。振幅も 1 のまま変化しない。理窟はまったくわからない。 .…
参考: 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,…
参考: 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θ)]])実行結果:…
参考: Interface(インターフェース) 2017年10月号, pp.158-159 import matplotlib.pyplot as plt import numpy as np def SinCos(initθ, Δθ): # 最初の sin、cos と sinΔθ、cosΔθ だけは組み込み函数を使って普通に計算するが、 # それ以降は掛け算、足し算…
参考: Interface(インターフェース) 2017年10月号, pp.158-159 1/sqrt(x) という式での補正は平方根の計算が必要なためかなりのコストを伴う。しかし漸化式の振幅である x=sin^2 + cos^2 がすぐに 1 からずれることはない。 そこで、1/sqrt(x) を、x=1 を中…
参考: Interface(インターフェース) 2017年10月号, pp.158-159 真値の振幅は常に 1 である。 漸化式の sin、cos を漸化式の振幅で割れば漸化式の振幅は常に 1 に保たれる。 Excel で確かめてみる。演算誤差が出やすいように極端な例として sin(Δθ)、cos(Δθ) …
参考: Interface(インターフェース) 2017年10月号, pp.158-159 振幅の徐々にずれてゆくことがわかる (はっきり現れるよう sin(Δθ)、cos(Δθ) を小数点以下 3 桁に丸めた)。 .xlsx recurSinCos.xlsx - Google ドライブ
参考: Interface(インターフェース) 2017年10月号, pp.158-159 sin(θ) を θ = 0 から Δθ 刻み (ここでは 0.1 とする) で sin(0), sin(0.1), sin(0.2), ...... のように順次計算することを考える。 同様に cos(θ) を θ = 0 から Δθ 刻み (ここでは 0.1 とする…