SCILAB第二章 二維平面繪圖 -...

33
Conférencier : Prénom Nom Date : Transparent 1 Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp SCILAB 第二章 二維平面繪圖 撰文者: 1. 中央大氣科學系 楊善文 2. ( 如對本文有貢獻者,記得在此留名 )

Transcript of SCILAB第二章 二維平面繪圖 -...

Page 1: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 1

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

SCILAB 第二章 二維平面繪圖

撰文者: 1. 中央大氣科學系 楊善文 2. ( 如對本文有貢獻者,記得在此留名 )

Page 2: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 2

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

繪圖前的準備工作

1. 調配 Scilab 存取的記憶體與 Swap 空間。 ( 因為繪圖這個動作是很吃資源的。)

2. 學習簡單的存取外部的資料檔。 3.rand() 的使用。 (rand 是取隨機亂數,常被拿來作教

學範例使用。 ) 4.linspace() 的使用。 ( 要繪出一個圖,常需要宣告一個

範圍的變數值,這是常用的指令。 ) 5.size() 指令的使用。 ( 部分繪圖指令需要先宣告邊界

大小,故需先使用此指令 ) ( 筆者會先講以上的部分,之後才會進入正題。 )

Page 3: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 3

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

調配 SCILAB 需求的空間

SCILAB 程式在啟動時,會預先對硬碟磁區的 Swap 區抓取一定量的空間。如果使用者要載入非常龐大的資料量來繪圖的話,很可能會造成超過啟動時所得到的空間,因而產生錯誤訊息:記憶體空間不足而不能繪圖。

修改預設存取空間方法:在 Scilab 的安裝目錄 ( 例如筆者的是 /usr/lib/scilab-4.0/) 下,有個檔案 :scilab.star

編輯此檔案,在此區域: // Set stack size ================================ 中的 newstacksize=' 你想要的大小 '

Page 4: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 4

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

調配空間注意事項

當完成編輯後,存檔離開,重新啟動Scilab 即可。 注意:執行這個動作要非常小心!不要一口氣貪心想調

得非常的大。因為這個空間是一啟動 Scilab 時就會取下這樣的大小,不論你的 Scilab 是否已經在工作。所以取太大可能會超過系統的 Swap 空間大小!

各個作業系統對超過記憶體資源負荷的反應不一定相同,例如筆者的Solaris 系統遇到這種情況是在 Scilab還沒啟動完畢,系統就直接 kill 掉這支程式。至於其他系統是否會有意料之外的情形,例如程式掛掉甚至系統整個當機,這筆者不敢保証會發生什麼事。

所以建議調到適當大小即可。

Page 5: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 5

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

存取外部的資料檔

在 scilab 下存取一個普通的資料檔指令是 read/write 。 存取 Binary形式的資料檔指令是 load/save 。 ( 注意:這部分跟Matlab 不一樣了。 ) read() 的用法是: read(' 資料檔名 (絕對或相對路徑 )',A,B);

A 與 B 是要抓取多大範圍的資料來載入矩陣,如果選擇的範圍超過資料檔大小,則Scilab 預設會抓取資料檔的下一批資料來補齊,如果選擇的範圍超過資料檔內容的數量 ( 例如資料檔 xxx是 3x4 的資料,使用者下了:read('xxx',7,8); 卻取7x8的範圍 ) ,則會顯示錯誤訊息。

Page 6: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 6

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

資料檔的尋找

如果資料檔不在預設的目錄下,可以使用 Scilab內預設的指令( 此指令與 UNIX下的系統指令類似。 )

pwd 指令:察看目前所在目錄。 cd 指令:切換目錄,可以是絕對與相對路徑。例如: --> cd .. <===切換到上一層目錄 --> cd /usr/local/bin <==切換到 /usr/local/ 的 bin/ 目錄

下 (絕對路徑 ) 。 ls 指令:察看該目錄下有哪些檔案。 mkdir/rmdir [目錄名 ]:製造 /刪除 目錄。 以上指令,如果你是一個 UNIX/Linux使用者,或許會覺得很熟悉。但是如果你是 Windows或是其他非 UNIX類OS 的使用者,筆者就建議你要多多練習這部分的操作了。

Page 7: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 7

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

read/write 1

假設有一個資料檔檔名: data ,檔案內包含了以下資料: 14 27 36 12 22 13.36 14.13 7 15 13.12 6.893 27 17.1 15.2 7.85 24 讀取它並存進一個矩陣的語法如下: --> A=read('data',4,4); --> A Ans = 14 27 36 12 22 13.36 14.13 7 15 13.12 6.893 27 17.1 15.2 7.85 24 當將資料讀入矩陣後,就可以開始使用這些資料了。

Page 8: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 8

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

read/write 2

想將Scilab 上已經處理完的矩陣資料,可以使用write()指令輸出存檔。

語法: write('輸出檔案名或路徑 ',要輸出的矩陣 ); 例如有一個矩陣 B=[1 2 3; 4 5 6; 7 8 9]; --> write('data2',B); <==把 b 的資料存成 data2 這時你就可以在目前的目錄下找到 data2 這個檔案,利

用 vi等編輯器開啟它,就會發現資料已經在裡面了。 讀檔的小秘訣:如果資料量非常龐大,你不確定要載入多大的矩陣才能完全載入,可以使用vi 編輯器,開檔時會有顯示行數,或者在終端機上使用 'wc -l 資料檔名 '也是個辦法。

Page 9: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 9

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

save/load

這是存取 Binary形式的資料,在做資料處理時會比較少用到。 儲存的例子: save('data3',B); <== 使用之前的 B矩陣 這時如果你用 vi等編輯器開啟 data3 檔案,就會發現裡面是亂碼。

讀取它: load('data3'); --> B <== 因為之前是存 B,故 load 時你只能用 B 來讀出它 Ans = 1. 2. 3. 4. 5. 6. 7. 8. 9. (save 指令在儲存時,除了儲存資料外,也會將資料所屬的矩陣名一併記下來。 )

Page 10: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 10

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

亂數產生指令 rand()

使用rand() 指令可以產生一個 -1 到 1 之間的亂數矩陣。 語法 rand(A,B); <== 產生一個 AxB 的亂數矩陣 例子: --> Z=rand(2,2) Z = - 0.2207715 0.4621729 - 0.2972244 - 0.8631775

Page 11: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 11

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

取變數的區域範圍: linspace()

用法:變數=linspace( 下界 ,上界 , 等份點數 );

這個指令可以宣告一個變數,範圍從哪裡到哪裡,第三項的等份點數如果不輸入,則預設是切 100等份。這個指令的功用就是在選取特定範圍,並對這範圍取 N等份的點。

在繪圖時,自變數X常是以此方式宣告,而應變數 Y就會隨著X的變化而變動。

例子: t=linspace(0,2*%pi,300); <==0 到 2π取 300 個等份點。

例子2 : x=linspace(1,10); <= 在 1 到 10 之間取 100點

Page 12: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 12

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

size 指令的使用

size() 指令可以用來判斷矩陣的大小。 例子: --> A=[1 2 3 4;5 6 7 8;9 10 11 12] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. --> size(A) Ans = 3. 4. ( 學會了這些之後,就可以進入正題了。 )

Page 13: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 13

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

基本二維繪圖 plot

plot 指令可以用來繪製一般的曲線圖。 範例 ( 對 sin函數繪圖 ) : --> t=linspace(0,2*%pi); <== 取 0 到 2π的範圍 --> y=sin(t); --> plot(y);

Page 14: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 14

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 15: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 15

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

範例 2(任意函數 ) :

--> x=linspace(0,40,300); <==0 到 40 之間取 300 個點

--> y=3*x^2-4*cos(x)-exp(x);

--> plot(y);

(plot(y)也可以寫成 plot(x,y) ,如果你希望將x,y軸對調,可以寫成 plot(y,x) 。 )

注意: plot(y)跟 plot(x,y)仍然還是有差別。當寫成 plot(y)時, x座標軸是以 y有多少筆資料來決定,例如之前的 x雖然是 0 到 40 ,但是切了 300等分。故 plot(y) 時, x軸是 0 到300 。但是 plot(x,y) 時, x軸就是以 0 到 40 來顯示了。

Page 16: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 16

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 17: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 17

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

將X,Y軸對調後 (plot(y,x))

Page 18: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 18

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

多重曲線繪圖的方式

例子:

--> x=-2:0.01:2; <== 這是 linspace 外的另一種定義變數方式 ,從 -2 到 2 ,間距 0.01 。

--> y1=sin(x);

--> y2=exp(x);

--> y3=sin(x)+cos(x);

--> X=[x;x;x];

--> Y=[y1,y2,y3];

--> plot(X',Y'); <==也可以用 plot2d() 指令,用法差不多。

Page 19: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 19

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 20: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 20

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

另一種在同張圖上繪製多條曲線方式

由於 Scilab 在繪圖時,若同時多次下達繪圖指令,且不指定要新增繪圖視窗時,預設會讓圖形疊在同一張圖中。而不會每下一次繪圖指令,圖就刷新一次。除非繪完一張圖,就關一次繪圖視窗。

例如: plot(y1);plot(y2);plot(y3); 這時就可以在同張圖中,同時看到y1,y2,y3曲線了。 ( 這種方式的優點是,你可以比較容易為每條曲線做不

同的處理,而不會互相影響到( 簡單明暸 ) 。筆者在繪製多重曲線圖時,反而比較常使用這種方式。 )

Page 21: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 21

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

修改圖形的線標 (Marker)

在 plot() 指令中宣告曲線y之後的欄位,可以加上 '線標樣式 ' 的參數,例如: '.' , '+' , 'x' , 'o'..........

如果要調整線標大小,可以加上: 'marksize',大小數值 例如: --> plot(x,y,'.','marksize',1); <==打點圖,點大小 1 如果要條整線標的顏色,可以加上參數: 'color',[R G B] R,G,B 的範圍是 0 到 1 ,例如紅色: [1 0 0],綠色: [0 1

0],藍色: [0 0 1]。我們可以從[ ]之中三個值用 0 到 1之間的數字來混出其他色彩,例如: [0.7 0.5 0.2]

Page 22: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 22

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

例子: --> t=linspace(0,2*%pi,50); --> y=sin(t); --> plot(t,y,'.','marksize',4,'color',[1 0 0]); --> plot(t,y+1,'+','marksize',4,'color',[0.7 0.3 0]); --> plot(t,y+2,'x','marksize',4,'color',[0 0 1]); --> plot(t,y+3,'o','marksize',4,'color',[0.8 0.4 0.6]);

Page 23: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 23

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 24: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 24

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

為圖片加上標示文字

在 scilab 下,在圖的座標軸旁與圖上方可以加上裝飾或是注解的文字,是使用 xtitle() 指令。

用法: xtitle('標題 ','x軸注解 ','y軸注解 '); 例如: --> t=linspace(0,2*%pi,50); --> y=sin(t); --> plot(t,y); --> xtitle('sin function','t','sin(t)');

Page 25: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 25

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 26: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 26

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

為圖片加上網格線

讓圖表加上網格線,更可以輕易看出資料點的位置。加入網格線的指令是: xgrid

通常xgrid() 不需加入參數即可使用。 例子:將之前的 sin函數圖加上網格線。 原來的語法之下再加入 xgrid();即可。

Page 27: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 27

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 28: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 28

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

離散資料打點圖

例如:有兩個資料檔 A,B裡面的資料分別是: 資料 A : 3.3 4.2 11 13 5.6 8 資料 B : 2.1 5 6.7 13 17 19 --> x=read('A',1,6); --> y=read('B',1,6); <== 分別將 A,B 資料存入矩陣 --> plot(x,y,'.'); 必須注意的是,在 plot() 中必須要加入 '.' 這個參數,如

果不加的話, Scilab 會將這些點連起來。

Page 29: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 29

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

Page 30: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 30

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

向量場圖 champ

champ顧名思義,在法文中即是場之意。 champ() 指令即是用來畫向量場 (champ de vecteurs) 。向量場常用於大氣風場、流體流場等用途。

用法: champ(t1,t2,X,Y); t1 : y方向(垂直方向) 範圍 t2 : x方向(水平方向) 範圍 X:全域 x方向的大小矩陣 Y:全域 y方向的大小矩陣

Page 31: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 31

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

向量場示意圖

Page 32: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 32

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp

champ 使用範例

t1=1:4; t2=1:3; X=[1 1 1;1 1 1;1 1 1;1 1 1]; Y=[0 1 1;1 2 1;1 1 1;1 1 1]; champ(t1,t2,X,Y);

Page 33: SCILAB第二章 二維平面繪圖 - read.pudn.comread.pudn.com/downloads132/ebook/564317/scilab/SCILAB_Chap2.pdf · 在scilab下存取一個普通的資料檔指令是read/write。

Conférencier : Prénom Nom Date : Transparent 33

Fichier : /albafile/重要文件/網頁製作/SCILAB_Chap2.odp