MATLAB測位プログラミングの 基礎とGT (1) 東京海洋大学産学官連携研究員 高須 知二
内容 主にMATLABで書かれた測位解析プログラムGT(GpsTools)を例題にして、MATLABプログラミングの基礎及び測位計算への応用について解説する。 GTの応用についても簡単な例を基に解説する。
目的 MATLABを有用な研究開発ツールとして使いこなすことにより 最小限の手間で最大限の研究成果を出す。 本当にやりたい研究内容に早くたどり着く 退屈で(無駄な)プログラミング作業を減らす 最小限の手間で最大限の研究成果を出す。
予定 (1) 4月 MatlabとGTの紹介 5月 Matlabプログラミング基礎 6月 Matlab行列演算プログラミング 7月 Matlab 2D/3Dグラフィックス 8月 Matlabプログラム開発・デバッグ手法 9月 Matlab性能向上とMEX他言語I/F
内容 (2) 10月 GTの仕様と測位アルゴリズム 11月 GTの内部構造と実装 12月 GTライブラリ・ツールの応用 3月 まとめと今後の課題
MATLAB (1) MATrix LABoratory Mathworks社 (米) 数値解析ソフトウェア 科学技術計算、信号処理、データ解析、シミュレーション、可視化(Visualization)... Toolbox、Simlink etc 類似処理系: Octave,Scilab,...
MATLAB (2) プログラム言語としての特徴 Cに似た制御構文 (if, while, for, switch...) インタプリタ型言語 弱い型付 行列計算に特化した構文規則 m-file単位でのプログラム管理 バージョンアップで機能拡張 (互換性問題) (セル配列、構造体、オブジェクト指向、etc ...)
MATLAB (3) 数値解析システムとしての特徴 数値解析ライブラリ 線形代数、特殊関数、統計解析、信号処理、積分、微分方程式、補間 etc... グラフィックスライブラリ 拡張ライブラリ集(Toolbox) デバッガ、プロファイラ、GUIツール コンパイラ
MATLAB (3) 長所 短所 プログラム開発効率 結果の可視化が容易 処理系が高価/プロプライエタリSW プログラム実行効率
MATLABの利用 研究開発 ○ 実製品 △ 最終目的物はプログラムそのものではない 仕様が曖昧、仕様がどんどん変わる 研究開発 ○ 最終目的物はプログラムそのものではない 仕様が曖昧、仕様がどんどん変わる 早く成果すなわち解析結果が出ればよい プロトタイプ開発 実製品 △ 最終目的物はプログラムそのもの 実行効率、低コスト、可搬性、品質保証
C vs MATLAB (1) 九九演算表を出力する : C : MATLAB : void kuku(void) { int i,j; for (i=1;i<=9;i++) { for (j=1;j<=9;j++) { printf("%2d ",i*j); if (j==9) printf("\n"); } MATLAB : function kuku (1:9)'*(1:9)
C vs MATLAB (2) 線形方程式(Y=AX)の解を求める : C+LAPACK : MATLAB : int solve(const double *A, const double *Y, int n, int m, double *X) { int info,*ipiv=(int *)malloc(sizeof(int)*n); double *B=(double *)malloc(sizeof(double)*n*n); memcpy(B,A,sizeof(double)*n*n); memcpy(X,Y,sizeof(double)*n*m); dgetrf_(&n,&n,B,&n,ipiv,&info); if (!info) dgetrs_("N",&n,&m,B,&n,ipiv,X,&n,&info); free(B); free(ipiv); return info; } MATLAB : function X=solve(A,Y) X=A\Y;
GT (1) MATLABをベースに書かれた測位解析プログラム 最新: ver.0.6.3 (2006/7) ライバル: Bernese、GIPSY/OASIS-II 主な応用: 精密測位(PPP)、衛星軌道決定、対流圏遅延推定、etc ...
GT (2) プログラム規模: m-file 22.1K, C-MEX 5.9K (ver.0.6.1) プログラム開発戦略 (1) MATLABプログラム開発 (2) 性能ボトルネックの識別 (3) ライブラリのm-file→C-MEXへの書き換え (4) 解析エンジンの全Cプログラム化(未)
GT (3) MATLAB用共通ライブラリ: 入出力:RINEX , SP3, IONEX, PCV etc 測位演算 精密補正モデル 大気圏モデル 衛星運動モデル 座標系、時刻系変換 地図描画、特殊グラフ描画、GUI etc
GTライブラリ利用例 RINEX読み込み/単独測位計算/結果グラフ化 : td=caltomjd([2007,1,1]); t=0:30:86370; sats={}; for i=1:31,sats={sats{:},sprintf('GPS%02d',i)}; end [nav,inav]=readnav(td,t,sats,'0053'); [obs,iobs]=readobs(td,t,sats,'0053'); [tt,j]=unique(iobs(:,1)); j=[0,j']; for i=1:length(j)-1 k=j(i)+1:j(i+1); p=pointpos(td,tt(i),obs(k,3),iobs(k,2:3),nav,inav); pos(i,:)=eceftogeod(p); end figure, hold on, grid on, box on plot3(pos(:,1),pos(:,2),pos(:,3),'.');