近似式のプログラミング

近似式のプログラミング

Do it yourself - book-loverの日記

執筆者のプロフィール

浜田 穂積
1938年 岡山市生まれ
1964年 京都大学工学部数理工学科卒業
日立製作所中央研究所入社
1987年 理学博士(早稲田大学)
1989年 電気通信大学教授

中央研究所の概要:研究開発:日立

平山本によるレビュー

サインやコサイン、さらには平方根といったコンピュータが直接計算できない関数を計算する方法について書いてある本だ。ただし、これを読むには前もってテイラー展開の知識がなければならないので、最低限オイラーの贈物レベルの数学がみについていないとつらいだろう。
 それに、これが必要になる状況はもうないかもしれない。標準のサインコサインが遅くて、仕方がないということは最近はあまりない気がするし、「多少精度が悪くても速いサインが必要なんだ!」というような状況も、よほどギリギリを目指さない限りはそうそうあるまい。しかし、考え方を広げる上では大変面白いし、コンピュータで計算するということの本質を垣間見られる貴重な本だと思う。

おおよそのポイントは、このレビューに書いてあることでいいのだと思います。
それにしても、フォローするのがつらい内容でありました。
テイラー展開などの計算方法を理解しているものとして、「話」が進んでいるということは
その通りです。
ここが、抜け落ちていると、本の中の計算過程がワケワカメになります。

コンピュータの電卓としての側面について、掘り下げた本なのかもしれません。
人間が、紙と鉛筆を使って、計算する分には計算する人間が丁寧である限り、
正確な計算をします。
ところが、コンピュータの場合は、人間の手に余るような計算を引き受ける分、
どうしても誤差が出る。(実数を、有限の桁のものとして、計算したり、テイラー展開を途中で
打ち切ってしまうから。)

「どうしても計算の誤差」が出るという「現実」を所与のものとして、うけいれる。

不可避の計算誤差を最小限にするための方法を、考えていこう。

という流れになります。

ですから、ある関数に、ある値を代入したときの値を、色々な計算方法を使って、
算出します。計算方法ごとの値と、「数学的にまっとうで正しい値」との間のギャップが
どれくらいあるのかも計算して、関数ごとの、ベストな計算方法を提示していくという
流れになります。

読んでどうなるのかといったところですけど。
私は読んでいて思ったのは、「計算ミス」というリスクについてです。
On Off and Beyond: 日本語にならない英単語:risk

riskは危ないかどうかじゃなくて確率論の話。「望ましくない結果となる確率が高い」ことがrisky。
前も書いたような気がするが、高層ビルの屋上から飛び降りるのはno risk。必ず死ぬから。自殺するんだったら、「望ましくない結果」=「生き残ってしまう」だが、その確率はゼロだからno risk。

計算誤差 計算ミスというのは、実は結構、根深い付き合いがあります。
おそらく数理に関係する教職の人はみんなそうなのだろうと思います。
問題の解法がひらめくかどうかの前の、「これ、間違えたらダメでしょ」というアレです。
そういえば、どこかの学校の算数の先生が、「計算ミス」のパターンを集めた労作とかを
出版されていたような気がします。

この本の筆者である浜田先生も、こういった計算誤差を最小にするための研究を30年やったと
書いています。
そういう仕事もあるのだなと新鮮でした。
30年も付き合った人がいるのだから、また同じような「計算ミス」「計算誤差」に出会っても、
じっくりと取り組んでいこうと思ったり。
人間が不可避的にミスをするのに、付き合うのと、
パソコンが、不可避的に誤差を出すのに付き合うのと、どちらがマシなのだろうかとか、
そんなこともついでに考えてみたりしました。

私も、プログラミングに関する書籍は、少しは読みました。
これはいってもいいのかなと思うのは、「コンピュータにやらせる計算があっている」という
ことが前提になって、組まれているプログラムが多いということです。
というより、すべてそうです。

でも、テイラー展開を無限に続けることはできないということだとか、
どこまでも、少数の桁が終わり無く続く無理数などがある限り、
正確な計算というのは100%保障されないということから、
足し算の回数や、割り算の回数を少し変えるだけで、出てほしい数値が、ガタンガタン
と変わる。

この気持ち悪さ。

これって、数値計算に限らずよくあることのような気がします。



目次

1章 序論
1-1 関数近似とは何か

1-2 わが国における関数近似の歴史

1-3 関数近似の特徴

1-4 近似式の実例

2章 実数値の計算機内部での性質

2-1 浮動小数点実現

2-2 関数プログラムの誤差

3章 関数プログラムの構成法

3-1 基本周期への還元

3-2 加法定理の利用

3-3 基本区間での近似

3-4 非線型方程式を説くことによる計算

4章 多項式による近似

4-1 Chebyshev多項式

4-2 項数の縮小

4-3 関数のChebyshev多項式による展開と打ち切り

4-4 近似式設定の前提条件

4-5 最良近似式の定義

4-6 最良近似式の計算法概説

4-7 最良近似式の具体的計算法

4-8 偶関数と奇関数

4-9 近似式の実質的次数

4-10 多項式形近似式における補正量と必要桁数

5章 有理式による近似

5-1 Pade展開

5-2 一般の有理式の扱い

5-3 近似式の計算量

5-4 有理式による近似の問題点

5-5 有理式型の最良近似式計算法

6章 連分数による近似

6-1 いくつかの関数の連分数展開形

6-2 連分数形の近似式

6-3 有理式形近似式と連分数形近似式の関係

6-4 近似式の計算法

7章 混合展開形の近似式

7-1 有理式形近似式の見直し

7-2 近似値計算法のまとめ

7-3 混合展開形の構成

7-4 本質的な式の個数

7-5 混合展開形近似式の計算法

7-6 偏差点座標の初期値推定の改良

7-7 近似式の計算限界

7-8 混合形最良近似式の数値例

最良近似式計算プログラム

8-1 プログラムの使い分け

8-2 相対誤差標準最良化プログラム(MINIMAXR)

8-3 絶対誤差基準最良化プログラム(minimaxa)

8-4 奇関数の扱い

8-5 奇関数最良化プログラム(minimaxo)

8-6 近似公式の計数として提示する桁数の決定法

8-7 近似式による関数値の計算方法

8-8 任意の混合展開計数の求め方

8-9 最大誤差の簡易推定法

9章代表的な関数の近似式の最大誤差

9-1から9-10までに、三角関数の値を近似式で計算して出したデータを
並べております。

9-11 この表から知りえた特徴的な事項

10章 数学的ソフトウェアとしての近似式

10-1 e^{x}の近似

10-2 d_0の扱い

10-3 関数ルーチン設計時の近似式の選択

10-4 除算を嫌う場合の対処法

10-5 ラジアン単位と四分円単位

10-6 対数の低

10-7 区間の還元法

付録A 代表的関数の計算プログラム

A-1 基礎となる関数プログラム
A-2 実関数のプログラム
A-3 複素関数のプログラム

付録B 16進数計算機のためのプログラム
B-1 実関数のプログラム
B-2 複素関数のプログラム

参考文献

索引