第1章:Matlab基礎

2020-08-10 14:20:31

一、Matlab數據型別:

1.數值型別:
1.1.整型:
(1).有符號整型:int8 int16 int32 int64
(2).無符號整型:uint8 uint16 uint32 uint64
1.2.浮點型:
(1).單精度浮點數:single
(2).雙精度浮點數:double,預設的數值型別。
1.3.複數:
在Matlab中用ij來表示虛數單位,但是通常習慣性地定義虛數單位i = sqrt(-1);
complex(a,b):以a爲實部,b爲虛部建立複數。
real(z):取複數z的實部。
imag(z):取複數z的虛部。
abs(z):取複數z的模。
angle(z):取複數z的輻角。
conj(z):取複數z的共軛複數。
1.4.取整函數:
round:四捨五入取整。
fix:向0取整。
floor:向下取整。
ceil:向上取整。
1.5.數據顯示格式:
format shortformat('short'):系統預設形式,保留小數點後四位。
format longformat('long'):顯示16位元有效數位。
format short e:有效數位5位加3位指數。
format long e:有效數位16位元加3位指數。
format bankformat('bank'):保留2位小數位。
format +format('+'):只給出正、負。
format rationalformat('rational'):以分數形式表示。
format hex:以十六進制數表示。
2.邏輯型別:
Matlab中以1代表邏輯真,用函數true表示;用0代表邏輯假,用函數false表示。
可以用函數logical()將數值型轉換爲邏輯型,任何非零數值轉化爲邏輯真,數值0轉化爲邏輯假。
3.字元和字串:
字元型數據用char表示,在Matlab中,字元和字串不進行區分,將單個字元看作是長度爲1的字串,都用單引號括起來。
4.函數控制代碼:
函數控制代碼的數據型別爲function_handle,函數控制代碼可以通過@符號來建立,如:

fhandle = @cos;

建立了cos函數的函數控制代碼後,就可以用fhandle來間接呼叫cos()了。
5.單元陣列型別:
單元陣列的每個元素都以單元的形式存在。
5.1.採用花括號{}建立單元陣列:

clc;clear;
c = {'中國','China';[1 2 3 4 5],100};
c{1,1}
c{2,1}
c{2,2} = []
>>ans =
    '中國'
ans =
     1     2     3     4     5
c =
  2×2 cell 陣列
    {'中國'    }    {'China'   }
    {1×5 double}    {0×0 double}

5.2.用cell()函數來建立單元陣列:

clc;clear;
c = cell(2,3);
c{1,1} = [1:3;3:5]
c{2,2} = 'China'
c{2,3} = 'Robin'
c{2,1} = 100
>>c =
  2×3 cell 陣列
    {2×3 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}
c =
  2×3 cell 陣列
    {2×3 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {'China'   }    {0×0 double}
c =
  2×3 cell 陣列
    {2×3 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {'China'   }    {'Robin'   }
c =
  2×3 cell 陣列
    {2×3 double}    {0×0 double}    {0×0 double}
    {[     100]}    {'China'   }    {'Robin'   }

5.3.用celldisp()函數顯示單元陣列的內容:

clc;clear;
c = {eye(2),'China';[1:4],100}
celldisp(c)
celldisp(c,'mycell') %給c重新命名爲mycell再顯示。
>>c =
  2×2 cell 陣列
    {2×2 double}    {'China'}
    {1×4 double}    {[  100]}
c{1,1} =
     1     0
     0     1
c{2,1} =
     1     2     3     4
c{1,2} =
	 China
c{2,2} =
  	 100
mycell{1,1} =
     1     0
     0     1
mycell{2,1} =
     1     2     3     4
mycell{1,2} =
	 China
mycell{2,2} =
  	 100

5.4.用cellplot()函數將單元陣列以彩色圖形來顯示:

clc;clear;
c = {'中國','China';[1:4],100};
figure;
out = cellplot(c,'legend');

在这里插入图片描述
5.5.單元陣列的擴充、合併、刪除(不是置空):

clc;clear;
c = {'中國','China';[1:4;2:5],10};
c{2,4} = 100 %單元陣列的擴充。
c(1,:) %顯示第一行的元素。
c(:,3) = [] %刪除第3.
d = {'北京','Beijing';[],3};
e = [c,d] %單元陣列的合併
e(2,:) = [] %刪除第2
c =
  2×4 cell 陣列
    {'中國'    }    {'China'}    {0×0 double}    {0×0 double}
    {2×4 double}    {[   10]}    {0×0 double}    {[     100]}
ans =
  1×4 cell 陣列
    {'中國'}    {'China'}    {0×0 double}    {0×0 double}
c =
  2×3 cell 陣列
    {'中國'    }    {'China'}    {0×0 double}
    {2×4 double}    {[   10]}    {[     100]}
e =
  2×5 cell 陣列
    {'中國'    }    {'China'}    {0×0 double}    {'北京'    }    {'Beijing'}
    {2×4 double}    {[   10]}    {[     100]}    {0×0 double}    {[      3]}
e =
  1×5 cell 陣列
    {'中國'}    {'China'}    {0×0 double}    {'北京'}    {'Beijing'}

5.6.其他關於單元陣列的函數:
num2cell:將矩陣轉換爲單元陣列。
cell2struct:將單元陣列轉換爲結構體。
6.結構體數據型別:
結構體是按照成員變數名組織起來的不同數據型別的集合,結構體類似於C語言的結構體數據。,每個成員變數用指針操作符「.」表示。
6.1.直接輸入法構造結構體:

clc;clear;
stu(1).name = 'Tom';
stu(1).age = 12;
stu(1).gender = 'Male';
stu(2).name = 'Jerry';
stu(2).age = 13;
stu
stu(1)
stu(2)
>>stu = 
  包含以下欄位的 1×2 struct 陣列:
    name
    age
    gender
ans = 
  包含以下欄位的 struct:
      name: 'Tom'
       age: 12
    gender: 'Male'
ans = 
  包含以下欄位的 struct:
      name: 'Jerry'
       age: 13
    gender: []

6.2.用struct()函數建立結構體變數:

clc;clear;
s = struct('type',{'big','little'},'color',{'red'},'data',{[1 2 3;2 3 4]});
s(1)
s(2)
>>ans = 
  包含以下欄位的 struct:
     type: 'big'
    color: 'red'
     data: [2×3 double]
ans = 
  包含以下欄位的 struct:
     type: 'little'
    color: 'red'
     data: [2×3 double]

6.3.rmfield()函數來刪除結構體中的成員變數:

clc;clear;
s = struct('type',{'big','little'},'color',{'red'},'data',{[1 2 3;2 3 4]});
s1 = rmfield(s,'color')
s2 = rmfield(s,{'type','color'})
>>s1 = 
  包含以下欄位的 1×2 struct 陣列:
    type
    data
s2 = 
  包含以下欄位的 1×2 struct 陣列:
    data

6.4.isstruct()函數用來判斷是否爲結構體變數,isfield()函數來判斷是否爲結構體的成員變數:

clc;clear;
s = struct('type',{'big','little'},'color',{'red'},'data',{[1 2 3;2 3 4]});
f1 = isstruct(s)
f2 = isfield(s,'neme')
f3 = isfield(s,'type')
f4 = isfield(s,{'name','type'})
>>f1 =
  logical
   1
f2 =
  logical
   0
f3 =
  logical
   1
f4 =
  1×2 logical 陣列
   0   1

6.5.fieldnames()函數用來獲取結構體的成員變數名字,orderfields()函數將結構體的成員變數按照字母順序排序:

clc;clear;
s = struct('one',1,'two',2,'three',3,'four',4);
f1 = fieldnames(s)
f2 = orderfields(s)
>>f1 =
  4×1 cell 陣列
    {'one'  }
    {'two'  }
    {'three'}
    {'four' }
f2 = 
  包含以下欄位的 struct:
     four: 4
      one: 1
    three: 3
      two: 2

6.6.struct2cell()函數將結構體轉換成單元陣列型別結構:

clc;clear;
s = struct('type',{'big','little'},'color',{'red'},'data',{[1 2 3;2 3 4]});
c = struct2cell(s)
>>  3×1×2 cell 陣列
c(:,:,1) = 
    {'big'     }
    {'red'     }
    {2×3 double}
c(:,:,2) = 
    {'little'  }
    {'red'     }
    {2×3 double}

二、運算子:

1.算數運算子:

標量和陣列運算 矩陣運算 說明
+ +
- -
.* *
./ / 左除
.\ \ 右除
.^ ^ 乘方
.' ' 轉置

2.關係運算符:

關係運算符 說明 函數
< 小於 lt
<= 小於等於 le
> 大於 gt
>= 大於等於 ge
== 恆等於 eq
~= 不等於 ne

3.邏輯運算子:
3.1.逐個元素的邏輯運算:

運算子 說明 函數
& 邏輯與 and
| 邏輯或 or
~ 邏輯非 not
邏輯互斥或 xor

3.2.避繞式/快速邏輯運算:

運算子 說明
&& 避繞式/快速邏輯與,當第一個運算元爲假時,直接返回假
|| 避繞式/快速邏輯或,當第一個運算元爲真時,直接返回真

3.3.逐位邏輯運算:
對二進制數進行逐位邏輯運算,並將結果轉換成十進制數。

函數 說明
bitand 逐位邏輯與
bitor 逐位邏輯或
bitcmp 逐位邏輯非
bitxor 逐位邏輯互斥或

三、時間和日期:

1.calendar函數的使用:

clc;clear;
calendar %返回當前所在月份的日曆。
d = 'Apr-2000';
calendar(d) %返回所需要的月份的日曆。
calendar(2000,2) %返回所需要的月份的日曆。
>>
                   Aug 2020
     S     M    Tu     W    Th     F     S
     0     0     0     0     0     0     1
     2     3     4     5     6     7     8
     9    10    11    12    13    14    15
    16    17    18    19    20    21    22
    23    24    25    26    27    28    29
    30    31     0     0     0     0     0

                   Sep 2025
     S     M    Tu     W    Th     F     S
     0     1     2     3     4     5     6
     7     8     9    10    11    12    13
    14    15    16    17    18    19    20
    21    22    23    24    25    26    27
    28    29    30     0     0     0     0
     0     0     0     0     0     0     0

                   Feb 2000
     S     M    Tu     W    Th     F     S
     0     0     1     2     3     4     5
     6     7     8     9    10    11    12
    13    14    15    16    17    18    19
    20    21    22    23    24    25    26
    27    28    29     0     0     0     0
     0     0     0     0     0     0     0

2.clock函數的用法:

>> clock %返回當前時間。
ans =
   1.0e+03 *
    2.0200    0.0080    0.0100    0.0130    0.0290    0.0243

3.date函數的用法:

>> date %返回當前日期。
ans =
    '10-Aug-2020'

4.計時函數:

%計算不同階數帕斯卡矩陣的逆矩陣所用的時間和階數的關係。
clc;clear;
tic
for i = 5:12
    a = inv(pascal(i));
    t(i - 4) = toc;
end
figure;
plot(5:12,t)
xlabel('階數');
ylabel('時間/秒');

在这里插入图片描述

四、常數和變數:

1.Matlab系統預設常數:

常數 說明
ANSans 儲存最後一次運算結果的預設變數名
pi 圓周率
INFinf 大於210242^{1024}的數
NaNnan 不定值
realmax 最大的正實數
realmin 最小的正實數
eps 浮點數的相對誤差
ij 虛數單位
nargin 函數的輸入參數的個數
nargout 函數的輸出參數的個數
varargin 可變的輸入參數的個數
varargout 可變的輸出參數的個數
beep 使計算機發出「嘟嘟」聲

2.Matlab變數:
(1).變數名的長度不超過31個字元。
(2).變數名區分大小寫。
(3).變數名必須以字母開頭,其間可以包含字母、數位、下劃線。

參考資料來源於:b站up主:古德謂爾
本文作者:Aiden Lee
創作日期:2020.8
特別宣告:文字僅供學習參考,嚴禁盜用!