MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第46回]
●チェビシェフの近似式
またまた間が空いてしまいました。
よくわかっていないことを書こうとしますと、余程慎重に構えて間違えたことを書かないように注意しなければなりません。
本当はMYCPU80用のCP/M互換DOSをはやく完成させなければならないのですが、このところ近似式がどうにも気になって、なかなか互換DOSに気が回りません。
困ったものです。
ここ数日コロナ社「数値計算」と格闘して、わからん、わからん、を連発しておりました。
昔の人は良いことを言いました。
読書百遍、意おのずから通ず。
百遍はとても読めませんが、わからぬところをネットであちこち探りながらまた「数値計算」に戻って読み直し…
を繰り返しておりましたら、突然に霧が晴れたような気がいたします。
疑問が氷解した、といいますか、わかったぞぉ、という気分になりました。
本当にわかったかどうか、まだ今は検証中なのでありますが、自分の頭の中では分かったように思います。
それで前回の続きなのですが。
前々回、前回と続いてチェビシェフの多項式について説明しました。
一体それがどうしたの、と思われるかたもいらっしゃるかと思いますが。
それがこれから説明いたしますチェビシェフの近似式を導き出すために必要なツールなのです。
このところ例にあげております、SIN関数を多項式で表現するときにまず思い浮かぶのがテイラーの多項式です。
これは[第41回]で書きました。
sin(x)=x−(1/3!)x3+(1/5!)x5−(1/7!)x7+(1/9!)x9…
項数を増やしていくとだんだん真の値に近づいてきます(Xはラジアンです)。
単純な計算式ですからCやBASICでも簡単にプログラムできます。
しかし係数もXnの値もだんだんと小さな値になりかつ数字の桁数が増大していきますから、そのうちに計算誤差が大きくなって何をやっているのかわからなくなってしまいます。
おのずから適当なある項数で打ち切ることが求められます。
チェビシェフの近似式はテイラーの多項式をもとにして導き出しますが、もとのテイラーの多項式よりも1つ少ない項数で(つまりXの次数では2次低い次数で)、もとの式と同等程度の誤差の近似式になるという特徴があります。
しかし正直な私の気持ちといたしましては、それは数学や統計学の講義や、もっと精度の高い計算式が要求されるレベルでは必要なことかもしれませんが、私のBASICの初等関数の算法としましては、テイラーの多項式で必要ならばもうあと1項か2項増やして計算すればよいではないかと思ってしまいます。
つまりはチェビシェフの近似式を求めることが、最良近似式なるものを求めるために必要ということでなければ、それほど意味のあることのようには思えません。
おお。
ということは。
やっぱり最良近似式まで行かなくちゃいかんのだ。
むむむ。
またしても、泥沼じゃあ。
まま。
とりあえずは、前進あるのみ。
で。
いよいよ、チェビシェフの近似式の求め方です。
これがまた、なかなかに面倒です。
なんでもこれをテレスコープ(telescope)法というのだそうです。
telescopeつうと望遠鏡なんですよねえ。
なんなのでしょう。
なんだか小さいものを広げるというような意味なのでしょうか。
それはともかく実際の方法です。
考え方を分かりやすくするために、もとになるテイラーの多項式を5次までとして
sin(x)=x−(1/3!)x3+(1/5!)x5 …(1)
としたときに、それよりも2次低い式、つまりsin(x)=ax−bx3を導き出すことを考えます(それがチェビシェフの近似式です)。
そのときに前回お見せしたチェビシェフの多項式が必要になります。
実はこれから説明する方法は
こちらのサイト(http://metanest.jp/telescoping/)
で説明されておりました方法です。
「数値計算」を再入手する前に暗中模索するなかでたどりついたサイトでした。
この方法でEXCELを使いましてもっと高次の近似式まで導き出して、それがかなりの精度の近似式であることを検証しましたが、のちに「数値計算」をあらためて読みまして、「数値計算」で説明されている方法のほうがEXCEL向きであることを知りました。
しかしものには順序というものがありますから、まずは上記サイトで紹介されていた方法を試しまして、そののちに「数値計算」による方法も試してみることにいたします。
まずは上記サイトでの方法です。
(1)式を降順に書き換えるとともに係数の分母を計算します。
sin(x)=x5/120−x3/6+x …(2)
ここで前回説明しましたチェビシェフの多項式を使います。
使うのは元の多項式と同じ次数の式です。
(2)はx、x3、x5からなる式ですから、
T1(x)=x …(3)
T3(x)=4x3−3x …(4)
T5(x)=16x5−20x3+5x …(5)
を使います。
ここで(2)式の右辺の最高次(x5)の項をT5(x)を使って消去する計算をします。
x5/120−x3/6+x−T5(x)/16/120
と置くとx5が消えます。
x5/120−x3/6+x−T5(x)/1920
=x5/120−x3/6+x−16x5/1920+20x3/1920−5x/1920
=((−320+20)/1920)x3+(1920−5)/1920)x
=−(5/32)x3+(383/384)x …(6)
ここまでが準備段階です。
これからが近似式
sin(x)=ax−bx3
を求める計算になります。
x5のときと同様にして、(4)式を使って(6)式からX3の項を消去するようなT3(x)の係数を求めます。
すると
−(5/32)x3+(383/384)x−(−5/32/4)T3(x)
と置けばX3の項が消去できますから、それを計算して
−(5/32)x3+(383/384)x−(−5/128)(4x3−3x)
=(383/384−15/128)x
=(383/384−45/384)x
=(338/384)x
=(169/192)x …(7)
となります。
ここでT3(x)に乗じた係数は−5/128であることを覚えておきます(8)。
同様にして(3)式を使って(7)式からxの項を消去するようなT1(x)の係数を求めるのですが、T1(x)=xですから、(7)式のxの係数がそのままT1(x)の係数となります。
すなわち169/192です(9)。
以上の計算で求めた(8)(9)から、求める近似式をT3(x)、T1(x)を使ってあらわすと
sin(x)=−(5/128)T3(x)+(169/192)T1(x) …(10)
となります。
ということなのですが、なぜこれでよいのか私にはわかりません。
とにかくこうなるのだそうです。
最後にT3(x)、T1(x)を(3)(4)式を使ってxに置き換えます。
sin(x)=−(5/128)(4x3−3x)+(169/192)x
=−(5/32)x3+(15/128)x+(169/192)x
=−(5/32)x3+(45/384+338/384)x
=−(5/32)x3+(383/384)x …(11)
(11)がsin(x)を3次までの多項式で近似したときのチェビシェフの近似式です(だそうです)。
以上の計算はEXCELを使うともう少し楽にできますが、EXCELでは分数が小数になってしまって、説明するのに都合が悪いので今回は手計算で求めました。
このようにして求めた近似式が元のテイラーの多項式に対してどの程度の精度なのか、次回はEXCELを使って検証してみることにいたします。
MYCPU80でCP/Mを![第46回]
2014.10.5upload
前へ
次へ
ホームページトップへ戻る