MATLABハンドブック 追加,修正事項
1999年4月から,MATLAB Version 5.3とSIMULINK3.0 がリリースされました.
この新しいバージョンでの大きな変化は,ローカライゼーションによる日本語のサポートです.行列の扱い,グラフィック,文法ともローカライゼーションの個所を除いてそのまま今までのスクリプトは使用できます.一応,入手した時点(99/4/26)で,かるくスクリプトをテストしたところ問題はありませんでした.
SIMULINKに関しては,操作方法は,従来のものと同様のようですが.Simulink Library Browserになり見た目がかなり変更になっています.


SIMULINKでの大きな変更点は、To Workspaceなどでの出力が従来は、普通の変数であったところが、構造体変数などに変更できるようになった点です。
(従来の方法で保存も出来ますがデフォルトは構造体変数出力のようです。)
例えば、simout変数を出力にしたとき、従来は、
plot(simout)
でグラフを表示できたのですが、Ver.5.3からは
plot(simout.signals.values)
としなくてはならなくなりました。使用する際には、ご注意ください。


もし不具合が合った場合には,ikko@k.hosei.ac.jpまで連絡を頂ければ幸いです.
一応,こちらでわかっている情報は,
http://www.gerox.com
で対応したいと思いますのでよろしくお願いいたします.


以下は,本の修正事項です.すいませんバグが多くて...m(_ _)m

P.5
誤:データ所得
正:データ取得



P.104のスクリプトで
index1=round(F1*dt*n) ;index2=round(n-F1*dt*n)
の1が抜けていました。なお、P.103、P104のスクリプトファイルは、
p103.m p104.mがあるのでご利用ください。

P.43 コロンはセミコロンの間違いです。また、行列で表現するためHi・・・とI'm・・・のそれぞれの行の文字数も同じにする必要があります。

ttttt=['Hi How are you?','I''m fine. Thanks!']

ttttt=['Hi How are you?';'I''m fine. Thanks!']

P.33 初期化のためb=[ ]の宣言が必要です。
追加
clear b;
b=[ ];
b=[b 1]

これ以降のバグは、初版二刷以降では修正済みだと思います。


P.102
バンドパスフィルタの記述でのインデックス数の計算で勘違いをしておりました.まことに申し訳ありません.
本来,F*dt*nとすべき個所をF/(dt*n)としていました.(ディメンジョンが合いません,ケアレスミスです.)これに伴い,
P102の表
INDEX 1 index1

F*dt*n

n/2

 

index2

n-F*dt*n

n
周波数(Hz) 0(直流) F 1/(2*dt)

ナイキスト周波数

F,F+1/(2*dt) 1/dt,0

サンプリング周波数

Low Pass Filter 1 1 0 1 1
High Pass Filter 0 1 1 1 0
index1=round(F*dt*n)
index2=round(n-F*dt*n)
P103104プログラムの対応する個所を修正する必要があります.
なお,このサンプルプログラムでは,たまたま,dt*nが1に近かったためサンプルの結果に変化がなかったので気がつきませんでした.


P.59
y 黄 m 紫(magenta) c 水色(cyan)
r  赤 g緑 b青
w白 k黒(black) . ポイント
o丸マーク x ×マーク + +マーク
* *マーク - 線 : 破線
-. 一点鎖線 -- 鎖線 none なし

 
y 黄 m 紫(magenta) c 水色(cyan)
r  赤 g緑 b青
w白 k黒(black) . ポイント
o丸マーク x ×マーク + +マーク
* *マーク - 線 : 点線
-. 一点鎖線 -- 破線 none なし

P.58 図の部分も破線に変更でなく点線に変更です.


cos(x)を線にしてみよう.


cos(x)を線にしてみよう.


P.180 ポップアップメニューのサンプルプログラムは,間違いではないのですが,userdataのプロパティを入力するとき,文字列は必ず二文字づつ確保する必要があります.テキストでは,スペースが見づらいのでスペースの入力が要らないセル配列によるものを挙げておきます.


plot(sin(1:100));
ui1=uicontrol('style','popupmenu','position',[40 20 100 20],...
'string',[{'solid'},{'dotted'},{'dash-dot'},{'dashed'}],...
'value',1,...
'userdata',[{'-'};{':'};{'-.'};{'--'}],...
'callback',['lineobj=findobj(''type'',''line'');',...
'lineinfo=get(ui1,''userdata'');',...
'set(lineobj,''linestyle'',lineinfo{get(ui1,''value'')})']);


P.96 testwav.m

 本の方は,文字がつぶれて印刷されているためほとんどわかりませんが,スクリプト内で
subplot(4,2,7)のタイトルが間違っていました.本当のタイトルはChebyshev filterです. また,スクリプト内でフィルタの周波数を設定している個所がnormalized周波数で行っていたため若干わかりづらくなっていました.その個所もわかりやすいようにスクリプトを変更してあります.


P.98 9行目 

bobe

bode


P.83 これは,誤りとは言えませんが,MATLAB 5.2では,ガイドツールのレイアウトが若干変更になりました.(Version 5.3ではもっと変更になるかも可能性大``r(^^;)ポリポリ)

今のところレイアウトが変わっただけで使用法は変わってないようです.

guide52.bmp


P.193

▼ワークスペース,スクリプトファイル内での宣言例
global ggg
ggg='Global Variable'
gg='Workspace Variable'
test('Test variable')
clear global ggg関数Mファイルtest.m例

▼ワークスペース,スクリプトファイル内での宣言例
global ggg
ggg='Global Variable'
gg='Workspace Variable'
test('Test variable')
clear global ggg


P.164
サンプルプログラムでは,gcfから'currentpoint'座標を検出し軸情報を元に座標変換しておりましたが,gcaを用いると直接座標が得られることがわかりました.(すいません勉強不足でした)従って,スクリプトも本に掲載したサンプルと比べると若干シンプルな形に置き換えることができます.

次にwindowbuttonmotionfcnでは,マウスの位置をcurrentpointにより取り出している.この時,注意する点として,currentpointで得られる座標は,座標軸の左下を原点右上を(1,1)とした座標系(unitsでnormalを選んでいるため)であり,”☆”の位置を再計算するためには,座標系の変換をする必要がある.そのため変数loにより座標軸の情報を得ている.

次にwindowbuttonmotionfcnでは,マウスの位置をgcaのcurrentpoint属性から取り出している.gcfにもcurrentpoint属性があるが,図に対する座標系であり意味が異なるので注意すること.

新スクリプト


P.16

lookfor の実行例が,MATLABのバージョン,追加ツールボックスの数によりRoundの出る位置が異なるようです.ちなみに私のところのMATLABでは,

》 lookfor integer

BITMAX Maximum floating point integer.

ROUND Round towards nearest integer.

BASE2DEC Convert base B string to decimal integer.

となっています.Version.5.3では,日本語に対応しております.lookfor関数にも日本語が使えます.
例えば, lookfor 整数
など,ただし,ツールボックス系の関数は,ローカライゼーションに対応していないようであるため従来通り英語で検索することになりそうです.


P.98

ここで使用しているbode,lsim関数は,アドインソフトのcontrol toolboxが必要です.

明記するのを忘れておりました.申し訳ありません.

と言った訳で,タイトルに,

                 *control toolboxが必要
伝達関数・状態方程式により波形整形

を付加したほうが適切であろうと思います.

また,このままでは,申し訳無いので,lsim関数に関しては,control toolbox不要の互換の関数llsimを私が作成いたしました.もしコントロールツールボックスをお持ちでなく使用したい方は,このページのMATLAB FAQ・Tipsにllsimのスクリプトが掲載されているのでそちらをご利用下さい.


P.11

行列演算

行列演算


P.67 二箇所あります.


P.147

handtst.m

誤 カンマが全角になっている.

clear

close all

figure1=figure(1)

subplot11=subplot(2,1,1)

plot11=plot(sin(0:0.1:2*pi))

title(sin(x))

subplot12=subplot(2,1,2)

plot12=plot(cos(0:0.1:2*pi))

title(cos(x))

handtst.m


P.12

IDDE

IMEX

IMATLABエンジン

DDE(Dynamic Data Exchange)

MEX(MATLAB EXternal interface)

MATLABエンジン


P.53

九九の計算計算

九九の計算で


P.73

である.

である.


P.80

》rotate 3d

》rotate3d


P.82

(jpeg,bmp,pcx,tif.etc)

(jpeg,bmp,pcx,tif,etc.)


P.84

④save fnameXYZ -ascii

④save fname XYZ -ascii


P.190

》help add2

》help add1


P.190

add2.mのスクリプト

%simple function test program

% ADD2(A,B,C), where A & B & C are scalar.

% programmed by Gerox(c) 1997

function y = add2(a,b,c)

if(nargin == 2)

c = 0;

else if(nargin ~= 3) error('This function only support two or three input argument.');end

end

if(nargout>1)

error('This funciton only support one output argument.');

end

[ma na]=size(a);

[mb nb]=size(b);

[mc nc]=size(b);

if(max([ma mb mc na nb nc])>1)

error('input must be a scalar.');

end

y=a+b+c;


P.192

add2(1,2,3,4)

ans =

10

add2(1,2)

ans =

3

add3(1,2,3,4)

ans =

10

add3(1,2)

ans =

3


P.162

》set(0,ShowHiddenHandles','on'); % This is for only MATLAB Verion 5

》set(0,ShowHiddenHandles','on'); % This is for only MATLAB Version 5


P.129

SIMULNKでは,これらの

SIMULINKでは,これらの


P.111

Y=[20 24 23 30 ...

Y=[20 24 23 30 ...


P.163

現在のマウスの位置がわかるプロパティcurrentpotint

現在のマウスの位置がわかるプロパティcurrentpoint


P.171 これは,図の中の間違いです.

図の中の○がAについている

図の中の○はB


P.82

画像データを読み込む関数impread

画像データを読み込む関数imread


P.3

MATLAB/SIMLULINK

MATLAB/SIMULINK


P.29 コンマとセミコロンの違いは,重要なのでボールドの方が良いと思います.

コンマのわりにセミコロンも使用できる.コンマとセミコロンの違いは実行時に画面に結果を表示するか否かである.

コンマのわりにセミコロンも使用できる.コンマとセミコロンの違いは実行時に画面に結果を表示するか否かである.


P.100

1000点のデータ

1001点のデータ


P.134

電流と電圧のと関係は,

電流と電圧との関係は,


P.189 この関数Mファイルの注意は,重要なのでボールドの方が良いと思います.

関数Mファイルは一度使うとコンピュータのメモリにキャッシングされ,次回からキャッシング情報のみを使用し関数Mファイルの内容を変更しても反映しない場合がある.

関数Mファイルは一度使うとコンピュータのメモリにキャッシングされ,次回からキャッシングした情報のみを使用し関数Mファイルの内容を変更しても反映しない場合がある.


P.205 Index番号が点(.)とカンマ(,)の統一がとれていない.


P.37 テーブル内の×の表示がおかしい.


P.68

本のヒストグラム

3本のヒストグラム


P.27 これは,執筆時点(MATLAB Version 4.2c)の頃の状況です.現在Version5以降は,そう言うことはありません.(オペレータオーバーロードがサポートされたため)

シンボリックツールボックスというアドインソフトがあるので使えないことはないが,シンボリックに扱うのであれば,Mathematicaなどの方が適している.

シンボリックツールボックスというアドインソフト(別売)を使うと可能である.


P.36

この結果を元に,ベクトルqの中の絶対値が1より大きい要素のを表示するには,

この結果を元に,アレイxxの中の絶対値が1より大きい要素のを表示するには,


P.107

MS-DOS等の制約上,データは255文字分なのでデータの方が扱いやすい.

MS-DOS等の制約上,データは255文字分なのでデータの方が扱いやすい.


P.124 削除

そこでマウスの右ボタンを押したままにする.


P.107

データとして行列に格納される

データとして行列に格納される


P.33

A*Bとした場合,Aの数とBの数は同じで

A*Bとした場合,Aの数とBの数は同じで


P.33

さらに変数hの1目に空ベクトル

さらに変数hの1目に空ベクトル


P.27 これは誤りでは無いと思いますが...

Version5.2では,若干のツールバーの変更があるが機能は同じである.

画面の図は,Version5.1をもとにしている.デザインレイアウトの変更があるが機能は同じである.


P.83 追加

興味のある人は読んで見るとよい).ここでは詳しく解説しないが,これらをもとに筆者らが作成したCONTEC社製 ANALOG I/O PC Card AD12-8(PM)用AD変換プログラムが

http://www.shuwasystem.co.jp/books/772_s.htm

よりダウンロードできる.このプログラムとADカードを使うとノートPCでADができるためポータブルな計測,信号解析システムの開発に非常に便利である.興味のある人は,使ってもらいたい.


P.66 追加

動作速度は,格段に速くスムーズに変化するようになる.

また,Version5.2以降では,drawmode,erasemodeプロパティ以外にfigureの隠しプロパティdoublebufferを使っても高速化することができる.set(gcf,'doublebuffer','on');