標籤:

MATLAB的數據類型(一)

MATLAB的數據類型(一)

來自專欄 MATLAB學習5 人贊了文章

前言

經過前面幾次的「扯皮」,相信大家已經對MATLAB有有一定的了解了。從本次開始,我們將會進入MATLAB的基礎篇,可能會有點無聊與枯燥,但沒有這些我們又如何拿MATLAB去開闢「美麗新世界」。在開始學習MATLAB之前,請確保你有學過《線性代數》或者與矩陣相關的數學,因為MATLAB的「靈魂」就是矩陣,只是一個工具而已。首先我們進入的MATLAB的數據類型,大概會分成三次來介紹,帶各位對MATLAB的數據類型有一個比較全面的認識。本次主要介紹MATLAB數據類型(一),包括的內容有常量與變數、數值類型、邏輯類型。其實在MATLAB中最重要的數據對象就是矩陣,MATLAB的大部分運算或命令都是在矩陣運算的意義下執行的,並且這種運算時定義在複數域上的。

  • 常量與變數
  • 數值類型
  • 邏輯類型

常量與變數

在計算機高級語言中,數據有兩種表現形式:常量與變數。常量是指其值不能被改變的量如2,3.14,-356等;而變數代表的是一個有名字的、具有特定屬性的一個儲存單元。下面主要介紹變數的相關問題。

變數的命名

變數代表一個或者若干個內存單元,為了對變數所對應的存儲單元進行訪問,需要對變數進行命名。這給人取名字的道理是一樣的。在MATLAB中,變數不需要像C語言一樣先進行預先聲明才可以使用,直接就可以進行賦值。如:

1a = 3.14

但是在給變數命名的時候需要遵循如下規則,名字是不能亂取的。

  • 變數名和函數名對字母的大小寫敏感,故而a與A是兩個不同的變數名。
  • 變數名必須以字母開頭,其後可以是任意字母或下劃線,但是不能有空格、中文或標點,例如_xy、a.b均是不合法的變數名,而classNum_x是一個合法的變數名。
  • 不能使用MATLAB的關鍵字作為變數名。避免使用函數名作為變數名,如果你使用了函數名,則該函數失效。如果你使用sin = 1,則在未清理緩存的情況下,將會出現sin(1) = 1,所以不要使用,以免造成不必要的麻煩。
  • 變數名最多可包含63個字元,從第64個字元開始之後的字元將會被忽略。

在給變數進行命名的時候盡量做到「見名知意」,推薦使用駝峰式或者帕斯卡式。對變數進行命名是程序員界「第一大難題」,熟悉的英文也就那幾個,有時候命個名還要去翻一翻字典。

MATLAB中,可以通過調用isvarname函數,來驗證變數名是否符合MATLAB所接受的合法變數名。該函數值返回值為1或0,1代表合法,0代表不合法。

1>> isvarname(_xy)2ans =3 logical4 05>> isvarname(classNum_x)6ans =7 logical8 1

預定義變數

預定義變數就是系統已經定義好了的變數,我們可以把它們當做常量來看待。有如下幾種類型:

預定義變數描述ans系統默認的用作保存運算結果的變數名pi圓周率eps機器零閾值,MATLAB中的最小數inf表示無窮大NaN或nan表示不定數i或j虛數單位nargin函數的輸入參數個數nargout函數的輸出參數個數realmin可用的最小正實數realmax可用的最大正實數bitmax可用的最大正整數(以雙精度格式存儲)varargin可變的函數輸入參數varargout可變的函數輸出參數beep使計算機發出「嘟嘟」的聲音

舉一個例子

根據S=πr2,計算當r=3時,圓的面積。

1 pi*(3^2)

輸出:

1ans =2 28.2743

關鍵字

關鍵字是MATLAB程序設計中常用到的流程式控制制變數,共有20個,前面提到了不建議使用關鍵字作為變數的名字,因而在此列舉出來,這些我們在後面還會提到。在命令行窗口輸入命令iskeyword,即可查詢到:

1>> iskeyword 2ans = 3 20×1 cell 數組 4 break 5 case 6 catch 7 classdef 8 continue 9 else10 elseif11 end12 for13 function14 global15 if16 otherwise17 parfor18 persistent19 return20 spmd21 switch22 try23 while

變數的內容還有很多,在此就不再仔細說明了,如果以後用到再說。

數值類型

基本的數值類型主要有整數、單精度浮點數和雙精度浮點數。

整數類型

MATLAB中提供了8種內置的整數類型,這8種類型的存儲佔位數、能表示的數值範圍和轉換函數均不相同。

整數類型數值範圍轉換函數有符號8位整數?27~27?1int8無符號8位整數0~28?1uint8有符號16位整數?215~215?1int16無符號16位整數0~216?1uint16有符號32位整數?231~231?1int32無符號32位整數0~232?1uint32有符號64位整數?263~263?1int64無符號64位整數0~264?1uint64

不同的整數類型所佔用的位數不同,因而能夠表示的數值範圍也不相同,所以我們在使用的時候要根據實際需要來抉擇。MATLAB中默認的數值存儲類型是雙精度浮點數類型,我們在進行變數設置為整數類型時就需要使用相應的裝換函數,將雙精度浮點數轉換為指定的整數類型。下面介紹MATLAB中的取整函數。

函數運演算法則示例floor(x)向下取整floor(1.2) = 1 floor(-2.5) = -3ceil(x)向上取整ceil(1.2) = 2 ceil(-2.5) = -2round(x)取最接近的整數,如果小數部分是0.5,則向絕對值大的方向取整round(1.2) = 1 round(-2.5) = -3fix(x)向0取整fix(1.2) = 1 fix(-2.5) = -2

浮點數類型

MATLAB中提供了單精度浮點數類型和雙精度浮點數類型,其存儲佔位數、能表示的數值範圍和數值精度均不相同。

浮點類型存儲位寬各位數的意義數值範圍轉換函數單精度320-22位表示小數部分,23-30位表示指數部分,31位表示符號(0正1負)?3.4028238~?1.17549?381.17549?38~3.4028238single雙精度640-51位表示小數部分,52-62位表示指數部分,63位表示符號(0正1負)?1.79769308~?2.22507?3082.22507?308~1.79769308double

單精度浮點數的佔位數比較少,內存小,但能夠表示的數值類型範圍和精度有限。MATLAB中默認數值類型為雙精度浮點型,我們也可以通過函數來實現雙精度浮點型和單精度浮點型之間轉換。

在不同的數值類型參與的運算中,返回的數值類型要看具體情況。雙精度浮點數參與運算時,返回值的類型依賴於參與運算的其他數據類型。參與運算的其他數據為邏輯型、字元型時,返回結果為雙精度浮點型;參與運算的其他數據為整數型時,返回結果為相應的整數類型;參與運算的其他數據為單精度浮點型時,返回結果為相應的單精度浮點型。

複數

複數包括實部和虛部兩部分。MATLAB中默認使用字元ij作為虛部標誌。可以直接輸入或者利用complex函數。下面列出了關於複數的函數

函數說明函數說明real(z)返回複數z的實部imag(z)返回複數z的虛部abs(z)返回複數z的模angle(z)返回複數z的幅角conj(z)返回複數z的共軛複數complex(a,b)以a為實部、b為虛部創建複數

無窮量(inf)和非數值量(NaN)

前面也提到了,MATLAB中使用Inf和-Inf分別表示代表正無窮量和負無窮量,NaN表示非數值量。正負無窮量的產生一般是由於運算溢出,產生超出雙精度浮點數數值範圍的結果,非數值量則是由於0/0或Inf/Inf類型的非正常運算而產生,這兩個NaN彼此是不相等的。

邏輯類型

邏輯類型的數據類型是指布爾類型的數據及數據之間的邏輯關係,出現這些運算的目的是為了提供求解真/假命題的答案。作為所有關係和邏輯表達式的輸入,MATLAB把任何非零數值當作真,把零當作假。所有關係和邏輯表達式的輸出:對於真,輸出為1;對於假,輸出為0。

邏輯類型數據類型進行運算時需要用到關係操作符和邏輯運算符,這個我們在後面介紹到,在此不詳說。

編輯不易,歡迎推廣


推薦閱讀:

零基礎學matlab,需要哪些基礎知識?
MATLAB應用舉例
炒股只看MACD能賺錢嗎?
matlab中find函數的思路是怎樣的,為何可以如此高效?

TAG:編程 | MATLAB |