matlab_basic.pptx

Similar documents
2 MATLABについて n MATLABとは 科 学 技 術 計 算 のための 高 性 能 プログラミング 言 語 n 特 徴 配 列 が 基 本 データ 型 ベクトル(1 次 元 配 列 ) 行 列 (2 次 元 配 列 ) 対 話 的 システム 豊 富 な 関 数 ライブラリとグラフィックツー

1_matlab_basic

Microsoft PowerPoint - MATLABの使い方.ppt

Microsoft Word - 18環設演付録0508.doc

Microsoft Word - scilab_intro.doc

cp-7. 配列

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

演習1

1.3 ヘルプの参照関数やコマンドの使い方, 各種機能の使用方法等について情報が欲しいときには, オンラインヘルプ機能を使う ( 最も正確な情報が得られる ). 調べたい情報の内容によって, 下記の方法がある. ブラウザを開き MATLAB のオンラインドキュメントを表示する

JavaプログラミングⅠ

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft Word - VBA基礎(3).docx

Taro-Basicの基礎・条件分岐(公

ポインタ変数

数値計算

PowerPoint Presentation

2 1 Octave Octave Window M m.m Octave Window 1.2 octave:1> a = 1 a = 1 octave:2> b = 1.23 b = octave:3> c = 3; ; % octave:4> x = pi x =

Microsoft Word - VBA基礎(6).docx

Scilab 勉強会 ( 第 3 回 ) 高橋一馬, 十文字俊裕, 柏倉守 平成 17 年 11 月 15 日 関数 ファイルはエディタを用いて作成する.Scilab にはエディタ SciPad が附属している.SciPad では なく他のエディタを利用してもよい. 作成した関数は Scilab に

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

ゲームエンジンの構成要素

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

Microsoft Word - no11.docx

Si 知識情報処理

kiso2-09.key

PowerPoint Presentation

ポインタ変数

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

PowerPoint プレゼンテーション

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

プログラミングA

sinfI2005_VBA.doc

Microsoft PowerPoint - program.ppt [互換モード]

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

プレポスト【解説】

「統 計 数 学 3」

プログラミングA

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

プログラミング実習I

Microsoft Word - Matlab_R_MLE.docx

PowerPoint プレゼンテーション - 物理学情報処理演習

Microsoft Word - no103.docx

Microsoft PowerPoint - MATLAB喥錕ㇻã…�ã…−ã…¼.pptx

プログラミング基礎

Microsoft Word - DF-Salford解説09.doc

Microsoft Word - 3new.doc

認識行動システム論

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

第4回

Microsoft PowerPoint - ca ppt [互換モード]

Contents 1 Scilab

memo

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

C#の基本2 ~プログラムの制御構造~

Microsoft PowerPoint - Prog05.ppt

ガイダンス

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog03.ppt

memo

Microsoft PowerPoint - C1(演算と変数).ppt

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

行列、ベクトル

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

情報処理Ⅰ

gengo1-8

Microsoft PowerPoint - CproNt02.ppt [互換モード]

実験指導書

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Javaによるアルゴリズムとデータ構造

情報処理概論(第二日目)

kiso2-06.key

スライド 1

スライド 1

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft PowerPoint - qcomp.ppt [互換モード]

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Microsoft PowerPoint - it2_octave_text1.ppt

Microsoft Word - Training10_プリプロセッサ.docx

PowerPoint プレゼンテーション

Microsoft PowerPoint - MATLAB.TUS.ppt

Microsoft PowerPoint - 10.pptx

講習No.12

計算機プログラミング

メソッドのまとめ

スライド 1

memo

kantan_C_1_iro3.indd

Microsoft Word - ClassicalControl_Matlab.doc

Microsoft PowerPoint - prog03.ppt

物質工学科 田中晋

Microsoft PowerPoint - 第3回目.ppt [互換モード]

PowerPoint プレゼンテーション

Java講座

情報処理Ⅰ演習

Microsoft Word - Cプログラミング演習(3)

Transcription:

MATLAB の基本的な使い方 担当 : 高安亮紀

2 MATLAB について n MATLAB とは 科学技術計算のための高性能プログラミング言語 n 特徴 配列が基本データ型 ベクトル (1 次元配列 ) 行列 (2 次元配列 ) 対話的システム 豊富な関数ライブラリとグラフィックツール 同様の機能を持ったフリーソフトの Scilab Octave がある n 使用される主な分野 数値計算 シミュレーション 信号処理 グラフィックス等

3 MATLAB の基本的な使い方 1 u コマンドウィンドウにプログラムを打ち込み リターン >> a=1, b=2, c=a+b a = 1. b = 2. c = 3. u 行末に 3 つのピリオドを入力すると改行可能 >> a=1+2+3... +4+5 a = 15

4 MATLAB の基本的な使い方 2 u M-file にプログラムを保存して実行 ( コンパイルやリンクは必要ない ) >> edit filename とコマンドウィンドウに入力すると エディタが立ち上がる 例 ) >> edit test1.m test1.m ( エディタで下記を入力後 保存 ) function c = test1(a,b) c = a + b コマンドウィンドウで関数を実行する >> test1(a,b) 3.

5 MATLAB 記述ルール u コメントなど n % コメントを表す (% 以降が行末までコメントになる ) n ; 結果の非表示 式の終わりにセミコロン ; をつける例 ) >> a=1, b=3; n 大文字と小文字 MATLAB では C 言語と同様に大文字と小文字を区別する

6 ベクトル 行列の生成方法 列の区切り : 半角スペース ( またはカンマ ) 行の区切り : ; セミコロン >> x=[1; 2; 3] x = 1. 2. 3. >> A=[1 2 3; 4 5 6; 7 8 10] A = 1. 2. 3. 4. 5. 6. 7. 8. 10. 関数 linspace を使用して 初期値 最終値 要素数を指定し ベクトルを生成 >> linspace(1,9,5) 1. 3. 5. 7. 9.

7 配列要素の指定 Aのi 行 j 列の要素はA(i,j) と指定 A = 1. 2. 3. 4. 5. 6. 7. 8. 10. >> A(2,2) 5. A(m,:) で m 行の要素 A(:,n) で n 列の要素を指定 >> A(2,:) 4. 5. 6. >> A(:,1) 1. 4. 7.

8 行列の演算 注 2) Mac の場合 バックスラッシュは option+ 行列 A, B について 行列演算ができる >> A=[1 2 ;3 4] A = 1. 2. 3. 4. >> B=[5 6 ;7 8] B = 5. 6. 7. 8. 足し算 + >> A + B 6. 8. 10. 12. 引き算 - >> A - B - 4. - 4. - 4. - 4. 掛け算 * >> A * B 19. 22. 43. 50. 左除算 (inv(a) * B とほぼ同じ ) >> A B -3. -4. 4. 5. 右除算 / (A * inv(b) とほぼ同じ ) >> A / B 3. - 2. 2. - 1. 注 ) マークは Windows 以外ではバックスラッシュ \ で表示される A のべき乗 ^ >> A^2 7. 10. 15. 22. 共役転置 ' >> A' 1. 3. 2. 4. 演算子の前にピリオドを付けると要素ごとの演算になるものが多い A.* B など試してみよう

9 比較演算子 論理演算子 条件式を作成する際に用いる オペランド ( 演算対象 ) が行列の場合 演算は要素ごとに適用され 結果も行列となる 種類記号意味 比較演算子 論理演算子 > < >= <= == より大きい より小さい 以上 以下 等しい ~= 等しくない ( 最初の記号はチルダ ) && かつ または (shift + キーを 2 回入力 )

10 関数とは? n MATLAB では 色々な関数が使える l 組み込み関数 ( 元から用意されている関数 ) u sin(x), log(x) など l ユーザー関数 ( 自分で作成する関数 ) l インライン関数 n 関数の使い方 >> x = 1.0; y = sin(x) >> [y1,y2,...] = func(x1,x2,...) x の値が入力されて y に結果が出力される つまり sin(1.0) の値が y に代入される

11 ユーザー関数の作成方法 1. エディタを開く >> edit test2 2. 関数の内容を自分で書く ( 次ページで説明 ) function [x,y] = test2(a,b,c) x = a + b; y = a c; 注 ) コマンドウィンドウで使った変数をそのまま関数の中で使うことはできません ( 同じ名前の変数にしても 別々のものになる ) 3. 保存する ( ファイル名は test2.m のようにする ) 4. コマンドウィンドウで関数を使ってみる >> a = 5; b = 2; c = 1; [r,s] = test2(a,b,c) 補足 ) ユーザー関数の中から 組み込み関数や他のユーザー関数を呼び出すこともできます

12 ユーザー関数の内容 function は関数の作成時に必要な宣言 2 行目以降に内容を書く function [x,y] = test2(a,b,c) x = a + b; y = a c; 関数名 : test2 ( ファイル名と一致させる ) 出力する変数 ( 出力引数と言う ) も好きなだけ増やせる ただし 関数の中で値が定まる必要がある 入力する変数 ( 入力引数と言う ) は好きなだけ増やせる 注 ) 引数は ひきすう と読みます

13 練習問題 : 簡単な関数を作成する u a と b を入力したら a + b, a b, a b, a / b の結果をすべて出力する関数 test3 を作成してみよう

14 初等関数の使い方 MATLAB では 多数の組み込み関数が使用できる ベクトルや行列の入力にも対応するものが多い >> x=[1 2] x = 1. 2. 正弦 >> sin(x) 0.8414710 0.9092974 余弦 >> cos(x) 0.5403023-0.4161468 正接 >> tan(x) 1.5574077-2.1850399 対数関数 >> log(x) 0. 0.6931472 指数関数 >> exp(x) 2.7182818 7.3890561

15 行列演算に関する関数の使い方 様々な行列演算 A = 1. 2. 3. 4. 逆行列 >> R=inv(A) R = - 2. 1. 1.5-0.5 m 行 n 列で要素がすべて1の行列 >> d=ones(2,3) d = 1. 1. 1. 1. 1. 1. m 行 n 列で要素がすべて 0 の行列 >> d=zeros(2,1) d = 0. 0. m 行 n 列の単位行列 >> E=eye(2) E = 1. 0. 0. 1.

16 2 次元グラフィックス (1) plot で 2 次元のグラフを表示 グラフは Figure1 というウィンドウに表示される plot の度に上書きされる >> x=linspace(0,2*pi,100); >> plot(x,sin(x)); >> plot(x,cos(x)); Figure1 を Save as で保存 ( 別名で保存 ) jpg 形式などで保存することが可能

17 2 次元グラフィックス (2) ezplot で 関数のグラフを表示 グラフは Figure1 というウィンドウに表示される hold on で重ねてグラフを表示可能 (hold off で解除 ) >> ezplot('sin(x)',[0,3]) >> hold on >> ezplot('sin(x)',[0,6.28]) >> ezplot('cos(x)',[0,6.28])

18 3 次元グラフィックス (1) t の範囲を meshgrid 関数で xy 座標に変換 描画したい関数 z=sin(x)+cos(y/2) を計算し mesh 関数で 3 次元グラフィックスを表示 ( グラフの保存方法は 2 次元と同様 ) >> t=linspace(0,10,40); >> [x,y]=meshgrid(t,t); >> z=sin(x)+cos(y/2); >> mesh(x,y,z); 2 1.5 1 0.5 0 0.5 1 1.5 2 10 8 6 4 2 0 0 2 4 6 8 10

19 3 次元グラフィックス (2) ezplot3 関数で簡単な 3 次元グラフィックスを描画可能 ezplot3(x,y,z,[min,max]) は 領域 min < t < max で 曲線 x = x(t), y = y(t),z = z(t) をプロットします ( デフォルトの領域 0 < t < 2π) >> ezplot3('sin(t)','cos(t)','t )

20 参考 関数一覧 : 行列生成関数 関数名 説明 zeros ones eye diag magic rand randn 要素がすべてゼロの行列を作成 要素がすべて 1 の行列を作成 単位行列を作成 入力がベクトルの場合は対角行列を作成入力が行列の場合は 対角要素を抽出 1 から n^2 までの整数を使用して 行方向と列方向の和が等しくなる n 行 n 列の行列を作成 A = rand(n) は 開区間 (0,1) 上の標準一様分布から導き出される疑似乱数値を含む n 行 n 列の行列を作成 A = randn(n) は 標準正規分布から導き出される疑似乱数値を含む n 行 n 列の行列を作成 linspace y = linspace(a,b) は a と b. の間で 線形に等間隔な 100 点の行ベクトル y を作成 y = linspace(a,b,n) は a と b の間で 線形に等間隔な n 点の行ベクトル y を作成

21 参考 関数一覧 : 行列関数 関数名 (mldivide) 説明 X = A B で 行列方程式 AX = B を X について解く X = inv(a) * B とほぼ同じ ( マークは Windows 以外ではバックスラッシュ \ で表示される ) / (mrdivide) X = A / B で 行列方程式 XB = A を X について解く X = A * inv(b) とほぼ同じ det 行列式を計算 rank lu qr eig 行列のランクの計算 [L,U,P] = lu(a) は P*A = L*U となる下三角行列 L 上三角行列 U 置換行列 P を計算 [Q,R] = qr(a) は A が m 行 n 列とすると A = Q*R となるような m 行 n 列の上三角行列 R と m 行 m 列の直交行列 ( 複素の場合はユニタリ行列 ) Q を計算 d = eig(a) は 行列 A のすべての固有値を計算 [X,D] = eig(a) は 固有ベクトルを並べた行列 X と固有値を並べた対角行列 D を計算

22 参考 関数一覧 : 初等関数など 関数名 sin 正弦 exp 指数関数 ( 自然対数の底 eのべき乗 ) log10 対数 ( 底が10) logは自然対数 sqrt 平方根 round 要素を最も近い整数に丸める 説明 min 最小値 A がベクトルの場合 min(a) は A の最小要素を返す A が行列の場合 min(a) は A の列をベクトルとして取り扱い 各列の最小要素を含む行ベクトルを返す max mean std sum 最大値 A がベクトルの場合 max(a) は A の最大要素を返す A が行列の場合 max(a) は A の列をベクトルとして取り扱い 各列の最大要素を含む行ベクトルを返す 平均値 A がベクトルの場合 mean(a) は A の平均値を返す A が行列の場合 mean(a) は A の列をベクトルとして取り扱い 平均値からなる行ベクトルを返す 標準偏差 s = std(x) は X がベクトルのとき 上記の (1) を使用して標準偏差を計算 X が行列の場合 std(x) は X の各列の要素の標準偏差を含む行ベクトルを返す 総和 A がベクトルの場合 sum(a) は要素の和を計算 A が行列の場合 sum(a) は A の列をベクトルとして扱い 各列の和を行ベクトルとして返す

23 プログラミング MATLAB でプログラミングを行う方法を説明する 前述した組み込み関数や演算も組み合わせ プログラム (M ファイル ) を簡単に作成することができる スクリプトによるプログラミング MATLAB の命令を並べておくだけでプログラムを作る方法 実行するときは コマンドウィンドウに ファイル名を入力する 関数を定義することによるプログラミング新しい関数を定義することによって 組み込み関数と同様に使用することができる 注 ) 関数名とファイル名は一致させる必要がある たとえば 関数名が func1 なら ファイル名は func1.m のようにする

24 プログラミング例 例 1) 連立一次方程式 Ax=b の解を求めるスクリプト >> edit linear1.m A=[3 2 7; 1 6 3; 1 0 6]; b=[3 ;-2 ;1]; x=a b Mac の場合は option+ コマンドウィンドウで実行 >> linear1 x = 1.6000-0.5500-0.1000 例 2) ベクトル x の平均値を求める関数 >> edit mean1.m function y = mean1(x) n = length(x); y = sum(x)/n; コマンドウィンドウで実行 >> x=[1 4 7 10] x = 1 4 7 10 >> mean1(x) 5.5000

25 制御 ( 繰り返し 条件分岐 ) プログラムをする際に重要となる制御文 制御文機能使用例 for 指定回数の繰り返し for ループ変数 = ループの範囲命令 end while 不定回数の繰り返し while 終了条件命令 end if, elseif, else 条件実行 if 条件式命令 end switch, case 条件式に基づき case 文で実行を切り替え switch 変数 case 条件命令 otherwise 命令 end

26 for 文 for 文は繰り返す回数 範囲等繰り返しの設定をします 典型的な形式 (1) X を Y から Z まで 1 ずつ増加させながら処理を繰り返す for X=Y:Z ( 処理 ) end ( 例 ) i を 1 から 10 まで 1 ずつ増加させながら i の表示を繰り返す for i=1:10 disp(i); % disp(x) は変数 x を画面に表示する関数 end 典型的な形式 (2) XをYからZまでWずつ増加させながら処理を繰り返す for X=Y:W:Z ( 例 ) ( 処理 ) for i=1:2:10 (1から10まで2 刻みで増加させ 10を超えない end 間は繰り返す ) for i=10:-1:1 (10から1まで-1 刻みで減少させ,1になるまで繰り返す )

27 for 文 同じような操作を繰り返すときに使う for1.m for i=1:n disp(i); end for2.m for i=n:-1:1 disp(i); end 実行例 >> n = 10; >> for1 ベクトルの総和の計算 sum1.m function s = sum1(a) n = length(a); s = 0; for i=1:n s = s + a(i); end >> n = 10; >> for2 >> x = [1 4 5 2 7]; >> t = sum1(x)

28 for 文の練習問題 1. n を設定したとき コマンドウィンドウに 1 から n までを 1 つおきに表示するスクリプト for3.m を作成しよう 実行例 >> n=7; >> for3 1 3 5 7 2. 1 のスクリプトをもとに n を入力とする関数 for4 を作成しよう 3. ベクトルの内積を計算する関数 dot1 を作成して 正しく動くか試してみよう

29 while 文 while 文は 継続条件を指定し 不定回数の繰り返しを行います ( 例 )eps1.m (1.0 からつぎに大きい浮動小数点数までの距離を確かめるスクリプト ) Eps = 1; while 1+Eps > 1 Eps = Eps/2; end Eps が 1 より大きい間は Eps/2 を処理し続ける Eps = Eps*2 実行結果 >> eps1 Eps = 2.2204e-16

30 if 文 条件式は 変数と演算子の組み合わせとして表現されます ( 演算子は p.9 参照 ) ( 例 ) もし変数 x が 10 以上の時 k の値を 1 増加させる if x >= 10 k = k + 1; end if 文をさらに細かく制御したい場合 else や elseif を使用する もし条件 1 が真であれば 命令 1 を実行 条件 1 が偽であれば 条件 2 を見て 真であれば 命令 2 を実行 さらに条件 2 も偽であれば 命令 3 を実行 if 条件 1 命令 1 elseif 条件 2 命令 2 else 命令 3 end

31 if 文 こちらはエディタで打ち込む こちらはコマンドウィンドウで打ち込む if1.m ( スクリプトの例 ) if a > 4 disp(b); end if2.m ( 関数の例 ) function c = if2(a,b) if a > b c = a + b; else c = a - b; end 実行例 >> a = 3; b = 5; >> if1 実行例 >> a = 3; b = 5; >> c = if2(a,b)

32 switch 文 式に基づき case 間で実行を切り替えます ( 例 )evenodd.m 偶数と奇数を確かめる関数 function evenodd(n) switch mod(n,2) case 0 disp( even number'); case 1 disp( odd number'); otherwise disp( error'); end 除算の剰余 mod(x,y) は x mod y を出力します 2 で割った剰余が 0 の時 even( 偶数 ) 剰余が 1 の時 odd( 奇数 ) それ以外はエラーとする

33 インライン関数 (1) MATLAB ではインライン関数を自分で定義できる たとえば f(x) = e x sin(10x) を定義する場合は >> f=inline('exp(-x)*sin(10*x) ) のようにすれば良い このとき f(3) は >> f(3) -0.0492 のように計算できる

34 インライン関数 (2) インライン関数のベクトル化 前ページの f(x) では 入力 x がベクトルのときにエラーになってしまう そこで f(x) の定義を下記のように少しだけ変更する (* の前にピリオドを付ける ) >> f=inline('exp(-x).*sin(10*x)') このようにすると 入力 x がベクトルであっても対応できる >> x=[1 2 3]; >> f(x) -0.2001 0.1236-0.0492 最後に f(x) のグラフ ( 定義域は [0,7] とする ) を描いてみよう >> x=0:0.01:7; >> plot(x,f(x))

35 参考文献 1. 大石進一 : MATLAB による数値計算, 培風館. 2. 櫻井鉄也 : MATLAB/Scilab で理解する数値計算, 東京大学出版会.