SlideShare a Scribd company logo
Scilab  第一章  基本數值運算 撰文者: 1. 中央大氣科學系  楊善文 2. ( 如對本文有貢獻者,記得在此留名 )
基本運算   在指令界面的  '-->' 之後,即可輸入運算字串。 例子: --> 1+1  按下 [Enter] Ans  = 2. --> log(10)  按下 [Enter] Ans  = 2.3025851 ( 至於為什麼 log10 不等於 1, 之後筆者會做說明 )
基本算符 加減乘除: + - * / 自然數的次方: e x   在 scilab 上,要寫成: exp(x) 絕對值: abs() ,例如: abs(-3)  Ans=  3. 矩陣轉數值:在算符前加上 ''.'' ,為什麼要這麼做?因為 Scilab 在運算時,基本上都是把那些數值當做矩陣來看待的。當你打了一大串的數值串要做運算時,卻出現了錯誤訊息。就有可能要考慮此狀況了,這時就要將乘或除與 exp(),sin(),cos() 等等的運算式前加上點號。例如: .*  ./  .exp()......... 等等,例如: 3*t.*exp(sin(t)) ( 注意:指令尾端的 ';' 號,加上則運算結果將不會輸出至螢幕上,不加則效果反之 。 )
基本算符 ( 二 ) 除了加減乘除算符: + -  *  / 另外還有次方算符: ^  ( 例如 2 的 3 次方: 2^3) 開根號: sqrt()  ( 例如根號 2 表示成 sqrt(2) ,也可以直接用 2^(1/2) 或 2^(0.5) 表示。 ) 括號: ()  在運算時只能使用 '()' ,其他的括號類型有別的用途,不能在此使用。
算符: 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 等份 。
三角函數 三種: sin(),cos(),tan(). 至於 cot,sec,csc 這三個函數 Scilab 並沒有設計,不過使用: 1/sin() , 1/cos() , 1/tan() 這樣的格式即可解決。 三個反函數: asin(),acos(),atan().
雙曲線函數 這是一個跟三角函數相似但內容完全不同的函數。此類函數與 e 有關。 三個: sinh(),cosh(),tanh() 三個反函數: asinh(),acosh(),atanh()
變數宣告 在 scilab 中變數的宣告是很自由的,幾乎大部分的字串皆可以成為變數。例如 x=3;a2=14;...... 但是變數開頭不可以是數字。同時也不可以將 Scilab 內定常數更改它的數值。 Scilab 的內定常數多半以 '%' 開頭,例如圓周率 π ,它以 '%pi' 來表示。自然常數 e : %e 。虛數 i : %i 。如對這些常數重新宣告會出現錯誤訊息。
多項式 poly() 指令可以用來宣告一個多項式,它的用法如下: 變數 1=poly([ 根 1  根 2  根 3  .........],' 多項式中的變數 '); 例如: --> a=poly([2 3 4],'s') a  = -24 + 26s - 9s^2 + s^3
多項式 ( 二 ) 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
多項式的運算 當宣告了數個多項式時,也是可以利用運算元來對它們進行多項式運算。 例子: --> 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
多項式的求解 roots() 指令是 Scilab 用來求多項式解的指令。 例子: --> k=poly([2 4 5 7],'s','coeff'); roots(k) Ans  = - 0.0675026 + 0.6990466i - 0.0675026 -  0.6990466i - 0.5792805
布林運算 Scilab 有內定兩個布林常數: ( 是與否 )  %t  %f 兩個變數的輸出即為: T  F 布林常數也可以用在矩陣內。
矩陣 矩陣運算是 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.
矩陣運算 矩陣在運算時,可以使用這些運算符號: + - *  運算時 ,必須把握矩陣特性的原則,才能進行運算。例如相同大小 (M x N) 的矩陣才能相加相減。而相乘則必須 A 矩陣的大小的長與 B 矩陣的寬要吻合才能相乘。 矩陣內除了可放數值、字串外。也可以放置多項式來運算。 矩陣運算的例子: --> A+B 或是 A*B
矩陣的特征值 (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) Ans  = 57.16615 -1.2727462 16.485895 1.6207013 ( 注意:求 Eigenvalue 一定要是正方型矩陣。 )
字串矩陣 Scilab 的矩陣內也可以放入字串,但是字串與數值不可以放在同一個矩陣內。  裡面的內容字串在宣告時,須加上 ' ' ,以表示是字串變數。 例子: --> F=['d' 'ce' 'fg'] F  = !  d  ce  fg  ! ( 注意: Scilab 跟 Matlab 在這部分有差異, Matlab 所有字串會全部相黏, Scilab 不會。 )
特殊矩陣 零矩陣 : 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  = [ ]
矩陣的翻轉 在矩陣後加上『 ' 』即可。 例子: A  = 1.  1.  1.  1.  1. 1.  1.  1.  1.  1. --> A' Ans  = 1.  1. 1.  1. 1.  1. 1.  1. 1.  1.
反矩陣的求得 求解反矩陣的指令是 inv() 例子: --> A=[1 3 4;2 4 6;7 3 2]; --> B=inv(A);  <== 宣告 B 為 A 的反矩陣 --> A*B Ans  = 1.  8.82E-16  0. -1.332E-15  1.  2.766E-17 0.  0.  1. ( 由於計算機精度的問題,往往求得的反矩陣只能到近似解。 )
矩陣內元素的處理 當宣告了一個矩陣後,如何使用它呢? 例如: 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.
矩陣 內元素的處理 ( 二 ) 從之前例子應該可以輕易看出 A(i,j) 與整個矩陣 A 所相對應的關係。 至於一次取矩陣中一排的位址,可以使用 ' : ' 。例如: 以之前的例子: --> A(:,3) Ans  = 3. 6. 9. --> A(3,:) Ans  = 7.  8.  9.
矩陣 內元素的處理 ( 三 ) Scilab 的矩陣也可以限定範圍的抓取資料, ' : ' 也可以用來代表從哪裡到哪裡,不宣告就是一次一整排。 例如 ( 以之前的 A 做例子 ) : --> A(1:2,2:3) Ans  = 2.  3. 5.  6. ( 限定範圍的抓取資料這個功能在實驗室的資料處理非常常用。 )
Scilab 矩陣的使用技巧 當你宣告一個空矩陣 ( 例如 B=[ ]) 後,可以直接宣告 B(i,j)=' 你想要輸入的數值 ' 。這時矩陣就會達到你所輸入的大小。其他元素則會補零。例如: --> B(3,4)=6; --> B B  = 0.  0.  0.  0. 0.  0.  0.  0. 0.  0.  0.  6.
實例 此技巧的實用:例如有三份資料,其中兩份是衛星飛越上空的經度 (Y) 與緯度 (X) ,另一份是該點所被測量到電子濃度值 (Z) 。然後我們要將之繪出一個濃度分佈圖。這三份資料是以時間來排列資料的。 ( 在這區域,從 0 時到 24 時,有許多衛星飛過上空 (X,Y) ,飛過時都會給接收端一筆觀測資料 Z 。 ) 寫法: ( 當 X,Y,Z 的值都已各存成一個矩陣後。 ) for i=1:2880  <== 假設一天資料 2880 筆 U(X(i),Y(i))=Z(i);  <== 這就是將 Z 對應到 X,Y 的方法 end  <==for ...... end ( 這是 Scilab 的程式言,  代表迴圈,本例是從 1 跑到 2880 ,  Scilab 程式設計的部分,筆者以後還  會講到。 )  k=size(U);  <==size() 可以用來看矩陣的大小 t1=1:k(1);t2=1:k(2);  <==Scilab 在畫等值線 (contour) 時,是需  要先宣告矩陣的大小,才能畫。這些  之後還會講到。 contour(t1,t2,U,20)

More Related Content

PDF
Python p.193 197
PDF
Ppt 78-100
PDF
Ppt 120-126
PDF
Ch9 教學
PDF
Ch11 教學
PDF
Ppt 120-126
PDF
Ppt 78-100
PDF
Appendix A 教學
Python p.193 197
Ppt 78-100
Ppt 120-126
Ch9 教學
Ch11 教學
Ppt 120-126
Ppt 78-100
Appendix A 教學

What's hot (20)

PDF
Ch12 範例
PDF
Ch9 範例
PDF
Ppt 127-135
PDF
Num py basic(1) - v01
PDF
Ppt 127-135
PDF
Math basic - v01
PDF
Ppt 136-140
PDF
Polar example
PDF
Ppt 138-142
PDF
Ppt 167-173
PDF
Ch5 教學
PDF
Taylor example
PDF
Num py basic(2) - v01
PDF
Ppt 1-25
PDF
Appendix B 教學
PDF
Ppt 51-77
PDF
Ch5 範例
PDF
Ch4 教學
PDF
Ch1 教學
PPT
P127 135 new
Ch12 範例
Ch9 範例
Ppt 127-135
Num py basic(1) - v01
Ppt 127-135
Math basic - v01
Ppt 136-140
Polar example
Ppt 138-142
Ppt 167-173
Ch5 教學
Taylor example
Num py basic(2) - v01
Ppt 1-25
Appendix B 教學
Ppt 51-77
Ch5 範例
Ch4 教學
Ch1 教學
P127 135 new
Ad

Viewers also liked (7)

PPS
Achat d'hommes
PPT
Tytyl
PPS
Infancia Roubada
PPT
Ppt Orkut
PPT
anuario 2006-2007
PPT
Regionalni spoluprace v Evrope
PPS
Ciel France
Achat d'hommes
Tytyl
Infancia Roubada
Ppt Orkut
anuario 2006-2007
Regionalni spoluprace v Evrope
Ciel France
Ad

Similar to Scilab Chap1 (20)

PDF
Python learn guide
PPTX
ncuma_pylab.pptx
PPT
第3章矩阵及其运算
PPT
第1章 Matlab操作基础
PPT
企业常用Sql
DOC
实验一 Mathematica软件简介
DOC
实验一 Mathematica软件简介
PDF
C语言学习100例实例程序
PPT
C語言 第三章 03 運算子、運算元與運算式
PDF
Ch8 教學
PDF
PDF
PDF
PPT
07 陣列與字串
PPT
Python story
PDF
PDF
JavaScript 快速複習 2017Q1
PDF
Ch10 習題
PPT
人机对弈编程概述
PDF
Python learn guide
ncuma_pylab.pptx
第3章矩阵及其运算
第1章 Matlab操作基础
企业常用Sql
实验一 Mathematica软件简介
实验一 Mathematica软件简介
C语言学习100例实例程序
C語言 第三章 03 運算子、運算元與運算式
Ch8 教學
07 陣列與字串
Python story
JavaScript 快速複習 2017Q1
Ch10 習題
人机对弈编程概述

Scilab Chap1

  • 1. Scilab 第一章 基本數值運算 撰文者: 1. 中央大氣科學系 楊善文 2. ( 如對本文有貢獻者,記得在此留名 )
  • 2. 基本運算 在指令界面的  '-->' 之後,即可輸入運算字串。 例子: --> 1+1 按下 [Enter] Ans = 2. --> log(10) 按下 [Enter] Ans = 2.3025851 ( 至於為什麼 log10 不等於 1, 之後筆者會做說明 )
  • 3. 基本算符 加減乘除: + - * / 自然數的次方: e x 在 scilab 上,要寫成: exp(x) 絕對值: abs() ,例如: abs(-3) Ans= 3. 矩陣轉數值:在算符前加上 ''.'' ,為什麼要這麼做?因為 Scilab 在運算時,基本上都是把那些數值當做矩陣來看待的。當你打了一大串的數值串要做運算時,卻出現了錯誤訊息。就有可能要考慮此狀況了,這時就要將乘或除與 exp(),sin(),cos() 等等的運算式前加上點號。例如: .* ./ .exp()......... 等等,例如: 3*t.*exp(sin(t)) ( 注意:指令尾端的 ';' 號,加上則運算結果將不會輸出至螢幕上,不加則效果反之 。 )
  • 4. 基本算符 ( 二 ) 除了加減乘除算符: + - * / 另外還有次方算符: ^ ( 例如 2 的 3 次方: 2^3) 開根號: sqrt() ( 例如根號 2 表示成 sqrt(2) ,也可以直接用 2^(1/2) 或 2^(0.5) 表示。 ) 括號: () 在運算時只能使用 '()' ,其他的括號類型有別的用途,不能在此使用。
  • 5. 算符: 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 等份 。
  • 6. 三角函數 三種: sin(),cos(),tan(). 至於 cot,sec,csc 這三個函數 Scilab 並沒有設計,不過使用: 1/sin() , 1/cos() , 1/tan() 這樣的格式即可解決。 三個反函數: asin(),acos(),atan().
  • 7. 雙曲線函數 這是一個跟三角函數相似但內容完全不同的函數。此類函數與 e 有關。 三個: sinh(),cosh(),tanh() 三個反函數: asinh(),acosh(),atanh()
  • 8. 變數宣告 在 scilab 中變數的宣告是很自由的,幾乎大部分的字串皆可以成為變數。例如 x=3;a2=14;...... 但是變數開頭不可以是數字。同時也不可以將 Scilab 內定常數更改它的數值。 Scilab 的內定常數多半以 '%' 開頭,例如圓周率 π ,它以 '%pi' 來表示。自然常數 e : %e 。虛數 i : %i 。如對這些常數重新宣告會出現錯誤訊息。
  • 9. 多項式 poly() 指令可以用來宣告一個多項式,它的用法如下: 變數 1=poly([ 根 1 根 2 根 3 .........],' 多項式中的變數 '); 例如: --> a=poly([2 3 4],'s') a = -24 + 26s - 9s^2 + s^3
  • 10. 多項式 ( 二 ) 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
  • 11. 多項式的運算 當宣告了數個多項式時,也是可以利用運算元來對它們進行多項式運算。 例子: --> 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
  • 12. 多項式的求解 roots() 指令是 Scilab 用來求多項式解的指令。 例子: --> k=poly([2 4 5 7],'s','coeff'); roots(k) Ans = - 0.0675026 + 0.6990466i - 0.0675026 - 0.6990466i - 0.5792805
  • 13. 布林運算 Scilab 有內定兩個布林常數: ( 是與否 ) %t %f 兩個變數的輸出即為: T F 布林常數也可以用在矩陣內。
  • 14. 矩陣 矩陣運算是 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.
  • 15. 矩陣運算 矩陣在運算時,可以使用這些運算符號: + - * 運算時 ,必須把握矩陣特性的原則,才能進行運算。例如相同大小 (M x N) 的矩陣才能相加相減。而相乘則必須 A 矩陣的大小的長與 B 矩陣的寬要吻合才能相乘。 矩陣內除了可放數值、字串外。也可以放置多項式來運算。 矩陣運算的例子: --> A+B 或是 A*B
  • 16. 矩陣的特征值 (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) Ans = 57.16615 -1.2727462 16.485895 1.6207013 ( 注意:求 Eigenvalue 一定要是正方型矩陣。 )
  • 17. 字串矩陣 Scilab 的矩陣內也可以放入字串,但是字串與數值不可以放在同一個矩陣內。 裡面的內容字串在宣告時,須加上 ' ' ,以表示是字串變數。 例子: --> F=['d' 'ce' 'fg'] F = ! d ce fg ! ( 注意: Scilab 跟 Matlab 在這部分有差異, Matlab 所有字串會全部相黏, Scilab 不會。 )
  • 18. 特殊矩陣 零矩陣 : 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 = [ ]
  • 19. 矩陣的翻轉 在矩陣後加上『 ' 』即可。 例子: A = 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. --> A' Ans = 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
  • 20. 反矩陣的求得 求解反矩陣的指令是 inv() 例子: --> A=[1 3 4;2 4 6;7 3 2]; --> B=inv(A); <== 宣告 B 為 A 的反矩陣 --> A*B Ans = 1. 8.82E-16 0. -1.332E-15 1. 2.766E-17 0. 0. 1. ( 由於計算機精度的問題,往往求得的反矩陣只能到近似解。 )
  • 21. 矩陣內元素的處理 當宣告了一個矩陣後,如何使用它呢? 例如: 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.
  • 22. 矩陣 內元素的處理 ( 二 ) 從之前例子應該可以輕易看出 A(i,j) 與整個矩陣 A 所相對應的關係。 至於一次取矩陣中一排的位址,可以使用 ' : ' 。例如: 以之前的例子: --> A(:,3) Ans = 3. 6. 9. --> A(3,:) Ans = 7. 8. 9.
  • 23. 矩陣 內元素的處理 ( 三 ) Scilab 的矩陣也可以限定範圍的抓取資料, ' : ' 也可以用來代表從哪裡到哪裡,不宣告就是一次一整排。 例如 ( 以之前的 A 做例子 ) : --> A(1:2,2:3) Ans = 2. 3. 5. 6. ( 限定範圍的抓取資料這個功能在實驗室的資料處理非常常用。 )
  • 24. Scilab 矩陣的使用技巧 當你宣告一個空矩陣 ( 例如 B=[ ]) 後,可以直接宣告 B(i,j)=' 你想要輸入的數值 ' 。這時矩陣就會達到你所輸入的大小。其他元素則會補零。例如: --> B(3,4)=6; --> B B = 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 6.
  • 25. 實例 此技巧的實用:例如有三份資料,其中兩份是衛星飛越上空的經度 (Y) 與緯度 (X) ,另一份是該點所被測量到電子濃度值 (Z) 。然後我們要將之繪出一個濃度分佈圖。這三份資料是以時間來排列資料的。 ( 在這區域,從 0 時到 24 時,有許多衛星飛過上空 (X,Y) ,飛過時都會給接收端一筆觀測資料 Z 。 ) 寫法: ( 當 X,Y,Z 的值都已各存成一個矩陣後。 ) for i=1:2880 <== 假設一天資料 2880 筆 U(X(i),Y(i))=Z(i); <== 這就是將 Z 對應到 X,Y 的方法 end <==for ...... end ( 這是 Scilab 的程式言, 代表迴圈,本例是從 1 跑到 2880 , Scilab 程式設計的部分,筆者以後還 會講到。 ) k=size(U); <==size() 可以用來看矩陣的大小 t1=1:k(1);t2=1:k(2); <==Scilab 在畫等值線 (contour) 時,是需 要先宣告矩陣的大小,才能畫。這些 之後還會講到。 contour(t1,t2,U,20)