【MATLAB初心者は】まずこれを読んでください【コードサンプルあり】 | デイビッドの宇宙開発ブログ

【MATLAB初心者は】まずこれを読んでください【コードサンプルあり】

 

こんにちは,デイビッドと申します.今回は,MATLAB初心者の方向けに,とりあえず,こうかいとけば動くよ!というコードを紹介していくシリーズをご提供します.右も左もわからず,書籍を購入するのもいいけれど,ウェブで調べて解決したい!という方おすすめです.コピペ自由にどうぞ!

対象者:MATLAB初めてインストールしたけどどうすればいいかさっぱりわからんという方.

他にもいろんな書き方があるのと詳細の設定や厳密な文法なんかは,Mathworks公式をご覧いただくとして,

どんなコードにもとりあえず書いとけ!なはじめの呪文をお教えしつつ,簡単な計算,変数データをプロットして図示,その図を保存するというところまでご紹介します.それではれっつらごー

今回は肩慣らし.

はじめの呪文

はい.まずは,はじめの呪文です.

% はじめの呪文
clear
close all

これです.はじめはなんだかわからないと思いますが,とりあえず書いておいてOKです.

細かいことを知りたい方のために少し補足しておくと,

clearは,それまでのプログラムで使用していたワークスペース上の変数情報を全てリセットする効果があります.それまでのプログラムで使用していた変数が今回も必要とは限りませんので,PCのシステムメモリを解放して,動作が重くならないようにするといったところです.また,新しいプログラムを実行する際に,別のプログラムなどを実行した際に残っていた変数情報のせいで生じるエラーをあらかじめ回避しておくわけです.MATLABは,すでにワークスペースにある変数と同じ変数をこれから実行するプログラム内で用いていても,上書きをしてくれますが,慣れてきて複雑・高度化したコードを書くほど,同じ変数名で違う動作をさせることも

clearは安定動作・エラー予防に重要.とりあえず書いといてください!
逆に,それまでの変数情報をそのまま使いたい場合は,clearしないでくださいね.
close allについては,それまでに開かれているfigure(図を書くキャンバスみたいなもの)を全て閉じます.これも,それまでのfigureが残っていると,誤って,そのfigureの上にデータを描画してしまって,過去の図と現在の図が混ざった図になってしまったりするのをはじめから防いでおく効果があります.

簡単な計算

次は,何か図にしたいので,そのもとになるデータを用意します.

% 簡単な計算
x = 0:0.01:1;
y = x.^2;

ここでは,xの部分は,初心者の方には見慣れない表記だと思いますが,一列(一行)の数列を作る文法になります.

結果として,1×101個のデータを持ちます.

便利で利用頻度も高いので,覚えていってください.

次に,yの部分ですが,ここにも一つ重要なポイントがあります.これはxの二乗を計算させているんですが,行列に対して,それぞれの要素を二乗したい場合,ピリオドを演算子^の前に入れます.こうすると,一行で,xのそれぞれの要素に対して二乗計算ができ,字面どおり,$$y=x^2$$の計算を行ったデータ列yが得られます.yも1×101個のデータを持ちます.

図にしたい

% 図の書き方
fig = figure(1);clf;
plot(x,y)
xlabel('x'),ylabel('y')

これだけ.簡単.

fig=figure(1);

figure(1);のかっこの中は書かなくてもOKですが,あらかじめ1や2,100などと好きに割り振っておくと,今後複雑なコードを書いたときに,確実にその番号で区別されてfigureウィンドウが生成されるので,コード内のどのplotがどのfigureウィンドウに描かれている・対応しているかを知るのに便利なので,癖付けておくのは,おすすめです(あくまでデイビッド流ですが).また,fig=としてハンドル変数に代入しているのは,この後figureの保存をするのに便利なので,こうしておくのがおすすめです.変数名なのでfigでなくてもOKです.私はよくfig1,fig2というふうにして,あとの図の保存の調整時に使い分けることで,図ごとの保存の大きさなどを調整したりしています.

clf;

clear figureの略です.これなしで,なんども同じプログラムを回していると,前回の結果が残ったものに今回のplotが上書きされたりしてしまうので,それをあらかじめ防ぐためのものです.おまじないだと思ってつけておくのがおすすめです.

plot(x,y)

これが一番シンプルな二次元の図を描く方法ですね.xが横軸,yが縦軸に対応したグラフが生成されます.時系列データなどでは,plot(t, y)みたいな感じですね.xとyは同じ長さでなければエラーになりますので,データを作る際は,長さが同じかどうかは要チェックです.

xlabel(‘x’),ylabel(‘y’)

ここで,ラベルの名前の設定をしています.シングルクォーテーションの間はなんでもいいので,

xlabel('x [kg]'),ylabel('y [N]')

などとすれば,単位を表記できたり色々かけます.latex表記でギリシャ文字など複雑な表記もできるので覚えておいてください.

図の保存

% 図の保存
filename = 'introduction';
width = 400; height = 300;


set(fig,'PaperPositionMode','auto')
pos = get(fig,'Position');
pos(3) = width;
pos(4) = height;
set(fig,'Position',pos);
        
dirname = "./results/"+datestr(now,'yyyy-mm-dd');
mkdir(dirname);
savename = strcat(dirname,'/',filename);
saveas(fig,filename,'png');

さて図の保存のコードです.なんだかややこしいので詳細な説明はしませんが,とりあえず有用に使えます笑

やっていることは,1行目が基本のファイル名の設定,2行目で横幅縦幅の大きさを設定します.

その設定を最終的に


set(fig,'Position',pos);

で行います.

その状態のまま,保存の処理をしているのが.以下です.


dirname = "./results/"+datestr(now,'yyyy-mm-dd');
mkdir(dirname);
savename = strcat(dirname,'/',filename);
saveas(fig,filename,'png');

ここでやっているのは,新たにresultというフォルダの中に,日付情報が名前になったフォルダが自動で生成され,その中に冒頭で指定したファイル名の画像ファイルが保存されるようにしたものです.なぜこんな回りくどいことをしているかというと,今後,より複雑な解析なりを行なっていくと,プログラムファイルと同じフォルダ内に,大量の結果画像のファイルが生成されていくことになります.見づらいですし,結果の整理に手間がかかってしまうので.あらかじめこのようにコーディングしておくことで,結果画像が別フォルダに入り,今回は日付ごとに結果が保存されるので,いつ試したものかも一目瞭然になるということです.

さらなる工夫として:短い時間に何度もシミュレーションを回して結果が生成される今回のようなコードの場合には,ファイル名の設定が同じで有る限り保存される画像が上書きされてしまい,前後の違いを見比べるのが面倒になります.そこで,時刻(秒まで)を自動で取得してファイル名に記すことによって,区別するという工夫もできます.私はよくやっていますが,ファイルが無駄に増えてしまうので,落ち着いたら消すなどPCの容量には注意ですね.


dirname = "./results/"+datestr(now,'yyyy-mm-dd');
mkdir(dirname);
savename = strcat(dirname,'/', datestr(now,'HH-MM-SS'), filename);
saveas(fig,filename,'png');

うまくいっていない結果もしっかり残しつつ,試行錯誤してプログラムを書き上げていくという作業をする上では,便利なので.ぜひ使ってみてください.

今回の全コード

% ************************************************************************
%
%   MATLAB初心者必見!すぐ使えるコード教えちゃうよ.
% 
%   Written by David from spacedavid.com
% ************************************************************************

% はじめの呪文
clear
close all

% 簡単な計算
% - 列作成
x = 0:0.01:1;
% - 行列の二乗計算
y = x.^2;

% 図の書き方
% - figureの設定
fig = figure;clf;
% - 描画
plot(x,y)
% - 縦横のラベル設定
xlabel('x'),ylabel('y')

% 図の保存
% - ファイル名と縦横の設定
filename = 'introduction';
width = 400; height = 300;

% - 位置と大きさの設定
set(fig,'PaperPositionMode','auto')
pos = get(fig,'Position');
pos(3) = width;
pos(4) = height;
set(fig,'Position',pos);

% - 保存
dirname = "./results/"+datestr(now,'yyyy-mm-dd');
mkdir(dirname);
savename = strcat(dirname,'/',filename);
saveas(fig,filename,'png');

保存された画像はプログラムコードと同じフォルダにできていると思います!下みたいなやつですね!

ただpngだとパワポとかに貼ると画質低く感じることも多いと思います.その場合は,容量が大きくなってしまいますが,bmpフォーマットがおすすめです.その場合は以下のように書き換えるだけでOKです.


saveas(fig,filename,'bmp');

 

コード作成しちゃいます

今回は,MATLABを使っていく上で,ひとまず押さえておくとよい,はじめの呪文と図示,図の保存方法についてご紹介しました.

当然皆さんが利用する目的によって,本質的な計算の部分でどういうコードを書けばよいのか,ということは変わってきます.ですので,コメントかお問い合わせフォームに書いていただければ,

実例コードと説明に関する記事をアップしていきたいと思います.

MATLABを始めたけどわからないし,調べるのめんどくさい!!使えるコードとにかく教えて〜〜.あるいは,MATLABこんなことわかんねえよお〜

という方はぜひお気軽にご連絡ください!

内容が複雑な場合は,こちらからお聞きしたりやりとりさせていただくのがいいと思いますので,お問い合わせからお願いします.注:サイト欄は空白でよいです.

 

他の記事も見てみてくださいね〜

【頭の良い人のPC】宇宙エンジニア・研究者が愛用するノートPCって!?【実際に調査してみた】

 

コメント

タイトルとURLをコピーしました