MATLAB

MATLABでplotの線を透明にしたい

MATLABで配列xとyをプロットする時はplot(x,y)ですよね。plotのオプションを指定する時は、 Name,Value の引数ペアをコンマ区切りで加えていきます。例えば、点線で線の太さを2ポイントにしたければ、plot(x, y, ’LineStyle', ':', 'LineWidth', 2)です。 pl…

MATLABのmeshcのコンターを描くz面を変更したい

meshcを使うと、3次元の分布とともにコンター図を描ける。 デフォルトでは、コンター図はzlimの最小値に描くが、任意の場所に変更するには次のようにする m = meshc(peaks); m(2).ContourZLevel = 10; % z=10の場所にコンター図を描く

MATLABのプロットの枠外を消したい

plotやplot3dした時のグラフの外枠を消す方法 set(gca,'Visible','off')

MATLABのプロットの枠外に注釈を書きたい

axesコマンドを使って、透明なレイヤーを確保して、そのレイヤーにtextコマンドをつかって文字を書き込む。textコマンド(かつデフォルトの単位系)を使うときは、画面左下の座標が(0,0)で画面右上の座標が(1,1)となる。 例1 x=linspace(0,2*pi,2000); y=ex…

MATLABで包絡線を描く方法

次のファイルをダウンロードする。 Envelope 1.1 https://jp.mathworks.com/matlabcentral/fileexchange/3142-envelope1-1 (https://jp.mathworks.com/matlabcentral/fileexchange/3142-envelope1-1) 実行例 x=linspace(0,2*pi,2000); y=exp(-x).*sin(20*x);…

MATLABでプロットするグラフをPC画面の中央に出したい

moveguiを利用する f=figure(); movegui(f, 'center');

MATLABでプログラムの依存関係を調べる方法

hoge.mというファイルが依存しているファイルの一覧を得るには以下のようにする。 >> matlab.codetools.requiredFilesAndProducts('hoge.m')' 最後の「'」が肝ですから

MATLABでグラムシュミット直交化

a, b, c, dがそれぞれ列ベクトルで、4次元の斜交基底を成しているとする。直交基底はqr関数を用いれば簡単に求められる。 >> base = [a, b, c, d]; >> [new_base, ~] = qr(base); new_baseの各列が直交基底を成す。n次元に応用可能。やっていることはGram Sc…

MATLABで複数のパルスの立上がり時刻を効率的に求める方法

例えばオシロで測定したデータをti, Vi (i=1,2,...)として、それをplot(t,V)とすると下図のような波形だとする。 このような、複数の電圧パルスの各立上がり時刻を効率的に求めるには、以下の様にすると便利。 >> % t ... time of signal (1xN array) >> % V…

MATLABのデータの型について

MATLABのデフォルトはdouble型。例えば >> a=2; class(2) ans = double singleや整数にしたい場合は >> a = single(2); >> a = int32(2); % 32ビット、4バイト、FortranでいうINTEGER(kind=4) となどとキャストして宣言する。 ちなみに、singleで計算してい…

MATLABでの時系列データの扱い

2012/02/21 20:00:13みたいな書式は人間にとっては良いけど、パソコンで扱う(ソートするとかプロットするとか)には不便なのでタイムスタンプにするのが良い。2012/02/21 20:00:13をタイムスタンプに変換するには次のようにする t1 = '2012/02/21 20:00:13'…

MATLABでCADファイルを表示する

CATIAのファイルを読み込ませたかったが、Simulink 3D Animationというのを購入するしかないようだ。FileExchangeにはCADを読み込むコードがいくつかあり、IGES Toolboxを使うこととした。 IGES Toolboxは以下のリンクよりダウンロード可能 http://www.mathw…

MATLABのパスの設定

MATLABを起動してuserpathと打つとユーザー割り当ての検索パスが表示される。MATLABは起動時にそのディレクトリにあるstartup.mを1回実行するので、パスの設定などはそこに書いておく。 R2012bの場合、Linuxでは >> userpath ans = /home/username/Documents…

MATLABの多次元配列で最大値(最小値)の場所を特定する方法

Mという4次元配列から最大値の場所を見つける例 M = randn(10,10,10,10); [~,I]=max(M(:)); [I1,I2,I3,I4] = ind2sub(size(M),I) 最大値はM(I1, I2, I3, I4)となる。

MATLABで多次元配列の値を効率よく補間する方法

interp2は遅いのでgriddedInterpolant()を使う。補間されるデータがNDGRIDで生成された格子を基にしているのか、MESHGRIDで生成され格子を基にしているかで使い方が違うので注意。 補間されるデータがNDGRIDで生成されている場合 [X1, X2] = ndgrid(1:10,1:1…

MATLABのlsqcurvefitを用いた最小二乗法で、ヤコビアンを指定する方法

フィッティングしたい関数myfuncがスカラー変数xとNp個のパラメータを受け取り、スカラーyを返すような関数とする。この時、数学の定義としてはヤコビアンは1行Np列である。しかし、matlabのプログラミングとしてはxに配列を投げてまとめて処理することが多…

MATLABで出力する図を指定の寸法で出力したいとき

フォント、フォントサイズ、図の大きさを指定する方法。 以下の例ではフォントサイズを10 ptにし、図の幅を8 cmにしている。ここで8 cmとしたのは、ジャーナルがa4用紙2段組みで、左右のマージンが大きめに2.5cmずつとし、簡単のため左右の段の間のスペース…

MATLABのmeshgridで作成した計算格子を一発で描画する方法

>> [Y, X] = meshgrid(-1:0.1:1); >> plot(X, Y, 'k-', X', Y', 'k-')

MATLABで計算過程を時々刻々とリアルタイムにプロットしたい時

基本は、drawnowを使ってイベントキューをフラッシュする。ただ、下記に示すように3つの方法が考えられる。方法1が速いしシンプルだが、凝ったプロットをしたいときに上手くいかない事もあるので、refreshdataも用いた方法2及び方法3も紹介する。 方法1…

MATLABの図のサンプルとそのコード例

MATLAB Plot Galleryという便利なサイトがあります http://www.mathworks.com/discovery/gallery.html 下の図のようにいろいろなサンプルが公開されています。

MATLABで3Dで線や矢印を描く方法

チューブプロットとmArrow3というのを組み合わせると下のような図が描ける。 チューブプロット(tubeplot) チューブプロットできるコードはFileExchangeにある: http://www.mathworks.com/matlabcentral/fileexchange/5562-tubeplot このFileExchangeのtubep…

MATLABの高速化

遅い部分を特定する 時間はticとtocを組み合わせて計る。tic/tocのヘルプに便利な例がある。 プロファイラーを使って、コードの遅い部分を特定する。 ベクトル計算の利用 ベクトル計算とは、簡単に行ってしまうとfor文を使わないやり方。例えば、meshgridで…

MATLABの図の目盛をカスタマイズ

図の目盛の値を文字列にしたいとき 例えば、横軸をA, B, C, D, Eとしたい時は、以下のようにする。 x = 1:0.1:5; y = rand(size(x)); xtick = 1:5; xticklabel = {'A' 'B' 'C' 'D' 'E'}; plot(x, y, 'b') set(gca, 'XTick', xtick, 'XTickLabel', xticklabel…

MATLABで複数の図の表示範囲を同期させたいとき

図をsubplotなどで複数表示していて、一つのグラフで拡大表示などした時に他のグラフの表示領域を自動で変更させたい時がある。そんな時はlinkaxesを使う。例えば、2つのグラフがあって、x軸について表示範囲を同期したいときは以下の様にする x=linspace(0,…

MATLAB PDE Toolboxのメッシュ生成について

PDE Toolboxのinitmesh()を使うと三角形1次要素の分割が簡単にできる。 >> [p,e,t] = initmesh(g); このときの戻り値の配列のサイズはそれぞれ次のように表せる p ... 2xNn e ... 7xNe t ... 2xNn ただし Nn ... 総ノード数 Ne ... 境界上のエッジ数(ノード…

MATLABで簡単に文字列を結合する方法

strcatという命令文も用意されているが、以下の方が楽。 >> ['ab', 'cd'] ans = abcd

MATLABで簡単なユーザー入力をする例

yes or noを要求する例 prompt = 'Do you want to save? Y/N [Y]: '; str = input(prompt,'s'); if isempty(str) str = 'Y'; else str = upper(str); end 文字列の入力を要求する例 prompt = 'Filename: '; str = input(prompt,'s'); 数値の入力を要求する例…

MATLABでx軸を共有するマルチプロット

次の二つのファイルをダウンロードして、パスの通ったところに保存しておく。 samexaxis (nice subplots with same x axis) Parse function arguments 使い方は次の通り subplot(3,1,1); plot(randn(100,1),randn(100,1),'x'); ylabel('QF') subplot(3,1,2);…