官术网_书友最值得收藏!

第2章 MATLAB的基本語法

2.1 變量及其賦值

2.1.1 標識符與數據格式

標識符是標志變量名、常量名、函數名和文件名的字符串的總稱。在MATLAB中,變量和常量的標識符最長允許19個字符。字符包括全部的英文字母(大小寫共52個)、阿拉伯數字和下劃線等符號,標識符中第一個字符必須是英文字母。

在其他計算機語言中,通常設有多種數據格式,如字符型(8位)、整數型(16位)等,可節省內存和提高速度,但增加了編程的復雜性。MATLAB省去了多種數據格式,內部只有一種數據格式,那就是雙精度格式,對應于64位二進制數,這對絕大多數工程計算是足夠了。MATLAB可簡化編程,但在運算速度和內存消耗方面付出了代價。

2.1.2 矩陣及其元素的賦值

賦值就是把數賦給代表常量或變量的標識符。賦值語句的一般形式為:

變量=表達式(或數)

在MATLAB中,變量都代表矩陣,其階數為n×m,即該矩陣共有nm列。列矢量可被當作只有一列的矩陣(n×1);行矢量(或一維數組)可被當作只有一個行的矩陣(1×m);標量(或常量)應看作1×1階的矩陣。

1.賦值要求

在輸入矩陣時,應遵循以下規則:

● 整個矩陣的值應放在方括號中;

● 同一行中各元素之間以逗號“, ”或空格分開;

● 不同行的元素以分號“; ”隔開。

例如,在MATLAB的命令窗口中輸入:

      >> s=[1,2,3,4,5] %可當作一個行矢量(或一維數組)

回車后則顯示為: s= 1 2 3 4 5

因此,變量s是1×5階矩陣,該矩陣元素的值分別為:

      s(1,1)=1 s(1,2)=2 s(1,3)=3 s(1,4)=4 s(1,5)=5

又例如輸入語句:

>>w=[1 2 3 ; 3 4 5 ; 6 7 8] ← 注意分號“; ”的功能

即變量w是3×3階的矩陣。

又例如利用表達式賦值:

>>y=[?2.5*3, (1+2+4)/5, sqrt(2)]

顯示結果為: y = ?7.5000 1.4000 1.4142

如果不希望顯示處理結果,可以在語句結尾加上分號“; ”,這在編寫M文件時非常有用。例如對常量c賦值:

>>c=5; ← 注意分號“; ”的功能

按回車鍵(Enter)后,將不顯示結果,但已完成對變量c的賦值。這時若在命令窗口中輸入:

>>c

按回車鍵(Enter)后,將顯示該變量的內容: c= 5。

2.變量的元素的標注

在MATLAB中,變量的元素(即矩陣元)用圓括號“()”中的數字(也稱為下標)來注明,一維矩陣(也稱數組)中的元素用一個下標數表示,二維矩陣由兩個下標數構成,以逗號分開,對三維矩陣則由三個下標數構成。如a(2,3)表示變量a的第2行第3列元素。

在MATLAB中,也可以單獨給元素賦值,例如a(2,3)=10, x(1,2)=1.5等。如果賦值元素的下標超出了原有矩陣的大小,矩陣的行列會自動擴展。

例如: 首先輸入一變量

>>a=[1,2,3;4,5,6;7,8,9]

再輸入:

>>a(4,4)=5.6

可見,變量a的階數由3×3自動擴展成4×4階,且元素a(4,1)、a(4,2)、a(4,3)、a(1,4)、a(2,4)及a(3,4) 被自動地賦值0。這種自動擴展階數的功能只適用于賦值語句。在其他語句中若出現超階調用矩陣元素的情況,MATLAB將給出出錯提示。

變量的階數可以用size命令來獲取,例如

>>size(a)

回車可得: ans= 4 4

此時MATLAB自動給出一個臨時變量“ans”。

3.賦值技巧

在MATLAB中,為變量的賦值提供一些簡便快捷的方法。

(1)冒號操作符“: ”

在MATLAB系統中,冒號“: ”是一個非常有用的操作符,除了可以產生數組下標外,還可以產生向量及for循環。例如格式:

t=j:i:k

其功能是以j為初始值,每次增加(i稱為步長或間隔大小)直到終值k,相當于[j, j+i, j+2*i, …, k];如果i>0,并且k<j;或者i<0,且k>j,則向量t為空。當步長i =1時,可改寫為:

t=j:k

例如:

(2)利用冒號“: ”給全行的元素賦值

例如,給a的第5行全行賦值,可用冒號“: ”,輸入

      >>a(5, : )=[5,3,2,1]        ← 注意冒號“: ”的功能

(3)利用行、列標注構成新的矩陣

例如,把a的第2行和第4行及第1列和第3列交點的元素取出,構成一個新矩陣b,可輸入:

>>b=a([2,4] , [1,3])

又例如要抽去a中的第2行,第4行,第5行,可利用空矩陣[ ]的概念,輸入:

>>a([2 , 4 , 5] , : )=[ ]

矩陣的階數由5×4階降為2×4階。這里值得注意的是,空矩陣與零矩陣是兩個不同概念。空矩陣是指沒有元素的矩陣,對任何一個矩陣賦值為[ ],就是使它的元素都消失掉。零矩陣中元素是存在的,只是其數值為零。因此,利用空矩陣可以縮減矩陣的階數。

4.特殊矩陣和數組

除了采用直接輸入方法對變量賦值外,也可利用MATLAB的內部函數來對變量賦值,利用這些函數來創建和生成特殊矩陣或數組。在MATLAB中提供了許多生成矩陣的函數命令,這些函數命令存放在“matlab\elmat”目錄下。表2.1給出一些常用的生成矩陣函數。利用這些函數,可以直接生成一個矩陣或數組。關于這些函數的具體用法,可以利用help命令來獲得,下面僅對一些函數命令的使用作簡要說明。

表2.1 常用生成矩陣函數

(1)單位矩陣函數

產生主對角線元素為1,其他元素為0的單位矩陣。其調用格式如下:

A=eye(n)     返回一個n×n階單位矩陣;

A=eye(m, n)   返回一個m×n階單位矩陣,或用A=eye([m, n]);

A=eye(size(B)) 返回一個大小與矩陣B一樣的單位矩陣。

例如: >>A=eye(3)

(2)zeros函數、ones函數、rand及randn函數

這4個函數的功能如表2.1中所示,下面僅給出zeros函數的調用格式,其余3個函數的調用格式類似。

A=zeros(n)        返回一個n×n階零矩陣;

A=zeros(m, n)       返回一個m×n階零矩陣;

A=zeros(d1, d2, d3, … )  返回一個維數為d1× d2× d3×…的所有元素為0的數組;或用A= zeros([d1, d2, d3, … ]);

A=zeros(size(B))      返回一個大小與B一樣的零矩陣或數組。

例如:

(3)linspace函數和logspace函數

linspace函數的功能是將指定區間[a, b]按線性等分,而logspace函數則是將區間[a, b]按對數等分。linspace函數的調用格式如下:

y=linspace(a, b) 產生一個行矢量y,該矢量把a和b間的數等分100份而得到

y=linspace(a, b, n) 產生一個行矢量y,該矢量把a和b間的數等分n份而得到

例如:

logspace函數的調用格式與linspace函數的調用類似。

5.MATLAB內部特殊變量和常數

在MATLAB內部,為處理方便定義了一些特殊的變量和常數。

ans: 臨時變量,通常指示當前的答案。

eps: 常數,表示浮點相對精度;其值是從1.0到下一個最大浮點數之間的差值。按IEEE標準,eps=2?52,近似為2.2204e? 016,該變量值作為MATLAB一些函數計算的相對浮點精度。

realmax: 常數,表示最大正浮點數;任何大于該值的運算都溢出。在具有IEEE標準浮點格式的機器上,realmax略小于21024,近似為1.7977e+308。

realmin: 常數,表示最小正浮點數;任何小于該值的運算都溢出。在具有IEEE標準浮點格式的機器上,realmin略小于2?1022,近似為2.2251e?308。

pi: 常數,表示圓周率π=3.1415926535897…。表達式4*atan(1)和imag(log(?1))產生相同的值π。

Inf: 常數,代表正無窮大;一般被0除或溢出則產生無窮大結果。如2/0,2^10000均產生結果: Inf;而log(0)產生結果: ?Inf。

i, j: 虛數單位,表示復數虛部單位,相當于

NaN: 表示非數值。如Inf?Inf, Inf/Inf,0*Inf,0/0均產生該結果。

6.復數的賦值方式

MATLAB的每一個元素都可以是復數,實數是復數的特例。復數的虛數部分用i或j表示,這是在MATLAB啟動時就自動設定的。例如,輸入

>>c=3+5.2i

回車得: c= 3.0000+5.2000i

對復數矩陣有兩種賦值方法:

(1)可將矩陣元逐個賦予復數,例如,輸入

>>z=[1+2i,3+4i;5+6i,7+8i] 或 >>z=[1+2*i,3+4*i;5+6*i,7+8*i]

(2)將矩陣的實部和虛部分別賦值,例如,輸入

>>z=[1,3;5,7]+[2,4;6,8]*i;

兩種方法可得出同樣結果。但值得注意的是:

① 在方法(2)中省略乘號“*”,就會出錯。

② 如果在前面其他程序中曾經給i或j賦過值,這時就不能采用方法(1)或方法(2)乘號“*”方式對復數賦值,但仍可采用方法(1)中非乘號“*”方式對復數賦值。這是因為i和j已經不是虛數符號。例如,若事先已賦值i=2,這時再輸入:

>> z=[1+2*i,3+4*i;5+6*i,7+8*i]

若要采用乘號“*”方式對復數賦值,此時應輸入:

      >>clear i, j

即把曾賦值過的i和j變量清掉,恢復為虛數標識符,然后再執行復數賦值語句。

7.變量檢查

在程序調試或變量的賦值過程中,往往需要檢查工作空間中的變量、變量的階數及變量賦值內容。在檢查變量及其階數等內容時,既可用工作空間窗口,也可在命令窗口使用who或whos命令來完成檢查。當查看某變量的賦值情況時,可在命令窗口直接輸入該變量名并回車即可。若所查變量不存在(例如變量yy),屏幕將顯示如下信號:

>> yy

??? Undefined function or variable 'yy'.

表示目前沒有定義yy變量或函數。

主站蜘蛛池模板: 南靖县| 镇雄县| 庆元县| 阿合奇县| 乌海市| 绩溪县| 延庆县| 榆林市| 保山市| 淅川县| 杭锦旗| 团风县| 通河县| 大厂| 武冈市| 塔河县| 疏附县| 柘城县| 神池县| 黔江区| 内丘县| 深圳市| 泰来县| 郧西县| 遵化市| 天长市| 临桂县| 崇信县| 嘉善县| 尖扎县| 平乡县| 闻喜县| 星子县| 丹巴县| 邹平县| 鲁山县| 长葛市| 海丰县| 团风县| 金乡县| 海口市|