Mathematica では,どのように結果を検証すればよいのでしょうか.
Mathematica は今まで作られたソフトウェアの中でも最も信頼できるもののひとつです.すべてのバージョンに対して出荷前に数々のテストが行われます.しかし,完全なソフトウェアというのはこの世には存在しません.またユーザ側にも誤字・脱字などの入力ミスが常に付きまといます.もちろん誤った結果を生じないようにするために最も重要なのは「常識」です.例えば,大きさの次元は妥当か,結果はおおよそ納得できるものかどうかなどは,常に確認しなければなりません.
これに加えて,結果を検証するための簡単なテストをMathematica で実行することができます.ただし,より複雑な計算にはより複雑なテストが必要になるかもしれません.
結果を問題に代入する
多くの場合,結果を元の問題に代入して,その結果が本当に問題の解であるかどうかを確かめることができます.
次の有名な問題の結果を例に取ってみましょう.
![[Graphics:Images/index_gr_1.gif]](Images/index_gr_1.gif)
![[Graphics:Images/index_gr_2.gif]](Images/index_gr_2.gif)
/. はReplaceAllという記述の省略形で,% はMathematica が最後に返した結果を表しています.FullSimplifyを使うと{True, True}が返されます.これは両方の解が方程式を満足していることを意味します.
![[Graphics:Images/index_gr_3.gif]](Images/index_gr_3.gif)
![[Graphics:Images/index_gr_4.gif]](Images/index_gr_4.gif)
この方法は微分方程式ソルバDSolveや,規則を返すその他のコマンドにも適用できます.
![[Graphics:Images/index_gr_5.gif]](Images/index_gr_5.gif)
![[Graphics:Images/index_gr_6.gif]](Images/index_gr_6.gif)
![[Graphics:Images/index_gr_7.gif]](Images/index_gr_7.gif)
![[Graphics:Images/index_gr_8.gif]](Images/index_gr_8.gif)
複数の結果も簡単に代入できます.
![[Graphics:Images/index_gr_9.gif]](Images/index_gr_9.gif)
![[Graphics:Images/index_gr_10.gif]](Images/index_gr_10.gif)
![[Graphics:Images/index_gr_11.gif]](Images/index_gr_11.gif)
![[Graphics:Images/index_gr_12.gif]](Images/index_gr_12.gif)
![[Graphics:Images/index_gr_13.gif]](Images/index_gr_13.gif)
その他の多くの操作では,次の例のように逆関数のコマンドを用いるだけです.
![[Graphics:Images/index_gr_14.gif]](Images/index_gr_14.gif)
![[Graphics:Images/index_gr_15.gif]](Images/index_gr_15.gif)
![[Graphics:Images/index_gr_16.gif]](Images/index_gr_16.gif)
![[Graphics:Images/index_gr_17.gif]](Images/index_gr_17.gif)
トップに戻る
数値テスト
微分方程式について,機械精度の場合の数値解と,より精度を高くした場合の数値解を比較してみましょう.
![[Graphics:Images/index_gr_18.gif]](Images/index_gr_18.gif)
![[Graphics:Images/index_gr_19.gif]](Images/index_gr_19.gif)
以下のプロットは,数値解と微分方程式との差を,WorkingPrecisionがデフォルト(黒)の場合と22(赤)に設定した場合について対数で表したものです.
![[Graphics:Images/index_gr_20.gif]](Images/index_gr_20.gif)
![[Graphics:Images/index_gr_21.gif]](Images/index_gr_21.gif)
この図から分かるように,内部計算精度が高い場合の方が,数値誤差が著しく小さくなっています.初期値がやや大きいのは作為的なものです.しかしもちろん,精度を高く設定すると計算時間が増加するというトレードオフが存在します.
トップに戻る
結果が妥当であるかどうかは,乱数を導入することで,かなり的確に判断できることもあります.
![[Graphics:Images/index_gr_22.gif]](Images/index_gr_22.gif)
![[Graphics:Images/index_gr_23.gif]](Images/index_gr_23.gif)
以下のコマンドは20のランダムな点において,結果を微分したものと元の被積分関数の差を計算します.
![[Graphics:Images/index_gr_24.gif]](Images/index_gr_24.gif)
![[Graphics:Images/index_gr_25.gif]](Images/index_gr_25.gif)
トップに戻る
|