情報科学科2年生応用線形代数 のためのMATLAB 入門

Slides:



Advertisements
Similar presentations
シミュレーション演習 G. 総合演習 ( Mathematica 演 習) システム創成情報工学科 テキスト作成: 藤尾 光彦 講義担当: 尾下 真樹.
Advertisements

Absolute Orientation. Absolute Orientation の問題 二つの座標系の間における剛体 (rigid body) 変換を復元す る問題である。 例えば: 2 台のステレオカメラから得られた3次元情報の間の関 係を推定する問題。 2 台のステレオカメラから得られた3次元情報の間の関.
大規模な三角 Toeplitz 線形方 程式の高速解法とその応用 ○ 安村 修一(法政大学 4 年) 李 磊(法政大学) 日本応用数理学会「行列・固有値の解法とその応用」研究部会 第6回研究会.
1 線形代数学. 2 履修にあたって 電子情報システム学科 必修 2005 年度1セメスタ開講 担当 草苅良至 (電子情報システム学科) 教官室: G I 511 内線: 2095 質問等は上記のいずれかに行なうこと。 注意計算用のノートを準備すること。
データ解析
コンピュータプログラミングIII ベクトルと行列の演算
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
A Q R QR分解とは? → × ◆QR分解 QTQ = I (単位行列) ◆応用例 ◆主な計算方法 n m 今回はこの方法に注目
JavaScript プログラミング入門 2006/11/10 神津.
Fortran と有限差分法の 入門の入門の…
第8章 ベクトル・行列の基礎 Rによるベクトル・行列の表現と計算法.
MATLAB測位プログラミングの 基礎とGT (3)
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング言語としてのR 情報知能学科 白井 英俊.
4.3 連立1次方程式   Ax = b   (23) と書くことができる。
「R入門」 第1章: 紹介と準備 (思い切って簡単に) 第2章: 簡単な操作 10月10日(金) 発表者 新納浩幸.
数値計算及び実習 第3回 プログラミングの基礎(1).
プログラミング論 I 行列の演算
AllReduce アルゴリズムによる QR 分解の精度について
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
IT入門B2 ー 連立一次方程式 ー.
Mathematica入門 数学を数式処理システムで 上智大学理工学部 大槻東巳 TA: 吉本行気,清水元気 2012年6月.
線形代数学 4.行列式 吉村 裕一.
情報基礎実習I (第1回) 木曜4・5限 担当:北川 晃.
高校数学の知識から、 人工知能・機械学習・データ解析へ つなげる、 必要最低限の教科書
3次元での回転表示について.
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
スペクトル法の一部の基礎の初歩への はじめの一歩
プログラミング演習I 行列計算と線形方程式の求解
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
確率伝搬法と量子系の平均場理論 田中和之 東北大学大学院情報科学研究科
コンピュータに計算させる命令を確かめよう!
平成30年度高知工科大学教職科目 微分方程式特論I 11 高知大学教育学部技術教育コース 北川 晃.
「R入門」  5.7 行列に対する諸機能  10月23日 (木) 発表者 大城亜里沙.
3次元での回転表示について.
知能システム論I(13) 行列の演算と応用(Matrix) 2008.7.8.
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
パターン認識特論 担当:和田 俊和 部屋 A513 主成分分析
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
資料 線型変換のイメージ 固有値、固有ベクトル 平賀譲(209研究室) 資料
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
4. システムの安定性.
2007/6/12(通信コース)2007/6/13(情報コース) 住井
統計ソフトウエアRの基礎.
表計算ソフトウェアの活用① [基本的な関数]
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
ガイダンス 電子計算機 電気工学科 山本昌志 1E
福井大学大学院工学研究科機械工学専攻 川谷 亮治
~sumii/class/proenb2010/ml2/
メモリ使用量の少ないGCR法の提案 東京大学理学部情報科学科 工藤 誠 東京大学情報基盤センター 黒田 久泰
目で見る一次変換 河合塾 数学科 生越茂樹 オゴセ シゲキ.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
確率論・数値解析及び演習 (第7章) 補足資料
2006/6/27(通信コース)2006/7/5(情報コース) 住井
精密工学科プログラミング基礎 第7回資料 (11/27実施)
2008/7/16(情報コース)2008/7/22(通信コース) 住井
行列 一次変換,とくに直交変換.
ca-9. 数の扱い (コンピュータアーキテクチャとプロセッサ)
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
目次 はじめに 収束性理論解析 数値実験 まとめ 特異値計算のための dqds 法 シフトによる収束の加速
エクセル(3)の目次 参照演算子と演算子 参照セルの表示法 セルの参照方法 エラーについて シグマ(Σ)関数 条件付書式 問題(1)
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
2008年 7月17日 応用数理工学特論 期末発表 鈴木綾華,程飛
Presentation transcript:

情報科学科2年生応用線形代数 のためのMATLAB 入門 2005年4月 情報科学科,数理・計算科学専攻 小島政和

目次 1. 概要 2. Command Window 3. 数値と演算記号,help 4. ベクトルと行列 5. 線形方程式系 6. 固有値と固有ベクトル 7. Graphics 8. Toolbox等 9. Programming の際の注意

1. 概要 MATLAB は超高級電卓 ままざまなグラフが描ける MATLAB はプログラミング言語 特に,行列の和,逆行列等の線形代数演算を装備 ままざまなグラフが描ける MATLAB はプログラミング言語 プログラミングが”超簡単” --- ベクトル,行列を含むアルゴリズムの記述に適している. C, JAVA等に比べて(繰り返し・反復演算の)処理速度は遅い. ただし,プログラミングについては述べない.下記の HP 参照.

ここで述べるのはMATLABのごく一部の機能. 数理科学,工学の研究に極めて強力な道具. http://www.math.siu.edu/matlab/tutorials.html

2. Command Window MATLAB を起動するには,画面下のdock にあるMATLABのアイコンを マウスの左ボタンでクリックすればよい. 起動するとcommand windowでさまざまなcommand(命令)が実行可能. “>>”の後にcommandを記述. Help から様々な情報が得られる.

変数を使うことができる. 変数名は英字で始まり,英字、数字,_からなる31文字以内.ローマ字の大文字と小文字は区別される.文字はすべて半角文字. MATLABの終了は >> exit

>> s = 1 + 2 s = 3 >> fun = sin(pi/4) fun = 0.7071 >> s + fun ans = 3.7071

>> format long >> fun fun = 0.70710678118655 >> format short 0.7071

3. 数値と演算記号, help 整数,実数,複素数が使用可能 小文字 i が虚数単位. % の後はコメントで無視される. >> fun = sin(pi/4) % =1/sqrt(2), pi=3.14… fun = 0.7071

>> xint = 10 xint = 10 >> xreal = 10.01 xreal = 10.0100 >> xcomplex = i + xreal xcomplex = 10.0100 + 1.0000i

>> realmin, realmax ans = 2.2251e-308 1.7977e+308

演算記号 加算:+ 減算: - 乗算: * 除算: / または \ すべて半角文字(ここでは,印字の都合上*と\ 除算: / または \ すべて半角文字(ここでは,印字の都合上*と\  は全角を使っていることに注意!) >> a = (2/3+1)*4 a = 6.6667

>> ld = 2\3; rd = 2/3 ld = 1.5000 rd = 0.6667 (\, / はベクトル,行列の演算に拡張される.後述) べき乗 >> a = 2.5^3 a = 15.6250

help >> help inv INV Matrix inverse. INV(X) is the inverse of the square matrix X. A warning message is printed if X is badly scaled or nearly singular. See also SLASH, PINV, COND, CONDEST, LSQNONNEG, LSCOV. Overloaded methods help sym/inv.m

Command が2行以上にまたがるときは,… で行の最後をつなぐ. >> x = sin(1) - sin(2) + sin(3) - sin(4) … + sin(5) - sin(6) + sin(7) - sin(8) … + sin(9) - sin(10) x = 0.7744

結果をprintしないときのcommand末は ; >> u = 2 + 3, v=u+6; v+1 % v=11 u = 5 ans = 12

4. ベクトルと行列 横(行)ベクトル >> a = [1 2 3] % or,a=[1, 2, 3] a = 1 2 3

縦(列)ベクトル >> b = [1;1;2] b = 1 2

内積,転置; a=[1 2 3], b=[1; 1; 2] >> b.’*b, a*b % b’ = bの複素共役転置 ans = 6 9

要素ごとの積 >> a.*a ans = 1 4 9 要素ごとのべき乗 >> a.^2

ベクトルの長さ;a=[1 2 3], b=[1; 1; 2] >> length(a), length(b) ans = 3

Euclid norm >> a = [1 2 3]; normOFa = norm(a) normOFa = 3.7417 >> sqrt(a*a.’) ans = >> unitVector = a / normOFa unitVector = 0.2673 0.5345 0.8018

行列 行列のサイズ >> size(A) >> A = [1 2 4;5 7 8] A = 1 2 4 5 7 8 ans = 2 3

行列式 >> A = [1 2; 3 4]; det(A) %=1*4 - 2*3 ans = -2 >> det(A.’) %=det(A)

特殊な行列 >> n=4; N = -2:n N = -2 1 0 1 2 3 4 >> zeroVector=zeros(1,n) zeroVector = 0 0 0 0

>> vectorOfOnes=ones(1,5) 1 1 1 1 1 >> matrixOfOnes=ones(3,4) 1 1 1 1

単位行列 >> idMatrix=eye(3,3) idMatrix = 1 0 0 0 1 0 0 0 1 部分行列( : はすべての行または列を表す) >> D=idMatrix([3 1],:) % idMatrixの3,1行 D =

行列の演算 >> A=[1 2; 3 4]; B=ones(2,2); C=A*B+3*B C = 6 6 10 10 6 6 10 10 >> D1=C*[2;3], D2=[2, 1]*A D1 = 30 50 D2 = 5 8

要素ごとのかけ算,割り算,べき乗 >> A=[1 2; 3 4];B=2*ones(2,2);C=A.*B C = 2 4 6 8 >> A2=C./B, C2=C.^B A2 = 1 2 3 4 C2 = 4 16 36 64

対角行列 >> d=[1 3 5]; D=diag(b) D = 1 0 0 0 3 0 0 0 5 >> d1 = diag(D) d1 = 1 3 5

5. 線形方程式系: A x = b >> A=[3 1; 2 4]; b=[8; 3]; x=A\b x = 2.9000 -0.7000 >> r=b-A*x r = 1.0e-15* 0.8882 -0.4441

LU分解(A=LU, L:下3角,U:上3角) >> A=[3 1; 2 4]; [L, U] =lu(A) L = 1.0000 0 0.6667 1.0000 U = 3.0000 1.0000 0 3.3333 >> B=L*U B = 3 1 2 4

逆行列 >> A = [3 1; 2 5]; B = inv(A) B = 0.3846 -0.0769 -0.1538 0.2308 >> C = A*B C = 1.0000 0 -0.0000 1.0000

行列の基本変形 >> A = [3 1;2 5]; C=[A eye(2,2) [1; 2]] C = 3 1 1 0 1 2 5 0 1 2 >> [F pivot] = rref(C) F = 1.0000 0 0.3846 -0.0769 0.2308 0 1.0000 -0.1538 0.2308 0.3077 pivot = 1 2 >> F(:,[3 4]))*C ans = 1.0000 0 0.3846 -0.0769 0.2308

>> A = [2 1;2 1]; C=[A eye(2,2) [1; 2]] 2 1 0 1 2 >> [F pivot] = rref(C) F = 1.0000 0.5000 0 0.5000 1.0000 0 0 1.0000 -1.0000 -1.0000 pivot = 1 3 >> F(:,[3 4]))*C ans = 1.0000 0.5000 0 0.5000 1.0000

6. 固有値と固有ベクトル >> A = [2 1;1 2]; >> [P, D] = eig(A) -0.7071 0.7071 D = 1 0 0 3 (D の対角が固有値, Pの列が固有ベクトル)

>> lambda_1 = D(1,1); %固有値 >> p_1 = P(:,1); %固有ベクトル >> Ap_1 = A*p_1, lambda_1 *p_1 Ap_1 = 0.7071 -0.7071 ans = 0.7071 >> norm(A*P(:,2) - D(2,2)*P(:,2)) ans = 0.0000

>> P.’ * P ans = 1.0000 -0.0000 -0.0000 1.0000 (A:対称行列 ===>固有値は実数,Pは直交行列) >> P.’ * A * P % = D 0.0000 3.0000 (Aの対角化)

7. Graphics さまざまな2次元graphics, 3次元graphicsのための関数が準備されている. 計算実験の可視化等に非常に有用. ここでは,簡単な例をあげる.

>> x=0.01*[-100:100]; plot(x,x.^3)

3次元Graphics z = x*y^2, 0 <= x, y <=1. >> x=0.01*[0:100]; y=x; z=x.’*y.^2; >> surf(x,y,z)

8. Toolbox等 Optimization Toolbox --- 線形計画問題等の解法を含む. Symbolic Math Toolbox --- 多項式の演算等をサポート. その他のToolbox(有料). 以下参照. http://www.cybernet.co.jp/matlab/ MATLAB で既述された free software が多くある.

9. Programming の際の注意 有用な関数が多数ある.ほとんどの関数は行列を変数としている. C, Java を知っていれば容易に programming できる. 多種,多様な関数が用意されているので,それらを有効利用するとよい. 有用な関数が多数ある.ほとんどの関数は行列を変数としている. chol, rand, sort, max, min, sum, … 疎なベクトル,行列を簡単に扱える.

最初は速度を気にせずに分かりやすい program を組むこと. 高速化するには,MATLAB の組み込み関数を駆使して,繰り返し計算・反復計算を減らすこと.10~100倍程度速くなることが頻繁に起きる. ただし,そのような工夫はかなり技巧的,かつ,職人芸的.