MATLAB測位プログラミングの 基礎とGT (3)

Slides:



Advertisements
Similar presentations
Absolute Orientation. Absolute Orientation の問題 二つの座標系の間における剛体 (rigid body) 変換を復元す る問題である。 例えば: 2 台のステレオカメラから得られた3次元情報の間の関 係を推定する問題。 2 台のステレオカメラから得られた3次元情報の間の関.
Advertisements

大規模な三角 Toeplitz 線形方 程式の高速解法とその応用 ○ 安村 修一(法政大学 4 年) 李 磊(法政大学) 日本応用数理学会「行列・固有値の解法とその応用」研究部会 第6回研究会.
1 線形代数学. 2 履修にあたって 電子情報システム学科 必修 2005 年度1セメスタ開講 担当 草苅良至 (電子情報システム学科) 教官室: G I 511 内線: 2095 質問等は上記のいずれかに行なうこと。 注意計算用のノートを準備すること。
IT 入門 B2 ー 連立一次方程式( 2 ) ー. ガウスの消去法の問題点 – 浮動小数点数の特殊な値 – 数学関数 ピボット選択つきガウスの消去法 演習 授 業 内 容 授 業 内 容.
1 通信教育学部 コンピュータ演習 Excel の書式設定と関数 授業ページ「コンピュータ演習(通信教育学 部)」を 開いてください。提出課題の一覧が掲載されてい ます。
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
コンピュータプログラミングIII ベクトルと行列の演算
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
Fill-in LevelつきIC分解による 前処理について
A Q R QR分解とは? → × ◆QR分解 QTQ = I (単位行列) ◆応用例 ◆主な計算方法 n m 今回はこの方法に注目
第8章 ベクトル・行列の基礎 Rによるベクトル・行列の表現と計算法.
情報科学科2年生応用線形代数 のためのMATLAB 入門
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
C言語 配列 2016年 吉田研究室.
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
4.3 連立1次方程式   Ax = b   (23) と書くことができる。
Q q 情報セキュリティ 第6回:2005年5月20日(金) q q.
Extremal Combinatorics 14.1 ~ 14.2
AllReduce アルゴリズムによる QR 分解の精度について
回帰分析.
ブロック線図によるシミュレーション ブロック線図の作成と編集 ブロック線図の保存と読込み ブロック線図の印刷 グラフの印刷
IT入門B2 ー 連立一次方程式 ー.
香川大学工学部 富永浩之 情報数学1 第2-1章 合同式の性質と計算 香川大学工学部 富永浩之
MATLAB測位プログラミングの 基礎とGT (1)
ワイヤレス通信におけるMIMO伝送技術.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
3次元での回転表示について.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
正方行列向け特異値分解の CUDAによる高速化
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
第6章 カーネル法 修士2年 藤井 敬士.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
MATLAB測位プログラミングの 基礎とGT (2)
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
人工知能特論 9.パーセプトロン 北陸先端科学技術大学院大学 鶴岡 慶雅.
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
前回の練習問題.
RTK-GPS用プログラムライブラリRTKLIBの開発・評価および応用
「R入門」  5.7 行列に対する諸機能  10月23日 (木) 発表者 大城亜里沙.
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
3次元での回転表示について.
知能システム論I(13) 行列の演算と応用(Matrix) 2008.7.8.
5.RSA暗号 素因数分解の困難性を利用した暗号.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
パターン認識特論 担当:和田 俊和 部屋 A513 主成分分析
プログラミング 4 探索と計算量.
数値計算モジュール NumPy.
コンパイラ 2011年10月20日
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
「データ学習アルゴリズム」 第3章 複雑な学習モデル 報告者 佐々木 稔 2003年6月25日 3.1 関数近似モデル
わかりやすいパターン認識 第7章:部分空間法  7.1 部分空間法の基本  7.2 CLAFIC法                  6月13日(金)                  大城 亜里沙.
統計ソフトウエアRの基礎.
行列式 方程式の解 Cramerの公式 余因数展開.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
香川大学創造工学部 富永浩之 情報数学1 第2-1章 合同式の性質と計算 香川大学創造工学部 富永浩之
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
精密工学科プログラミング基礎 第7回資料 (11/27実施)
情報工学Ⅱ (第8回) 月曜4限 担当:北川 晃.
コンパイラ 2012年10月11日
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
情報処理Ⅱ 2005年11月25日(金).
Q q 情報セキュリティ 第7回:2005年5月27日(金) q q.
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

MATLAB測位プログラミングの 基礎とGT (3) 東京海洋大学産学官連携研究員  高須 知二

行列演算プログラミング 行列生成 行列操作 行列演算 \ (バックスラッシュ) 組込関数

行列生成 (1) 空 : a=[]; スカラー (0次元配列) : a=1; b=3+3i; c=pi; d=NaN; c=Inf; (3階以上) テンソル(3次元以上配列) a=cat(3,[1 2 3;4 5 6],[7 8 9;10 11 12]);

行列生成 (2) 零行列 : a=zeros(10); a=zeros(4,5); 単位行列 : a=eye(10); 等間隔(行)ベクトル : a=1:10; b=0:-0.5:-10; 単一値行列: a=ones(10); a=4*ones(10); a=repmat(NaN,10,10); a(1:10,1:10)=Inf; 乱数 : a=rand(10); a=randn(10,1);

行列生成 (3) 要素への直接代入 a(1,1)=1; a(1,2)=2; a(1,3:7)=3; 行列サイズ自動拡張 (ゼロfill) clear; a(10,8:10)=1; 行列の連結 a=[1 2 3]; b=[4 5]; c=[a b]; d=[1:4 10:12 8:-1:6]; e=[[1;2;3];[[4;5;6],[7;8;9]]];

行列操作 (1) 要素参照・代入 a=[1 2 3 4;5 6 7 8;9 10 11 12]; b=a(1,3); c=a(:,1); d=a(2,:); e=a(1:3,1:2); f=a([1 2],[1 3]); g=a(end,2); h=(1,end-2); k=a([1 1 1 1 1],[1 2 1 2]); a(1,1)=-1; a(1,2:3)=0; a(end,:)=3:6; 行列サイズ、次元 [n,m]=size(a); n=length(b); n=ndims(c);

行列操作 (2) 転置 a=[1 2 3;4 5 6;7 8 9]; b=a'; c=(1:10)'; (or .') サイズ変更 b=reshape(a,9,1); c=a(:); d=zeros(1,9); d(:)=a; 交換 b=a(:,[2 1 3]); c=a([3 2 1],[3 1 2]); d=flipud(a); e=fliplr(a);

行列操作 (3) 要素追加 a=[1 2 3;4 5 6;7 8 9]; b=[a;[10 11 12]]; b=[10;11;12;a]; a(end+1,:)=[10 11 12]; 要素削除 a(:,1)=[]; a(end,:)=[];

行列操作 (4) FIND() : 非ゼロ要素のインデックス a=[0 0 0 1 0 1]; i=find(a); i->4;6 a=[2 0;0 1;0 0]; [i,j]=find(a); i->1;2, j=1;2 ベクトル演算関数、演算子との組み合わせ →forループ代替 : matlab表現, 実行効率 行列要素参照中ではfind()を省略可能 a(find(a<0)) <-> a(a<0) a(find(a(:,1)==3),end) <-> a(a(:,1)==3,end)

行列操作 (5) 例1 : 0.5未満の要素の個数を数える (1) n=0; for i=1:length(a), if a(i)<0.5, n=n+1; end, end, n (2) n=length(find(a<0.5)) (3) n=sum(a<0.5) 例2 : NaN以外の値の平均を求める (1) s=0;n=0; for i=1:length(a) if ~isnan(a(i)), s=s+a(i); n=n+1; end end, m=s/n (2) m=mean(a(~isnan(a)))

行列操作 (6) 例3 : for文とfindの組み合わせ a=rand(100,4); for i=find(a(:,1)<0.5)' disp(sprintf('%f',a(i,:))) end

行列演算 (1) 加減算:行列+スカラー : A+2, 3+A 加減算:行列+行列 : A+B 乗算:行列×スカラー : A*4, 5*A べき乗 : A^3 =A*A*A (A:正方行列) 要素べき乗:A.^3

行列演算 (2) 比較 (==, ~=, <, >, <= >=) 行列 : 行列 行列 : スカラー 結果は(0,1)要素行列で得られる→FIND() 零行列判定 : isempty(a) (×a==[]) 行列内容一括比較 c=isequal(a,b) (サイズ+内容) d=all(all(a>b)); e=any(any(a<b));

\ (バックスラッシュ) (1) 線形方程式(系)

\ (バックスラッシュ) (2) matlabでの解法 : x=A\y (1) n=m : 線形方程式→ ガウス消去法 等 (2) n<m : 最小二乗解→QR分解 (3) n>m : 一般解の一つ (basic解?) Aが三角、対称、スパースか否か等を判定し最適(精度、効率)な解法を内部選択 x=y/A (スラッシュ)→y=x*Aの解 A/B = (B'\A')'

\ (バックスラッシュ) (3) 例1 : 観測値の2次多項式フィッティング (1) A=[x.^2 x ones(size(x))]; a=A\y; (2) a=polyfit(x,y,2); 例2 : 単独測位アルゴリズム

最小二乗各種解法 (1) 10.8s Matlab任せ 5.3s 正規方程式 6.0s 正規方程式 5.2s コレスキ分解 11.8s x=A\y; 10.8s Matlab任せ x=(A*A')\(A'*y); 5.3s 正規方程式 x=inv(A*A')*(A'*y); 6.0s 正規方程式 R=chol(A‘*A); x=R\(R'\(A'*y)); 5.2s コレスキ分解 [Q,R]=qr(A,0); x=R\(Q'*y); 11.8s QR分解 [U,D,V]=svd(A,0); x=V*(D\(U'*y)); 46.4s 特異値分解 x=pinv(A)*y; 51.9s 疑似逆行列 (n=1000, m=5000, Pentium 4 3.2GHz, Matlab 6.5.1)

最小二乗の各種解法 (2) Aがランク落ちしていた場合の動作の違い (1) x=A\y;   → ランク落ち警告+ basic解 (2) x=inv(A'*A)*(A'*y)   → エラーまたは不正解 (3) x=pinv(A)*y;  →警告無し、ノルム最小解 基本的に(2)は使うべきでない。

大規模最小二乗問題 (1) パラメータ数>数1000 観測データ数>数100000 計画行列が実メモリ上に載り切らない 実用的なパラメータ推定問題ですぐ現れる → 計算は結構やっかい

大規模最小二乗問題 (2) 戦略1:逐次最小二乗に置き換え 戦略2 : カルマンフィルタに置き換え 戦略3 : スパース計画行列 + matlab + \ 戦略4 : 最小二乗演算ライブラリを使う

行列用組込関数 (1) 行列用演算 : diag(), norm(), rank(), det(), trace(), inv(), dot(), cross(), meshgrid()... (see help) 行列入力→行列出力関数 : sin(), cos(), tan(), sqrt(), exp(), log(), floor(), mod(), ... (ほとんどの初等関数、特殊関数) スカラ計算式→行列計算式

行列用組込関数 (2) 例1 : 例2 : 2次元メッシュ/3Dグラフ生成 [x,y]=meshgrid(0:0.1:20,0:0.1:20); surf(x,y,sin(x)+cos(y))

行列演算高速化 (1) 行列サイズの事前割当 →サイズ自動拡張をなるべく使わない 行列のまま計算、find()の利用 →forループをなるべく使わない find()の高速化 : インデックス操作の工夫 sort(), sortrows(); unique(), intersect()

行列演算高速化 (2) 例1 : 100万回ループ x=0:0.1:100000; y=zeros(1000000,1); y=sin(x);→0.4秒 for i=1:length(x), y(i)=sin(x(i)); end;→3秒 例2 : 100万回ループ x=zeros(1000000,1); for i=1:length(x), x(i)=i; end→1.4秒 x=[]; for i=1:1000000, x=[x;i]; end>1000秒