a 数値計算の精度を制約するデータ形式とその特徴は何か.
浮動小数点数という.
仮数部と指数部をもつ.
仮数部をf, 指数部をeとおくとき, 実数の表現はf * B^(e)となる.
ここでBは基底と呼ばれ, 計算機では2が用いられることが多い.
b 丸め誤差とは何か.
実際の値から浮動小数点数に変化する操作を丸めという.
丸め誤差とは, これに伴って生じる誤差である.
c 打切り誤差とは何か.
打ち切り誤差とは,
収束判定条件により,
演算を途中で打ち切ることで生じる誤差である.
d 安定性と何か.
安定性とは,
解が見つかる保証である.
例えば, 二分法では連続関数の正負値の間には必ず解が存在する.
この正負値を二分法の初期値とすれば, 解が必ず見つかる.
これは解が安定であると言える.
しかし, 初期値を適切に設定しないと解に収束するとは限らない.
これを解が安定でないという.
安定性は問題や解法, 初期値に依存する.
桁落ち
>>浮動小数点演算で、計算結果が0に極端に近くなる加減算を行ったときに、有効数字の桁数が極端に少なくなる現象。
0.123123-0.123122=0.000001とか
情報落ち
>>コンピュータで絶対値の大きさが極端に異なる数字を足したり引いたりしたときに、小さい値の情報が無視されてしまう現象。また、そのような現象によって起きる計算の誤差。
123445.4+0.00000000002とか
積み残し
>>情報落ちが繰り返し起こること
資料:
ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
詳細については第2章をCheck
s
拡大係数行列
係数行列Aとベクトルbを足して作られる行列
<A|b>;
>>[2*2]|[2*1]なら、[3*2]行列になるよ
これの掃き出し操作には
LUDecomposition
P,L,U:=LUDecomposition(<A|b>);
これで下三角行列と上三角行列に分解できる
P行列は置換行列になる
ここまでで前進消去をしただけなので、後退代入にはoptionにoutput='R'をつける
LUDecomposition(<A|b>,output='R');
とするとbベクトルの部分が解になる
写像
ライブラリの読み込みから
with(plots):with(plottools):
ベクトルを位置座標にlistに変換する
p0:=convert(x0,list);
p1:=convert(b,list);
以下面倒なので課題をしながら説明をする
////////////////////////////////////
with(LinearAlgebra): #パッケージ
with(plots):
with(plottools):
d:=4: #表示する範囲のため
B:=t->Matrix([[cos(t),sin(t)],[-sin(t),cos(t)]]): #回転行列
point1:=[]: #配列の作成
point2:=[]:
line1:=[]:
a:=<1,0>: #円の半径?
n:=40: #点の数
for i from 0 to 40 do
p1:=convert(B(2*Pi*i/n).a,list): #ベクトルを位置座標に変換する
p2:=convert(A.Vector(p1),list): #p1は内側の円、p2は外側の変換された円
point1:=[op(point1),disk(p1,0.03,color=red)]:
#配列に入れつつ?、disk(円)を描く
point2:=[op(point2),disk(p2,0.03,color=blue)]:
line1:=[op(line1),line(p1,p2)]; #点をつなぐ
end do:
display(point1,point2,line1,view=[-d..d,-d..d]);
#配列に入れた点と線の情報を表示する