2003/11/11 [1 限] しばらく補間法の応用をしている。 数値微分 数値積分 # 補間法の応用、ただし、他の見方もある。 微分係数、定積分を求める。 数学では、解析的に解けるなら直接求めたほうがよい。 数値表 ( サンプリングデータ ) を引かないと値が求められ れない関数 近似的な方法しかない。 # 点列を、解析的な関数で近似してから、 # 微分、積分する方法もある 計算機で、微分積分を行う他の手段もある 数式処理 マキシマ ( MIT ) は、大学生よりかしこい.. エントロピーを増大させる方向は難しい 積分 ( まとめあげる ) 因数分解 物事を分解する方向は簡単 微分 展開 解析的に解けるなら、解析的に、そうでない場合に数値的な方法を採用する 数値計算の特徴 ( 解析的な手法では、微分と積分はどちらも変らない.. ) 微分は数値的に不安定になりやすい 元の関するが連続でも、微分できない点 ( 値が発散する ) 場合が生じる 積分は数値的に不安定になりにくい 少しずつ足す 連続な関数の積分は連続 数値積分 f(t) の値が t = t_1 .. t_n の点でのみ与えられているとする。 この時に定積分 \int_a^b f(t) dt の値をもとめる。 一番簡単なことは、線型近似して加える 数値微分 \frac{d f(t)}{d t} = \limit_{\delta t}\frac{f(t+\delta t) - f(t)}{\delta t} ( ただし、\delta t は有限.. ) を求める。 # f(t) の関数近似を行って、微分してもよいのだが.. テーラ展開を利用する。 f(t + \delta t) = f(t) + \frac{\delta t}{1!}f'(t) + \frac{\delta t^2}{2!}f"(t) + .. これから、以下の式がえられる。 \frac{d f(t)}{d t} = \frac{f(t+\delta t) - f(t)}{\delta t} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 一次近似 - \frac{\delta t}{2!}f"(x) - .. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 誤差項目 誤差項目 E( \delta t ) の部分は、\delta t を小くすれば、全体 として小くなることはわかる。 # 理屈の上では、\delta t が不等間隔でも議論できるが、バリエーション # が多いので大変。取りあえずは、以下、等間隔として議論する。 テーラ展開 ( \delta t が正の時と負の時を考える ) f(t + \delta t) = f(t) + \frac{\delta t}{1!}f'(t) + \frac{\delta t^2}{2!}f"(t) + .. f(t - \delta t) = f(t) - \frac{\delta t}{1!}f'(t) + \frac{\delta t^2}{2!}f"(t) + .. 双方を引くと.. f(t + \delta t) - f(t - \delta t) = + 2 \frac{\delta t}{1!}f'(t) - \frac{\delta t^3}{3!}f"(t) + .. これから f'(x) = \frac{ f(t + \delta t) - f(t - \delta t) }{2 \delta t } - \frac{ \delta t^2 }{3!}f'''(t) がえられる。 # これは、2 次式.. なんか狡い.. # 最初の公式は、2 点 f(t), f(t+\delta t) で一次式 # 次の公式は、2 点 f(t-\delta t), f(t+\delta t) で二次式 # 同じ計算量で、一方が精度が高いのは変な感じ.. # # よくよく考えてみると.. # \deta t を小くすること考えると.. # 最初の公式では f(t+\delta t) のみを再計算 # 次の公式では f(t+\delta t)とf(t-\delta t)の両方 # 結局、後の方が二倍の時間がかかる.. ( 納得.. ) 同様にして、三次式、四次式等も計算できる。 今度は、双方を加えると... f''(t) = \frac{ f(t+\delta t) - 2 f(t) + f(t-\delta t)}{\delta t^2} - 2 \frac{\delta t^2}{4!}f{^(4)}(t) - 2 \frac{\delta t^4}{6!}f{^(6)}(t) .. これで、二次の近似式を作ることができる。 # これは、二次近似 ( 対称性があるので、一次の項目がキャンセル # された.. ) 、一次近似が欲しければ、対称性を崩して次のように # する。 # \frac{ f(t+ 2\delta t) - 2 f(t) + f(t-\delta t)}{\delta t^2} 同様にして、テーラ展開を用いて、n 次微分の # 数値計算では、対称な公式は、精度が良い # 前後の値 ( 誤差 ? ) がキャンセルして精度が高くなる 微分が不安定になる理由 公式の中に差が現れる ( 差の計算は、誤差を生む ) # 積分の中では、和が現れるだけ.. ( 安定.. ) 有限桁しか計算できないので、 値の近い数値の引き算では、桁落ち ( 精度が失われる ) が生じる 特に、数値微分では、誤差項目 E(\delta t) を小く するために、\delta t を小くすると結果的に ( 分子 の部分に.. ) 殆ど同じ値の引き算がでてくる。 # 誤差解析の話 数値微分の誤差の問題 # 実は、以下は、一般の場合も同様な議論ができるが、 # 数値微分では、特に、特徴的... 公式の誤差 ( E 項目を無視した近似 ) : 打ち切り誤差 \delta t を小くすると、全体として小くなる 有限桁の誤差 ( 計算を有限桁数しかおこなわない ) : 丸め誤差 ( 桁落ち ) \delta t を小くすると、全体として大きくなる 誤差は、この二つの誤差の和なので、\delta t を小くすれば、 誤差が小くなるというわけではない。あまり、\delta t を小く しすぎると、丸め誤差がきいてきて、大きくなってしまう !! # \delta t は有効桁数の半分くらいがよい 公式としては、テーラ展開を利用すれば、いくらでも、作れる # 手で作るのは大変... 数式処理を利用する.. # 非線型な最適化問題をニュートン法で解く場合に、傾斜マトリックス # ( 要素が微係数になっている ) 時くらいしか使わない。 == 課題 ( 2003/11/11 - 1 ) # 教科書には、例題がない ( 単元もない.. )。 f(t) = \exp{t} の数値微分を \frac{d f(t)}{d t} = \frac{ f(t+\delta t) - f(t) }{ \delta t } の公式を用いて解く。 \delta t = 1, 1/2, 1/4 ... 真値と、近似値の差を表示して、誤差の振舞いをしらべる。 # 最初はだんだんと小くなるが、まるめ誤差がきいてくる # 処になると、振動を始める。 # 数値計算をしていると.. # 指数関数が一番素直な関数 # 多項式より自然.. 締切 : 11/25 == 偏微分方程式では.. メッシュを細かくすることが \delta t を小くすることに相当 やはり、同じ問題がしょうじる。 偏微分方程式を離散化して連立方程式で考えると.. 連立方程式の依存関係が大きくなる 解き難い デジカメの CCD の現象 10^{-14} の現象.. 普通の計算機 ( 10^12 位.. ) では解けない ( 桁落ちが原因 ) # 10 ^ 15 なら Okey == 来週は、アメリカへ学会出張なので、大学に来れない.. 休講にする のも偲びないので.. 今週 2 限も講義を行い、来週は、1, 2 限共に、演習。 == 2003/11/11 [2 限] 数値積分 # 積分は問題が少い ## 数値計算では、不定積分はできない ## 不定積分は式の計算、数値計算は値を計算する手法なので.. 数値積分は、原則として、関数のグラフと、x 軸の間の面の面積を 計算するだけ。 積分区間が有限なのが普通だが、無限区間の積分も考えられる。 [一番簡単な方法] 関数のグラフを線分で近似 ( 直線補間 ) し、そのグラフに 相当する面積を計算する ( 一次近似.. ) => 台形の面積の和 台形公式 # text の ニュートン = コーツ の公式は一般的な形 # これの一番単純な場合が、台形公式 \int_a^b f(t) dt = \Sigma_{i=0}^{n-1} \frac{(f(x-\delta t(i)) - f(x-i \delta t(i-1)))}{2}\delta t where \delta t = \frac{b-a}{n} で近似 ( 各々の項目は、台形の面積 ) = (\frac{1}{2}f(a) + f(a+\delta t) + f(a+2\delta t) + + .. + f(b-\delta t) + \frac{1}{2}f(b)) \delta t これは一次近似 それなのに、とても精度が高い !! 台形の面積の計算の前後で、誤差が互いに打ち消す 誤差が端点だけで生じる 特に周期関数では、その端点が一致するので、結果的に、端点の 誤差もキャンセルする とても良い結果がえられる。 # 一般に f(a) = f(b) なら、周期関数とみなしてよい。 台形公式は、理論的に凄く素直で単純な割りにはよい結果が得られるので、 非常に重要な台形公式 # \delta t を小くしても、( 本来の意味での.. ) 丸め誤差は # 生じるが、いわゆる桁落ちがおきないので、余り気にする必要 # はない。 == [二次関数での近似] 3 点を通るグラフを二次関数で近似する シンプソン公式 # ニュートン = コーツ の公式での重みつけでいえば、 # 1/3 4/3 2/3 4/3 .. 4/3 1/3 # となる。 # # 実は、この式は積分区間を 2 \delta t になっている ニュートン = コーツ の公式での重みつけの係数の和は 1 !! # 定数関数の積分を考えれば Okey 更に高次の公式もありうるが.. 実用上では、台形 / シンプソンで十分 ( 次数をあげるメリットはあまりない... ) ロンバーグ積分 台形法から初めて、誤差の見積もり ( 誤差評価 ) を行い、誤差項を消すような形で公式を作る。 2 次の公式が作れる それを更に利用して 3, .. n 次が作れる # 詳しい内容は、text を参照 誤差の計算を見積もりながら、計算を進めることが できるので、どこで打ち切ればよいかが解る点が良い。 # ニュートン = コーツ だと何次がよいか # 計算しないと解らない。 # ニュートン = コーツ の公式では、次数をあげるには、係数を # あらかじめ計算する必要がある。 # ロンバーグ積分では、係数の計算が不要なので、計算機向き # ただ、区間が半分、半分になるので関数値の計算量が増える # ロンバーグの方法を微分に適用することができる # 打ち切り誤差の理論的な予想が可能なので、それを取り除くことに # より、丸め誤差の値が評価ができる。 # # 微分の場合は、区間が増えても、関数値の計算回数 # # はあまり増えないので、この点も面白い。 == 課題 ( 2003/11/11 - 2 ) 関数は、 f(t) = \exp{t} 積分区間は [0 1] として数値積分をする。 手段は、台形法を利用する。 \delta t を 1, 1/2, 1/4 .. としてみた結果を考える。 [工夫] S = f(0) + f(1) S x 1 -> 面積 S = S + f(1/2) S x 1/2 -> 面積 S = S + f(1/4) + f(4/4) S x 1/4 -> 面積 S = S + f(1/8) + f(3/8) + f(5/8) + f(7/8) S x 1/8 -> 面積 ... S = S + \Sigma_{i=1}^{2^{(n-1)}} f(\frac{2i-1}{2^n}) S x f(\frac{1}{2^n}) -> 面積 多少、提出が遅くなってもの構わないので、工夫してみてください。 # 演習の目的は、誤差の振舞いを観察すること 締切 : 11/25 == モンテカルロ法 円の面積を考える 単位円の 1/4 を考える (x_i, y_i) を乱数で N 個生成し、 x_i^2 + y_i^2 < 1 となる数 M を求める。 N を大きくすれば M/N が、1/4 円の面積にちかづく # 収束がえらく遅いが、汎用性がある。 # ニュートン = コーツは、一次元であれば、点の個数に比例して、それほど、 # 計算量がふえない # 次元が大きいと、計算量が爆発する。 # モンテカルロ法は、多次元でも簡単に利用できる # 物理現象などの計算によく利用される ( 他の方法がない.. ) # 素粒子のシミュレート # モンテカルロ法では、「乱数生成」が問題となるが、一様性だけが # あればよいので、それほどきびしくもない.. == 次回からは、常微分方程式、偏微分方程式を行う。 演習は、excel を使うの利用できるように..