スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Scilabでデータをプロット改(Scilabチュートリアル2)

以前書いたScilabでデータをプロット(Scilabチュートリアル1)が、内容が古くなってきたので、新しいバージョンにあわせて書き直してみます。

まずはテキストデータを用意してください。
ここでは、気象庁が配布している地震の観測波形データを利用してみます。
東北地方太平洋沖地震の涌谷町新町のデータ(L3118A41.csv)をダウンロードしました。

Scilabを起動してください。

まず、カレントディレクトリをデータがあるフォルダに変更します。
ファイルブラウザのフォルダのアイコンをクリックして変更できます。
a_.png


次にプログラムを入力していきます。
メニューのアプリケーション→SciNotesをクリックします。
b_.png

エディターが開きますので、そこに下記のコードを入力してください。

fname="L3118A41.csv"; //ファイル名を指定
fs=100; //サンプリングレートを設定

//ファイルを読み込む
fp=mopen(fname); //ファイルオープン
comments=mgetl(fp,7); //ヘッダ部分読み込み
data=mfscanf(-1,fp,"%f,%f,%f"); //データ部分読み込み
mclose(fp); //ファイルクローズ

time=[0:size(data,1)-1]/fs; //時間系列を作成

//グラフを作成
scf(0);//Figure0を準備
clf; //Figureをクリアする
plot(time,data) //plotする

xlabel("時間 s"); //X軸ラベル
ylabel("加速度 gal"); //Y軸ラベル



エディタのメニューのファイル→保存をクリックして、ファイルを保存しておいてください。


ツールバーの「実行する」ボタンを押してください。
c_.png

ウインドウが開き、グラフが表示されます。
d.png




もう少しきれいなグラフにしてみましょう。

fname="L3118A41.csv"; //ファイル名を指定
fs=100; //サンプリングレートを設定

//ファイルを読み込む
fp=mopen(fname); //ファイルオープン
comments=mgetl(fp,7); //ヘッダ部分読み込み
data=mfscanf(-1,fp,"%f,%f,%f"); //データ部分読み込み
mclose(fp); //ファイルクローズ

time=[0:size(data,1)-1]/fs; //時間系列を作成

scf(1);
clf;
subplot(3,1,1);
plot(time,data(:,1));
xlabel("時間 s");ylabel("加速度NS gal")
subplot(3,1,2);
plot(time,data(:,2));
xlabel("時間 s");ylabel("加速度EW gal")
subplot(3,1,3);
plot(time,data(:,3));
xlabel("時間 s");ylabel("加速度UD gal")

e.png

とりあえずこれくらいにしておきます。質問やご意見ご要望があればコメント欄にお願いします。

スポンサーサイト

コメントの投稿

非公開コメント

scilab question

こんにちは、昨日知恵袋で質問させていただいたものです。

今、Scilabでロトカ・ヴォルテラ方程式からグラフを作りたいと思っています。今後大学院に進学する際、Scilabを使うそうなのでScilabでということなのですが、今のところよくわかっておらず、使えていません。

Xcosでもできるそうなのですが、今はSciNoteでやってみようとしています。

poly(0,'x');
poly(0,'y');
poly(0,'t');
poly(0,'x0');
poly(0,'y0');

//Eular method
x=10,y=2;for t=0:1:1000,
x0=x+0.1*(0.1*x-0.01*x*y),
y0=y+0.1*(0.002*x*y-0.03*y),
x=x0;,y=y0;
end

と、ここまで作って、Scilabコンソールでは値が周期的に変化しているのですが、ここからグラフ化できなくて困っています。
手段として考えたのが、出力された値を一度ファイル(.datなど)に出力して、再度Scilabで読みこめばいいのでは・・・?と思ったのですが、うまく行ってません。

何かよい方法ございますでしょうか?
よろしくお願いいたします。

質問ありがとうございます

こんな感じです。


xx=zeros(1002,1);
yy=zeros(1002,1);

//Eular method
x=10;y=2;
xx(1)=x;yy(1)=y;
for t=0:1:1000
x0=x+0.1*(0.1*x-0.01*x*y);
y0=y+0.1*(0.002*x*y-0.03*y);
x=x0;y=y0;
xx(t+2)=x0;
yy(t+2)=y0;
end

plot(xx);
plot(yy,'r');


いくつか補足を。

> poly(0,'x');
このプログラムではpoly関数を使う意味はないです。

> xx=zeros(1002,1);
1002行1列の行列を生成しています。中身は全て0です。

> plot(yy,'r');
グラフを表示しています。'r'と指定すると赤で描きます。

回答ありがとうございます

回答ありがとうございます。

描けてしまいました・・・(笑)

polyで変数宣言するものだと思っていました・・・
まだまだテキストの読み込みが甘かったです・・・

そして行列を配列のように使っているのですかね?
書いていただいたコードを見ながら勉強させて頂きます。

また質問することがあるかもしれませんが、
その時はよろしくお願い致します。

それでは失礼致します。
全記事表示リンク

全ての記事を表示する

最新記事
最新コメント
最新トラックバック
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。