📆

数値計算のメモ

東京大学が公開している資料があったのでメモしておく.
 
 

シンボリック計算

Symbolic Math Toolboxを使う
一般的な数値計算だと,例えばを求めると1.412..となるところ,シンボリック計算だとと表記してくれるらしい.
% 記号変数xを定義 syms x; % 記号関数fを定義 f(x) = x.^2.0; % 記号計算により求解 (最後のセミコロンがないことに注意) solve(f(x) == 2.0, x)

連立方程式を解く

普通にするならこれでいいっぽい.
A = [3,2,-2;6,2,-1;-3,-8,7]; b = [2,1,3]; x = A\b
LU分解をしてからやった方が早く計算できるっぽい.
 
  1. 行列 A が三角行列であるかを調べる 三角行列である場合,三角行列用の計算を実行
  1. 行列 A が対称である場合,コレスキー分解を実行可能ならばコレスキー分解を用いて連立一次方程式を解く
  1. コレスキー分解に失敗した場合は,LU 分解を実行.LU 分解を用いて連立一次方程式を解く
A=[3, 2,-2; 6, 2, -1; -3,-8, 7]; b = [ 1; 3; 6 ]; [L,U,P] = lu(A); y = L\(P*b); x = U\y; x
右辺をいっぱい変更して計算しまくる場合はこうした方が早い.※1個の計算をする際にはしなくてもいい.

コレスキー分解をする

A = [4,2,-2,2; 2,10,2,-5; -2,2,3,-4; 2,-5,-4,10]; chol(A)
cholesky_decompose.m
ans =
2 1 -1 1 0 3 1 -2 0 0 1 -1 0 0 0 2

LU分解

下三角Lと上三角Uの積

コレスキー分解

線形計算

LU分解・コレスキー分解を用いて連立一時方程式を解く