47
MATLAB講習会 MATLAB講習会 1 ディジタル信号処理補講 20195714:40-16:10 阿部 正英 201951016:20-17:50 川又 政征

ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

MATLAB講習会

MATLAB講習会 1

ディジタル信号処理補講

2019年5月7日 14:40-16:10阿部 正英2019年5月10日16:20-17:50川又 政征

Page 2: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

内容0. ディジタル信号処理の単位認定の新しい試み

1. MATLAB とは?

2. MATLABの起動と終了

3. 電卓的な使い方(スカラー,ベクトル,行列,複素数の演算の基本)

4. プログラミングと実行

5. データの視覚化と印刷

6. 関連書籍とマニュアル

7. 参考ウェブページ

8. デモンストレーション

9. MATLABの入手方法

10. 参考: OctaveについてMATLAB講習会 2

Page 3: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ディジタル信号処理の単位認定の新しい試み

配点割合

* 定期試験 90 点* レポート提出(2回) 5+5 点* 「MATLAB入門」受講 5 点

(受講率に比例して 大5点を与える)

注: 高点は100点とする。

「MATLAB入門」はMATLAB Grader上の

対話型学習・演習システム

MATLAB講習会 3

Page 4: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

1.MATLABとは?

MATLAB = Matrix Laboratory

科学技術計算ための計算機言語

信号処理,画像処理,通信,制御,数値計算の

実質的世界標準

スカラー,ベクトル,行列,複素数に対して,

数式に似た簡潔な記述が可能

数値計算と視覚化のための豊富な関数を準備

MATLAB講習会 4

Page 5: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

MATLABはどれくらい簡単か?(1~10の和を求める場合)

C言語では#include <stdio.h>int sum(int num){

int sum = 0;int i;for(i = 0; i <= num; i++) {

sum = sum + i;}return sum;

}int main(void){

int result;int num;num = 10;result = sum(num);printf("%d¥n", result);return 0;

}

MATLABでは

N =10x = 1:Nresult = sum(x)

もっと簡単にすると

result = sum(1:10)

MATLAB講習会 5

Page 6: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

2.MATLABの起動・終了・基本動作

起動(計算機大演習室の場合):

MATLAB講習会 6

クリック

MATLAB R2019aを起動する

Page 7: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

終了 : MATLABのプロンプトに

exit または quitとタイプして、

enterキーを押す

>> exitまたは

>> quit

MATLAB講習会 7

Page 8: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

MATLAB講習会 8

デスクトップ環境

ワークスペース(定義された変数の一覧)

コマンドウィンドウ(主にここを使う)

Page 9: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

注意事項: 計算機大演習室のMATLABを利用してログアウトするとき,

すべてのMATLABのウィンドウを閉じてから, ログアウトすること

MATLAB講習会 9

Page 10: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

基本的動作: MATLABは対話型システムである(命令を一つずつ解釈・実行する)

1. プロンプト(>>)を表示する.

2. 命令(あるいはM-ファイル)を一つ読みこむ.

3. 命令を解釈し,実行する.

4. 1.にもどる.

MATLAB講習会 10

Page 11: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

3.コマンド入力(電卓的な使い方)

コマンドラインからの命令を一つずつ入力することで,計算やグラフの表示などの命令が実行される .

10+20/2-5×3 を計算したいとき

>> 10+20/2-5*3

と入力すると( はenterキー)

MATLAB講習会 11

ans =5

Page 12: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

代入

>> x = 2x =

2>> y = 3; %表示しないときに ; をつける

>> x + y ans =

5(注: %以下はMATLABの注釈であるため,実行

のためにタイプする必要はない.enterキー については,以後省略)

MATLAB講習会 12

Page 13: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

複素数

複素数も実数と同様に計算することができる.

虚数単位には i または j を用いる.

>> (3+1i)*(2-3i)ans =

9.0000 - 7.0000i>> x=1+2i; y=3+4i;>> z=x+yz =

4.0000 + 6.0000iMATLAB講習会 13

注意:

新のMATLABでは,入力時の虚数単位として「1i」を用いることになった.左の例では(3+1i)*(2-3i)と入力する.

Page 14: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ベクトル 変数の宣言をせずにベクトルを利用できる.

>> x = [1 3 5] % ベクトルxの定義

x =1 3 5

>> x(3) % xの3番目の要素

ans =5

>> size(x) % xのサイズ

ans =1 3

MATLAB講習会 14

Page 15: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ベクトルのインデックスについての注意

MATLABのベクトルのインデックスは

1から始まる.0から始まるのではない.

x(0), x(1), x(2), x(3), x(4), …

行列の場合も X(1,1) から始まる.

MATLAB講習会 15

Page 16: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

関数

>> sqrt(9) % 平方根

ans =3

>> sin(pi / 6) % 正弦関数,ただし pi は円周率

ans = 0.5000

>> log10(5) % 常用対数

ans = 0.6990

MATLAB講習会 16

Page 17: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ベクトルの演算>> x = [1 3 5]; % xへ代入>> y = [2 4 6]; % yへ代入>> x + y % 加算ans =

3 7 11 >> y - x % 減算ans =

1 1 1 >> x .* y % 要素ごとの乗算ans =

2 12 30 MATLAB講習会 17

Page 18: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ベクトルの演算

>> x ./ y % 要素毎の除算

ans =0.5000 0.7500 0.8333

>> sqrt(x) % 平方根

ans = 1.0000 1.7321 2.2361

MATLAB講習会 18

Page 19: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ベクトルの代入

>> x = 1 : 5 %初期値: 終値(ただし増分1)

x =1 2 3 4 5

>> y = 0 : 0.5 : 3; %初期値:増分: 終値

>> z = 10 : -2 : 5; % -2 は負の増分MATLAB講習会 19

Page 20: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

行列の代入

>> A = [7 8 9; 1 2 3; 4 5 6]A =

7 8 91 2 34 5 6

>> A(3,2) % Aの3行2列の要素

>> size(A) % Aのサイズ

MATLAB講習会 20

Page 21: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

行列の要素ごとの演算

>> A = [7 8 9;1 2 3;4 5 6]; % 代入

>> sqrt(A) % Aの各要素の平方根

ans =2.6458 2.8284 3.00001.0000 1.4142 1.73212.0000 2.2361 2.4495

MATLAB講習会 21

Page 22: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

行列の演算

A + B % 和A - B % 差A * B % 積A / B % AにBの逆行列をかける

A .* B % 要素ごとの積

A ./ B % 要素ごとの除算

A’ % 転置

inv(A) % Aの逆行列

MATLAB講習会 22

Page 23: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

特別な行列

ones(M,N) % 要素がすべて1のM x N行列

zeros(M,N) % 要素がすべて0のM x N行列

eye(M,M) % 単位行列I(アイ)の意味

A(m,:) % 第m行の行ベクトル

A(:,n) % 第n列の列ベクトル

MATLAB講習会 23

Page 24: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

関係演算子による要素の比較 関係演算子による実行結果は,0,1のロジカル

データとなる.つまり,要素が関係式を満たして

いれば1を,満たしてなければ0を出力する.

A == B % AとBは等しい

A ~= B % AとBは等しくない

A < B % AはBより小さい

A <= B % AはBより小さいか等しい

A > B % AはBより大きい

A >= B % AはBより大きいか等しいMATLAB講習会 24

Page 25: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

関係演算子による要素の比較

>> n = [-2 -1 0 1 2 3];>> delta = n == 0 % nの要素中から0に等しい

% 要素を検出してdeltaに代入

delta =0 0 1 0 0 0 % 検出結果

>> u0 = n >= 0 % nの要素から0以上の要素を% 検出してu0に代入

u0 =0 0 1 1 1 1 % 検出結果

MATLAB講習会 25

Page 26: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

文字列

変数とベクトル,行列に文字列も入れることができる.

>> x = 'Hello World'x =

'Hello World'>> A = ['Digital' 'Signal' 'Processing'];>> A(3)ans =

'g'>> A(5:7)ans =

'tal'MATLAB講習会 26

Page 27: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

help 名前が既知の関数などの説明がほしいときは help>> help sin

sin - ラジアン単位の引数の正弦

この MATLAB 関数 は、X 要素の正弦を返します。

Y = sin(X)参考 asin, asind, sind, sinhsin のリファレンス ページ

sin という名前のその他の関数

MATLAB講習会 27

Page 28: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

doc 名前が既知の関数の詳しい説明が知りたいとき

>> doc sin

MATLAB講習会 28

Page 29: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

lookfor 未知の名前の関数をさがしたいときには lookfor>> lookfor fourier(下記のようにfourierという文字に関連する関数名が表示される)

fft - Discrete Fourier transform.fft2 - Two-dimensional discrete Fourier Transform.fftn - N-dimensional discrete Fourier Transform.ifft - Inverse discrete Fourier transform.(以下省略)

関数の名前が分かったら help でさらに調べる>> help fft

MATLAB講習会 29

Page 30: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

4.プログラミングと実行

プログラミングのために,M-ファイルを用いる.

M-ファイルは,テキスト形式のファイル(拡張子は .m)である.コマンドや関数を実行したい順に記述する.MATLAB付属のエディタを使って作成する.

M-ファイルに,以下の2種類の形式がある. スクリプトM-ファイル: コマンド・関数をまとめて処理する.

ファンクションM-ファイル: 入力引数と出力引数を伴うユーザ定義の関数を作成する.入出力引数の関係を記述した function で始まる関数宣言の行が必要.

MATLAB講習会 30

Page 31: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

エディタの起動方法

新規のM-ファイルを作成

する場合はeditコマンドを

実行し,エディタを起動す

る.

>> edit 指定したM-ファイルをエ

ディタで開くためには,次

の書式で実行する.

>> edit filenameMATLAB講習会 31

コマンドウィンドウの上部が上のようなエディターのウィンドウとなる

Page 32: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

制御文

MATLABでは多くのプログラミング言語で使用される制

御文を使うことができる.

代表的な制御文

for 指定回数の繰り返しステートメント

while 不定回数の繰り返しステートメント

if , elseif, else 条件実行ステートメント

switch, case 式に基づき,case文で実行を切り替えMATLAB講習会 32

Page 33: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

スクリプトM-ファイル(****.mという拡張子のテキストファイル)

スクリプトM-ファイルを使うことで,一連のコマン

ド・関数をまとめて処理することができる.

1~10までの和を求めるスクリプトM-ファイルの

例:ファイル名 keisan.mソースリスト

MATLAB講習会 33

clear allx=0;for k=1:10

x=x+k;endx

Page 34: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

スクリプトM-ファイルの実行

スクリプトM-ファイルを実行するためには,

コマンドウィンドウで単に拡張子(.m)なしの

ファイル名を入力する.

スクリプトM-ファイル:keisan.mの実行

>> keisanx =

55

MATLAB講習会 34

Page 35: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ファンクションM-ファイル ファンクションM-ファイルを使うことで,入力引数と出力引数を伴う,ユーザ定義の関数を作成することができる.

三辺の長さ a, b, c が与えられた三角形の面積を求める関数 heronの例(ヘロンの公式による)

ファンクションM-ファイル: heron.mfunction x= heron(a,b,c)s = (a + b + c)/2;x = sqrt(s * (s - a) * (s - b) * (s - c));end MATLAB講習会 35

Page 36: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

ファンクションM-ファイルの実行

ファンクションM-ファイルを実行するためには,

スクリプトM-ファイルあるいはコマンドウィンドウ

から呼び出す.

>> a = 5; b = 4; c = 3;>> menseki = heron(a, b, c)

menseki =6

MATLAB講習会 36

Page 37: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

5.データの視覚化と印刷

MATLABはデータの視覚化のための豊富な関数を持っている.

plot y=f(x)の線形プロット

stem y=f(x)の棒状のプロット

semilogx 片対数プロット

semilogy 片対数プロット

loglog 両対数プロット

title グラフのタイトル

xlabel, ylabel 座標軸のラベル

axis 座標軸の範囲

grid グラフの格子

MATLAB講習会 37

Page 38: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

プロットの例

t = 0 : 0.01: 2*pi;y = sin(t);plot(t, y)title('Example of Plot')xlabel('Time t')ylabel('y=sin(t)')axis([0 2*pi -1.5 1.5])grid

MATLAB講習会 38

Page 39: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

印刷

印刷したいウィンドウを選択し,メニューのところで,プリンタアイコンをクリックする.

グラフの場合は,グラフの左上のプリンタアイコンをクリックする.

エディターの場合は,そのウィンドウを選択してから,左上のプリンタアイコンをクリックする.

コマンドウィンドウの場合は,印刷したい範囲を選択し,右クリックして「選択を印刷」を選ぶ.

MATLAB講習会 39

Page 40: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

6.講義に関するウェブページ

川又・阿部(正)研究室のページhttp://www.mk.ecei.tohoku.ac.jp/dsptext/

教科書中のプログラムのソースリストが

ダウンロード可能.

ディジタル信号処理のレポートを作成するために

は,このページをみれば十分である.

MATLAB講習会 40

Page 41: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

7. 関連する書籍とウェブページ

関連書籍工学部生協で様々なものが売っているので見て下さい.

MathWorks社(開発元)のホームページMATLABと関連製品の紹介,使い方,関連書籍などhttps://jp.mathworks.com/

MATLAB講習会 41

Page 42: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

8.デモンストレーション

>> demo 上のようにタイプすると,

MATLABのデモを見ることができる.

デモには,MATLABの使い方,数値計算,グラフィックス,ゲームなどの多数の例があり,興味深い.

MATLAB講習会 42

Page 43: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

9. 「MATLAB 入門」について

ブラウザ上で動作するMATLAB Grader を利用した対話型学習・演習システム

大学外(たとえば自宅)でも利用できる

コースへ招待するメールをDCメールに送付予定初回のみメールが届いたメールアドレスを使用して「MathWorks アカウント」を作成すること

指示に従い,期日までにコースを受講すること受講段階に応じて,定期試験の点数(100満点)にさら大5点を加点する

MATLAB講習会 43

Page 44: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

9.MATLABの入手方法

MATLAB and Simulink Student Suiteが販売されている.本体価格9,990円(税別)

多数の重要なToolboxを含み,機能が豊富な製品(20万円相当のものがこの金額!)

https://jp.mathworks.com/academia/student_version.html?s_tid=acport_sv_sp_cta1

MATLAB講習会 44

Page 45: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

10.関連情報(Octaveについて)

Octaveは,MATLABとほぼ同じ文法で数値計算が実行

できるフリーソフト

MATLABは高機能・高価格

Octaveは無料,しかしライブラリは少ない.

Octaveについては,以下のページを見てほしい.

川又・阿部研究室内のOctaveの紹介:

http://www.mk.ecei.tohoku.ac.jp/dsptext/octave/Octave公式ページ(英文):

http://www.gnu.org/software/octave/

MATLAB講習会 45

Page 46: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

最後に:MATLABプログラミングの極意

見る前に跳べ.Leap Before You Look

W. H. Auden 考える前に探せ.

Find Before You ThinkM. Kawamata

探しても見つからないときには仕方がないので作ろう.

ループをできるだけ使うな.ベクトル化せよ.

右の例はどっちが簡単?MATLAB講習会 46

x = sum(1:10)

x=0;for k=1:10

x=x+k;endx

Page 47: ディジタル信号処理補講 MATLAB - mk.ecei.tohoku ... · 6 MATLAB講習会 36. 5.データの視覚化と印刷 MATLABはデータの視覚化のための豊富な関数を持って

MATLAB講習会 47

Do you speak MATLAB?

http://www.mathworks.com/programs/ltc/ltcad.html?s_cid=ad_ltc_matlab