情報科学 第6回 数値解析(1).

Slides:



Advertisements
Similar presentations
計測工学 10 データの補間 スプライン補間 1. . 復習 階差 近似多項式の次数 の決定法 等間隔階差 – 関数 y=f(x) で、 x の値 が等間隔の場合 等間隔: x 0, x 0 +h, x 0 +2h ・・・ y の値: y 0, y 1, y 2 ・・・ これらの階差は – 第1階差:
Advertisements

平成 27 年 10 月 21 日. 【応用課題 2-1 】 次のビット列は、ある 10 進数を 8 ビット固定小数点表示で表した時の ものです。ただし、小数点の位置は 3 ビット目と 4 ビット目の間としてお り、負数は2の補数で表しています。このとき、元の 10 進数を求めてく ださい。
1 線形代数学. 2 履修にあたって 電子情報システム学科 必修 2005 年度1セメスタ開講 担当 草苅良至 (電子情報システム学科) 教官室: G I 511 内線: 2095 質問等は上記のいずれかに行なうこと。 注意計算用のノートを準備すること。
2. 数値微分法. 数値微分が必要になる場合として、次の 2 つが考えられる。 関数が与えられていて、その微分を近似的に計算する。 (数値微分の精度が十分で、かつ、計算速度が数値微分の方が 早い場合など。) 離散的な点の上で離散的なデータしかわかっていない関数の微 分を近似的に計算する。(偏微分方程式の数値解を求めたい時.
IT 入門 B2 ー 連立一次方程式( 2 ) ー. ガウスの消去法の問題点 – 浮動小数点数の特殊な値 – 数学関数 ピボット選択つきガウスの消去法 演習 授 業 内 容 授 業 内 容.
数値解析シラバス C言語環境と数値解析の概要(1 回) C言語環境と数値解析の概要(1 回) 方程式の根(1回) 方程式の根(1回) 連立一次方程式(2回) 連立一次方程式(2回) 補間と近似(2回) 補間と近似(2回) 数値積分(1回) 数値積分(1回) 中間試験(1回) 中間試験(1回) 常微分方程式(1回)
1. 補間多項式 n 次の多項式 とは、単項式 の 線形結合の事である。 Definitions: ( 区間, 連続関数, abscissas (データ点、格子点、差分点), 多項 式 ) Theorem. (補間多項式の存在と一意性) 各 i = 0, …, n について、 をみたす、次数が高々 n.
基本情報技術概論(第2回) 埼玉大学 理工学研究科 堀山 貴史
有限差分法による 時間発展問題の解法の基礎
連続系アルゴリズム演習第3回 DE変換を用いた数値積分法.
プログラミング論 数値積分
プログラミング論 I 補間
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
Extremal Combinatorics 14.1 ~ 14.2
重力3体問題の数値積分Integration of 3-body encounter.
4. 双曲型偏微分方程式の数値解法入門 双曲型の偏微分方程式(partial differential equation, PDE)の最も簡単なの例として1変数の線形PDE    を考える; この方程式の意味は大雑把に言って、Δx の セル内に流入流出する f の量がフラックス その結果セル内で f.
情報科学 第7回 数値解析(2).
周期境界条件下に配置されたブラックホールの変形
4.2 連立非線形方程式 (1)繰返し法による方法
電磁気学C Electromagnetics C 7/13講義分 電磁波の電気双極子放射 山田 博仁.
流体のラグランジアンカオスとカオス混合 1.ラグランジアンカオス 定常流や時間周期流のような層流の下での流体の微小部分のカオス的運動
非線形方程式の近似解 (2分法,はさみうち法,Newton-Raphson法)
2008年6月12日 非線形方程式の近似解 Newton-Raphson法
電気回路学Ⅱ エネルギーインテリジェンスコース 5セメ 山田 博仁.
(ラプラス変換の復習) 教科書には相当する章はない
電気回路Ⅱ 演習 特別編(数学) 三角関数 オイラーの公式 微分積分 微分方程式 付録 三角関数関連の公式
誤差の二乗和の一次導関数 偏微分.
計算アルゴリズム 計算理工学専攻 張研究室 山本有作.
計算アルゴリズム 計算理工学専攻 張研究室 山本有作.
情報科学 第6回 数値解析(1).
情報科学 第7回 数値解析(2).
© Yukiko Abe 2014 All rights reserved
応用数学 計算理工学専攻 杉原研究室 山本有作.
スペクトル法の一部の基礎の初歩への はじめの一歩
数値積分.
プログラミング論 II 2008年吉日 主成分分析 数値積分
6. ラプラス変換.
システム制御基礎論 システム工学科2年後期.
ルンゲクッタ法 となる微分方程式の解を数値的に解く方法.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
電気回路学Ⅱ コミュニケーションネットワークコース 5セメ 山田 博仁.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
4章 開水路における不等流(2) 漸変流 4-1漸変流とは ① 断面形状や底面形状が緩やかに変わる流れ。
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
情報処理Ⅱ 第2回:2003年10月14日(火).
基本情報技術概論(第2回) 埼玉大学 理工学研究科 堀山 貴史
補講:アルゴリズムと漸近的評価.
電気回路学Ⅱ エネルギーインテリジェンスコース 5セメ 山田 博仁.
回帰分析(Regression Analysis)
基本情報技術概論(第13回) 埼玉大学 理工学研究科 堀山 貴史
解析学 ー第9〜10回ー 2019/5/12.
ガウス分布における ベーテ近似の理論解析 東京工業大学総合理工学研究科 知能システム科学専攻 渡辺研究室    西山 悠, 渡辺澄夫.
シミュレーション物理4 運動方程式の方法.
電気回路学Ⅱ 通信工学コース 5セメ 山田 博仁.
数値解析 第6章.
電気回路学Ⅱ 通信工学コース 5セメ 山田 博仁.
2008年6月5日 非線形方程式の近似解 2分法,はさみうち法,Newton-Raphson法)
Cプログラミング演習 ニュートン法による方程式の求解.
How shall we do “Numerical Simulation”?
プログラミング演習I 数値計算における計算精度と誤差
情報処理Ⅱ 第2回 2004年10月12日(火).
応用数学 計算理工学専攻 張研究室 山本有作.
コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
8.2 数値積分 (1)どんなときに数値積分を行うのか?
8.数値微分・積分・微分方程式 工学的問題においては 解析的に微分値や積分値を求めたり, 微分方程式を解くことが難しいケースも多い。
Presentation transcript:

情報科学 第6回 数値解析(1)

数値計算とは? 代数演算 数値計算 等式を一定の規則のもとに変形して解析的に求める 反復計算によって“近似的に”解を求める 解析的に求めることが困難な方程式を解く場合に用いる 例) 物理学、化学、天文学などにおける数値積分    や微分方程式の解法など

数値解析(1)トピック 数値計算における誤差 数値積分 微分方程式の解法

1. 数値計算における誤差 実数データ表現 丸め誤差 桁落ち 情報落ち 打切り誤差 浮動小数点表現 0.1の2進数表記・ 単精度表現・倍精度表現 桁落ち 情報落ち 打切り誤差 Taylor展開・級数展開の高次項の影響

この表記は、例えば、1.0101…010を2進数として解釈するという意味である 実数データ表現 計算機内の数値データは,有限長のビット列で表現される 大きな数や小さな数を表現するためには, 符号部と指数部,仮数部をもった実数表現  (浮動小数点表現)が利用される IEEE 754 実数表現に関する規格 符号 仮数 指数 この表記は、例えば、1.0101…010を2進数として解釈するという意味である バイアス(指数が負の値をとれるようにするため)

単精度と倍精度 単精度 32ビットで実数を表現 倍精度 64ビットで実数を表現 IEEE 754 実数表現に関する規格 単精度 32ビットで実数を表現 倍精度 64ビットで実数を表現 指数部と仮数部がすべて0の実数は0(±0)を意味する このほかにも±無限大などの表現が可能 整数の大小比較回路がそのまま使える

丸め誤差 10進数を2進数で表現する場合、有限桁では近似的にしか表せないことに起因する誤差 例) 0.1 (10) = 2-4+ 2-5+ 2-8+ 2-9+… =0.000110011… (2) x 20 = 1.10011… (2) x 2-4 0.1(10)は有限桁では近似的にしか表現できない (10進数の小数で1/3や1/7を表す場合に相当) 1/3 = 0.333333… 1/7 = 0.142857…

丸め誤差の例 誤差 # irbで以下を試してみる (0.1*3==0.3) # 上記と同じことを実現するのに以下の書き方もある Ruby # irbで以下を試してみる (0.1*3==0.3) # 上記と同じことを実現するのに以下の書き方もある (0.1*3-0.3).zero? これは0.1の3倍が0.3に等しいかどうかを真偽で評価するための表現で 数学的には真(true)という結果になるはずであるが、実際は偽(false)となる 符号部 指数部 仮数部 0捨1入 倍精度表現では ["0", "01111111011", "10011001100…110011010"] 0捨1入 ["0", "01111111101", "001100110011…00110100"] 誤差 ["0", "01111111101", "0011001100…1100110011"] 丸め誤差は # (検証)irbで以下を試してみよ 0.1*3-0.3 2**-54 0が52個

0捨1入 ..0110011010 ..1100110100 ------------------- ..0011001110 ..00110100

単精度表現 仮数部23ビット 指数部8ビット 仮数の表現範囲は有効桁数は24ビット これは10進数で7桁程度の精度しかないことを意味する 1.00…0 (2) =1 から1.11…1(2) =2 - 2-23≈ 2 - 1.2 x 10-7 ≈ 2 指数の表現範囲は 1.2 x 10-38 から1.7 x 1038 200000001 (2) -127 =2-126 ≈ 1.2 x 10-38 211111110 (2) -127 =2127 ≈ 1.7 x 1038 200000000 (2) -127 と、 211111111 (2) -127 は 特別な意味を持つので 除外してある 最大値の限界は  ≈ 2 x 2127=2128 ≈ 3.4 x 1038 となる

倍精度表現 仮数部52ビット 指数部11ビット 仮数の表現範囲は有効桁数は53ビット これは10進数で16桁程度の精度 1.00…0 (2) =1 から1.11…1(2) =2 - 2-52≈ 2 - 2.2 x 10-16≈ 2 指数の表現範囲は 2.2 x 10-308 から9.0 x 10307 2000…01 (2) -1023 =2-1022 ≈ 2.2 x 10-308 2111…10 (2) -1023 =21023 ≈ 9.0 x 10307 2000…000 (2) -1023 と 2111…111 (2) -1023 は 特別な意味を持つので 除外してある 最大値の限界は 2 x 21023=21024 ≈ 1.7 x 10308 となる

桁落ち誤差と情報落ち誤差 計算機の数値計算では誤差が拡大する可能性がある 桁落ち誤差 情報落ち誤差 桁落ち誤差と情報落ち誤差がある 近い数値間の減算による誤差 ほぼ同じような数値の差をとると有効桁数が減少する 情報落ち誤差 大きさの異なる数値間の加減算による誤差 大きさの異なる数値の加減算では、小さな数値は大きな数値の有効桁範囲外になり無視されてしまう

桁落ち誤差の例 err1.rbの実行結果 桁落ち誤差 打切り誤差 def f(x) Ruby err1.rbの実行結果 h を十分小さく取れば微係数は、          で近似できる 桁落ち誤差 h を変えてx=1における微係数の誤差を調べる 打切り誤差 def f(x) return Math.log(x); # f(x)=ln(x) end x=1.0; 15.times { |i| h =0.1**i #h=0.1, 0.01, …, 1e-15 df=(f(x+h)-f(x))/h err=(df-1.0).abs print "h=",h,"\t f'(",x,")=",df," err=",err,"\n" }    を小さくしていくと、 ある程度までは打切り誤差が 減少していくが、より微小になると      と     の差も微小となり 有効桁数が減少する err1.rb その結果、桁落ち誤差が大きくなる ※打切り誤差については 後ほど述べる

打切り誤差 ある関数の値を無限級数を用いて数値計算する場合、有限の項数で打切って近似することにより生じる誤差 (たとえ,実数が無限精度で表現できても生じる) 例)指数関数の原点の周りのテイラー展開 無限回の計算を行うことはできないので、有限回(n回)で 打切って近似を行う スライド13では 微係数を求める場合の 打切り誤差の例を紹介した 誤差の主要成分は

2. 数値積分 台形公式 シンプソン公式

台形公式 積分を区分線形(piecewise linear)で近似する方法 全積分区間をn等分し各部分区間  の積分を台形の面積として計算し総和をとる

台形公式(続き) ある関数 の から までの 積分の近似値を求めるには、 各部分区間 における台形の総和で近似する

シンプソン公式 積分を1次式ではなく2次式で近似する方法 台形公式(1次式近似) シンプソン公式(2次式近似)

ラグランジュ補間 ある関数   を3点  で補間する2次関数

シンプソン公式(続き) 部分区間 とし 区間 の部分の積分近似値は となるため、 から までの 積分近似値の総和は

3.常微分方程式の解法 Euler Method Runge-Kutta (Gill) Method

常微分方程式の数値解法 高階(n階)の常微分方程式は一般に n組の連立1階常微分方程式に帰着される 1階の常微分方程式の解法が基本となる (1階)常微分方程式の数値解法にはTaylor展開を利用する場合が多い 常微分方程式 を初期条件 で解く場合 初期条件近傍の解 はTaylor展開で求まる In the order of

Euler法 常微分方程式 を初期条件 で解く場合 を起点としてその近傍 を以下のように逐次求める (Eulerの公式) 任意の値 はこの漸化式を数値計算することにより 数列として求めることができる 問題点:精度が良くない・誤差が蓄積する

簡単な例 def euler(n) y = 1.0 h = 1.0/n for i in 0..n-1 Ruby 簡単な例 def euler(n) y = 1.0 h = 1.0/n for i in 0..n-1 y = y + (1.0/(2*y))*h end y

y sqrt[2] 1 x 1 2

Taylor展開・数値解法の問題 アイデア:Euler法(1次)よりも高次の微分係数を用いる方法が考えられる 問題点:計算機では高次の導関数を求める数式処理が一般に容易ではない 例) ではどうするか?

Taylor級数(下の式)と一致するように Runge-Kutta法 別の方法でTaylor級数と同値なものを計算する方法を考える アイデア:高次導関数を求めるのではなく、高次導関数の値を差分で近似する ※高次導関数が 現れていないこと に注意 上の式で の値が、 の2次の項までは、 Taylor級数(下の式)と一致するように を決めたい

Runge-Kutta法(続き) に注意すると そこで と の両式が に関係なく等しくなるためには 従って (Taylor展開 2次まで) の項は に含まれる そこで と (Taylor展開 2次まで) の両式が に関係なく等しくなるためには 従って

天下りに与えられているとすると、 上2式を代入    に注意して偏微分を常微分に   を代入すると2次までの Taylor展開になっている

Runge-Kutta法(続き) 従って、以下の方法での数値解法は、 の2次の項まではTaylor級数と一致する 同様の手法用いることにより、 高次のRunge-Kutta法を導くこともできる

簡単な例 def runge_kutta(n) y = 1.0 h = 1.0/n for i in 0..n-1 Ruby 簡単な例 def runge_kutta(n) y = 1.0 h = 1.0/n for i in 0..n-1 k1 = 1.0/(2*y)*h k2 = (1.0/(2*(y+k1)))*h y = y + (k1+k2)/2.0 end y f(x,y)=1/2y に注意すると この式が簡単に導かれる

収束に関するコメント Euler Runge-Kutta hの項まで近似している 各ステップの誤差はh^2に比例 ステップ数は1/hに比例

数値解析(1) まとめ 数値計算には種々の誤差が生じる 数値積分の数値解法 常微分方程式の数値解法 実数表現 丸め誤差 打切り誤差 桁落ち 情報落ち 数値積分の数値解法 台形公式 シンプソン公式 常微分方程式の数値解法 Euler法 Runge-Kutta (Gill)法