You are on page 1of 25

Scilab 第一章

基本數值運算

撰文者:

1. 中央大氣科學系

2.

( 如對本文有貢獻者,記得在此留名 )

楊善文

Conférencier : Prénom Nom

Date :

Transparent 1

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

基本運算

在指令界面的 '-->' 之後,即可輸入運算字串。

例子:

--> 1+1

Ans

2.

--> log(10)

Ans

2.3025851

( 至於為什麼 log10 不等於 1, 之後筆者會做說明 )

按下 [Enter]

=

按下 [Enter]

=

Conférencier : Prénom Nom

Date :

Transparent 2

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

基本算符

加減乘除: + - * /

自然數的次方: e x 在 scilab 上,要寫成: exp(x)

絕對值: abs() ,例如: abs(-3)

矩陣轉數值:在算符前加上 ''.'' ,為什麼要這麼做?因 為 Scilab 在運算時,基本上都是把那些數值當做矩陣來 看待的。當你打了一大串的數值串要做運算時,卻出現 了錯誤訊息。就有可能要考慮此狀況了,這時就要將乘

Ans=

3.

或除與 exp(),sin(),cos() 等等的運算式前加上點號。例

如: .*

./ .exp()

等等,例如: 3*t.*exp(sin(t))

( 注意:指令尾端的 ';' 號,加上則運算結果將不會輸出 至螢幕上,不加則效果反之 。 )

Conférencier : Prénom Nom

Date :

Transparent 3

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

基本算符 ( )

除了加減乘除算符: + - * /

另外還有次方算符: ^

開根號: sqrt()

( 例如根號 2 表示成 sqrt(2) ,也可以直接用 2^(1/2) 或 2^(0.5) 表示。 )

括號: ()

( 例如 2 的 3 次方: 2^3)

在運算時只能使用 '()' ,其他的括號類型有

別的用途,不能在此使用。

Conférencier : Prénom Nom

Date :

Transparent 4

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

算符: log 系列

log() :這是以自然數 e=2.7182818 為底的對數。這種對 數在數學上是以 ln 來表示之。

log2() :以 2 為底的對數。

log10() :以 10 為底的對數,也是我們最熟悉的一種對 數之一。

其它少見的 log 指令:

log1p(x) :等同於 log(1+x)

logspace() :以對數方式從 a,b 取 n 等分。例如: logspace(0,2,300) : 0 到 2 之間取 300 等份 。

Conférencier : Prénom Nom

Date :

Transparent 5

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

三角函數

三種: sin(),cos(),tan(). 至於 cot,sec,csc 這三個函數 Scilab 並沒有設計,不過使用: 1/sin() , 1/cos() , 1/tan() 這樣的格式即可解決。

三個反函數: asin(),acos(),atan().

Conférencier : Prénom Nom

Date :

Transparent 6

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

雙曲線函數

這是一個跟三角函數相似但內容完全不同的函數。此類 函數與 e 有關。

三個: sinh(),cosh(),tanh()

三個反函數: asinh(),acosh(),atanh()

Conférencier : Prénom Nom

Date :

Transparent 7

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

變數宣告

在 scilab 中變數的宣告是很自由的,幾乎大部分的字串

皆可以成為變數。例如 x=3;a2=14;

但是變數開頭不可

以是數字。同時也不可以將 Scilab 內定常數更改它的數 值。

Scilab 的內定常數多半以 '%' 開頭,例如圓周率 π ,它 以 '%pi' 來表示。自然常數 e : %e 。數 i : %i 。如對 這些常數重新宣告會出現錯誤訊息。

Conférencier : Prénom Nom

Date :

Transparent 8

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

poly() 指令可以用來宣告一個多式,它的用如下:

變數 1=poly([ 根 1 數 ');

例如:

--> a=poly([2 3 4],'s')

a =

-24 + 26s - 9s^2 + s^3

根 2

根 3

],'

式中的變

Conférencier : Prénom Nom

Date :

Transparent 9

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

( )

poly() 還有另一種用,就是在函式內在加入 'coeff' 數,這時 poly() 中的 [] 內的數值則變成了數。

例如:

--> u=poly([1 3 4],'e','coeff')

u =

1 + 3e^2 + 4e^3

--> k=poly([2 4 5 7],'s','coeff')

k =

2 + 4s + 5s^2 + 7s^3

Conférencier : Prénom Nom

Date :

Transparent 10

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

式的運算

當宣告了數個多式時,也是可以用運算來對它們 進行式運算。

例子:

--> C=poly([1 3 4],'x','coeff');

--> D=poly([2 5 3],'x','coeff');

--> C+D

Ans =

3 + 8x + 7x^2

--> C*D

Ans =

2 + 11x + 26x^2 + 29x^3 + 12x^4

Conférencier : Prénom Nom

Date :

Transparent 11

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

式的

roots() 指令是 Scilab 用來式解的指令。

例子:

--> k=poly([2 4 5 7],'s','coeff');

roots(k)

Ans =

- 0.0675026 + 0.6990466i

- 0.0675026 - 0.6990466i

- 0.5792805

Conférencier : Prénom Nom

Date :

Transparent 12

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

布林運算

Scilab 有內定布林常數: ( 是與)

個變數的輸出即為: T F

布林常數也可以用在矩陣內。

%t %f

Conférencier : Prénom Nom

Date :

Transparent 13

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣

矩陣運算是 Scilab 的一個要的特長之一。也是 Scilab 使用者 最常使用到的能了。例如外部讀進來的資料處理、甚繪 圖前也的數值入矩陣等。

宣告一個矩陣。語法:矩陣 1=[ 數值 1 數值 2 數值 3 ( 數值也可以是字串類型 )

在宣告時,如在之中打 ';' 號即列。

例子:

--> A=[1 2 3 4; 5 6 7 8; 9 10 23 14]

]

A

=

1.

2.

3.

4.

5. 6. 7. 8. <===== 這就是一個矩陣了

9. 10. 23. 14.

Conférencier : Prénom Nom

Date :

Transparent 14

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣運算

矩陣在運算時,可以使用這些運算符號: + - *

運算時 ,必須矩陣特性則,進行運算。例 如相同大(M x N) 的矩陣能相加相減。相乘則必須 A 矩陣的大B 矩陣的吻合才能相乘。

矩陣內除了可數值字串外。也可以放置式來運 算。

矩陣運算的例子: --> A+B 或是 A*B

Conférencier : Prénom Nom

Date :

Transparent 15

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣的特征(Eigenvalue)

矩陣的 Eigenvalue 有個指令,其它們內容大同小 異: spec(), mtlb_eig()

宣告一矩陣 A ,則它的特征值,語法如下:
--> A=[1 2 3 4;5 6 7 8;9 10 23 14;24 17 13 44];
--> spec(A) =

57.16615

-1.2727462

16.485895

1.6207013

( 注意:Eigenvalue 一定要是方型矩陣。 )

Ans

Conférencier : Prénom Nom

Date :

Transparent 16

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

字串矩陣

Scilab 的矩陣內也可以入字串,但是字串與數值不可

在同一個矩陣內。 面的內容字串在宣告時,加上 ' ' ,以表示是字串變

數。 例子:

--> F=['d' 'ce' 'fg']

F =

!d ce fg !

( 注意: Scilab 跟 Matlab 在這部分有差異Matlab 有 字串會全部相, Scilab 不會。 )

Conférencier : Prénom Nom

Date :

Transparent 17

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

特殊矩陣

矩陣 :

zeros(m,n) :宣告一個 m x n 大面全為的矩陣。

一矩陣:

ones(m,n) :宣告一個 m x n 大面全為一的矩陣。

例子:

--> ones(2,5)

Ans

=

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

矩陣:

--> B=[]

B

=

[ ]

Conférencier : Prénom Nom

Date :

Transparent 18

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣的

在矩陣後加上' 即可。

=

例子: A

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

--> A'

Ans

=

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

Conférencier : Prénom Nom

Date :

Transparent 19

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

反矩陣的

解反矩陣的指令是 inv()

例子:

--> A=[1 3 4;2 4 6;7 3 2];

--> B=inv(A);

--> A*B

Ans

=

<== 宣告 B 為 A 的反矩陣

1.

8.82E-16

0.

-1.332E-15

1.

2.766E-17

0.

0.

1.

( 由於計算機精度問題往往求得的反矩陣只能到似解。 )

Conférencier : Prénom Nom

Date :

Transparent 20

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣內元素處理

當宣告了一個矩陣後,如使用它

例如: A=[1 2 3;4 5 6;7 8 9]

取出內含元素的例子:

--> A(1,1)

=

Ans

1.

--> A(2,1)

=

Ans

4.

--> A(3,2)

=

Ans

8.

Conférencier : Prénom Nom

Date :

Transparent 21

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣內元素處理 ( )

從之前例子應該可以輕易看出 A(i,j) 與個矩陣 A 相 對的關
至於一次取矩陣中一位址,可以使用 ' : ' 。例如:
以之前的例子: --> A(:,3) =

Ans

3.

6.

9.

--> A(3,:) =

Ans

7.

8.

9.

Conférencier : Prénom Nom

Date :

Transparent 22

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

矩陣內元素處理 ( )

Scilab 的矩陣也可以範圍資料, ' : ' 也可以 用來表從哪裡哪裡,不宣告就是一次一整排
例如 ( 以之前的 A 做例子 ) :
--> A(1:2,2:3) =

Ans

2.

3.

5.

6.

( 範圍資料這個能在實驗室資料處理非 常常用。 )

Conférencier : Prénom Nom

Date :

Transparent 23

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

Scilab 矩陣的使用技巧

當你宣告一個矩陣 ( 例如 B=[ ]) 後,可以直接宣告 B(i,j)=' 你要輸入的數值 ' 。這時矩陣就會到你輸 入的大。其他元素則會補零。例如: --> B(3,4)=6;

--> B

B

=

0.

0.

0.

0.

0.

0.

0.

0.

0.

0.

0.

6.

Conférencier : Prénom Nom

Date :

Transparent 24

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp

技巧用:例如有三份資料,其中份是衛星飛越經度 (Y) 與 緯度 (X) ,另一份是所被測量濃度值 (Z) 。然後我們要將之出 一個濃度佈圖。這三份資料是以時間來資料的。 ( 在這區域,從 0 時到 24 時,有衛星飛過上(X,Y) ,過時都會端一筆觀測資 料Z 。 )

: ( 當 X,Y,Z 的值都已各存成一個矩陣後。 )

for i=1:2880

U(X(i),Y(i))=Z(i); <== 這就是將 Z X,Y 的方

end

<== 設一天資料 2880 筆

<==for

end ( 這是 Scilab 的

k=size(U);

t1=1:k(1);t2=1:k(2);

迴圈,本例是從 1 到 2880 , Scilab 式設計的部分,筆者以後還 會到。 ) <==size() 可以用來看矩陣的大小 <==Scilab 在等值線 (contour) 時,是宣告矩陣的大。這些 之後還會到。

contour(t1,t2,U,20)

Conférencier : Prénom Nom

Date :

Transparent 25

Fichier : /albafile/重要文件/SCILAB資料/自製的Scilab教材/SCILAB Chap1 odp