MATLAB基本操作
- 創建數組
- 基於方括號創建
- 冒號創建行向量
- 函數創建
- 基於數組的拼接
- 數組數據提取
- 數組數據的相互賦值
- end的使用用法:end再下標表達式當中表示最後一個下標值
- 相關運算
- 算術運算符
- 關係運算符
- 邏輯運算符
- 數據類型
- cell數據類型
- IO操作
- 常用函數
- sum
- mean
- max min
- length size
- sort
- find
- fix 取整函數
- 結構化編程
- 分支結構
- if
- switch
- 循環結構
- for循環結構
- while循環結構
- 控制語句
- continue break
- 模塊化編程
- 腳本文件
- 函數文件
- 主函數與子函數
- 定義簡單函數
- inline函數
- 模塊化設計
創建數組
基於方括號創建
此時要注意的是,同行元素用“空格或者逗號”分割,不同行元素用分號“;”或者換行分隔。
x=[1 2 3 ] %行向量
x=[1 3;4 5;7 8]%矩陣
冒號創建行向量
基本格式:
起始:步長:終點
特別的:a:b相當於a:1:b
x=1:5
x=1:2:9 %[1 3 5 7 9]
x=10:-2:1 %[10 8 6 4 2]
函數創建
- linespace(a,b,n) 含義是將區間[a,b]用n個數均勻等分成n-1份
例如
x=linespace(0,10,5) %x=[0 2.5 5 7.5 10]
- 空矩陣 a=[]
- rand(a,b)產生a行b列的隨機矩陣
- zeros(m,n)產生m行n列的零矩陣
- ones(m,n)產生m行n列的全為1矩陣
- eye(m,n)產生m行n列單位陣
基於數組的拼接
- [A B] 橫向拼接 要求A,B行數相同
- [A;B] 縱向拼接 要求A,B列數相同
數組數據提取
訪問數組使用圓括號
x(i) %訪問x第i個元素
x(a:b:c) %相當於從第a個元素開始 到第c個元素,均勻的訪問5個元素
x(i,j) %訪問第i行j列元素
x(r,:) %獲取第r行
x(:,c) %獲取第c列
x(行下標集,列下標集) %獲取對應子陣
x(:) %將數組排成列向量
數組數據的相互賦值
確保賦值語句左右維數相同
如:
A(i,:)=B(k,:) %講B的第k行賦值給A的第i行
A([1 2],:)=V %將矩陣V賦值給A的1 2 行
%用空矩陣複製可以起到刪除的作用
A(i1:i2,:)=[];
A(:,j1:j2)=[];
end的使用用法:end再下標表達式當中表示最後一個下標值
1.如果end出現在一個向量的下標中,則表示向量的元素個數(最後一個元素)
2.如果end出現在一個矩陣的行下標位置,則表示矩陣的行數
3.如果end出現在一個矩陣的列下標位置,則表示矩陣的列數
例如:
A=rand(1,10)
A(end)%取第十個元素
相關運算
算術運算符
|
對象
|
運算符
|
|
矩陣
|
+ - * / \ ^ ’
|
|
數組
|
.* ./ .\ .^
|
|
標量
|
+ - * / ^ \
|
\ /的區別是左除與右除的區別
點乘,點除等運算是矩陣對應位置元素進行對應操作
矩陣乘除遵循矩陣乘法法則
’ 指的是矩陣的轉置
關係運算符
|
符號
|
名稱
|
|
<
|
小於
|
|
<=
|
小於等於
|
|
>
|
大於
|
|
>=
|
大於等於
|
|
==
|
等於
|
|
~=
|
不等於
|
邏輯運算符
邏輯運算符是邏輯logic數據 0假1真
|
符號
|
名稱
|
|
與
|
&
|
|
或
|
豎線(打不出來)
|
|
非
|
~
|
數據類型
常用數據類型 double char sym struct cell
當然還有很多其他的不常用數據類型,例如 tree 。
使用whos+變量名 命令
使用class+變量名命令
不過最常使用的還是看內存窗口來看變量類型以及佔用內存情況
cell數據類型
%%創建一個cell
A=cell(m,n);%創建了m行n列的cell
%%提取數據採用大括號
A{i};
A{i,j};
例如:
>>a=cell(2,3)
a=
[] [] []
[] [] []
>>a[1,1]='abc' ; a[1,2]=rand(3);a(1,3)=cell(1,2);
>>a
a=
'abc' [3×3 double] [1×2 cell]
[] [] []
cell與數組最大的不同就是cell中可以含有不同數據類型的元素,這就極大簡化了數據的存儲
IO操作
三個IO函數
input 輸入函數
disp 顯示數組內容函數
sprintf 將數組內容格式化字符串進行顯示
input(提示信息字符數組)
g=input('please input your grade');%引號內為提示信息,輸入信息賦值給g
%%input 可以有兩個參數
g=input('what is your name','s');%'s'表示g是一個字符數組。其餘參數可以使用help查詢文檔
disp(變量名)
disp用於展示變量名中的內容不輸出變量名,例如
>>a=[1 2 3 4 5];
>>disp(a)
1 2 3 4 5
>> a
a=
1 2 3 4 5
格式輸出函數sprintf
str=sprintf(formatSpec,A1,A2,······An)
將A1······An按照formatSpec格式化為字符串賦值給str
%d %f %c %s 與C語言中的格式含義相同
%5d中的數字表示字符串的長度
常用函數
sum
- sum(v) 求向量v中各個元素的和
- sum(A,1) 求矩陣A中每列的和,將每列和構成一個行向量返回
- sum(A,2) 求矩陣A中每行的和,將每行和構成一個列向量返回
注意 sum(A)相當於sum(A,1)
mean
- mean(v) 求向量v中元素的平均值
- mean(A,1) 求矩陣A中每列的平均值,將每列平均值構成一個行向量返回
- mean(A,2) 求矩陣A中每行的平均值,將每行平均值構成一個列向量返回
注意 mean(A)相當於mean(A,1)
max min
[V,I]=max(x)
- x為向量,則v為向量中的最大元素;I為最大元素在x中的下標
- x為矩陣,則v為每列最大元素組成的行向量,I則為每列最大元素行下標組成的向量。
[V,I]=min(x)
- x為向量,則v為向量中的最小元素;I為最小元素在x中的下標
- x為矩陣,則v為每列最小元素組成的行向量,I則為每列最小元素行下標組成的向量。
length size
length(x)
- 如果x為向量,則返回x的元素個數
- 如果x為矩陣,則返回矩陣行數與列數中較大的
size(x)
- 如果x為向量,矩陣則返回由行數,列數組成的向量,返回的第一個元素為行數,第二個元素為列數
sort
[B,I]=sort(v)
對向量v中的元素排序,B為遞增排序v後的元素,I為排序後數組B的元素在原數組V中位置下標
sort中引入第二個參數
sort(v,‘ascend’)%升序
sort(v,‘descend’)%降序
find
find用於查找數組中非零元素的位置
find結合邏輯運算,可以查找所需元素的下標
>>a=[1 2 3 4 5 6 7];
>>idx=find(a>=3)
idx=
3 4 5 6 7
注意 idx只是下標,要獲取相應元素值需要代碼 values=a(idx)
fix 取整函數
結構化編程
分支結構
if
用法:
%一個分支
if 邏輯表達式
語句塊
end
%兩個及更多的分支
if 邏輯表達式1
語句塊1
elseif 邏輯表達式2
語句塊2
elseif ·····
······
else
語句塊
end
注意,邏輯表達式1 邏輯表達式2 邏輯表達式3······依次判定
若語句塊n+1執行,則必須有邏輯表達式1····n全部為0。
elseif 與else if二者含義完全不同,前者在一個判斷內,後者為重新寫了一個if
前者結尾需要一個end 後者需要兩個end
switch
switch switch_expr %設定分支變量,對switch_expr進行分支討論
case case_expr
語句塊1
case case_expr0
語句塊2
case {case_expr1,case_expr2,······}%使用花括號
語句塊3
otherwise,
語句塊4
end
分支變量一般為標量或者字符串
循環結構
for循環結構
語法:
for x=array
語句塊
end
在for和end之間的 語句塊 an數組(array)中的每一列執行一次,在每一次迭代中,x被指定為數組的下一列 也就是説,在第n次循環中
x=array(:,n)
常用格式:
for 變量=初始值:步長:終值
語句塊
end
%x是行向量
for i=1:length(x)
%循環體
end
for i=x
%循環體
end
%上述兩個循環結構執行次數相同,但是i的賦值不一定相同
while循環結構
語法:
while 邏輯表達式
循環語句塊
end
當邏輯表達式中的所有元素為真,就執行循環語句塊
i=1;
while i<=50
disp(sprintf('interation %d',i))
i=i+1;
end
當兩個元素類型一致是可以使用數組拼接進行連接
兩個元素類型不一致時使用sprinf進行格式字符串拼接
控制語句
continue break
continue break常常用於for while 循環語句中,與if語句一起使用
continue 跳過本次循環,進行下一次循環
break 跳出循環,接着執行之後的語句
for x=array
語句塊1
if 邏輯表達式1,
continue,
end
語句塊2
end
for x=array
語句塊1
if 邏輯表達式1,
break,
end
語句塊2
end
模塊化編程
程序文件儲存格式:純文本文件–Matlab程序編譯器,記事本,寫字板編輯
腳本文件
- 腳本程序變量在腳本執行完之後任然保留在工作空間中,並且可以被其他腳本文件調用。直到用clear將變量空間清除
- 腳本程序可以調用系統空間中的變量
調用方式:
- 直接輸入文件名,不加擴展名
- 在文件中調用
······
myprog
······
- 在編譯器中按F5鍵運行
函數文件
- 與腳本文件兩點一致
- 需要設置函數的輸入參數,輸出參數
函數的編寫規範:
- 有輸入參數,輸出參數,並且完成一定功能
- 變量命名規範
- 必須以字母開頭
- 區分大小寫
- 由字母數字下劃線組成
函數語法
%函數第一行為 function [輸出參數列表] = 函數名(輸入參數列表)
%參數由逗號分隔
function[r1,r2,r3,r4] = MyFunc(a1,a2,a3,a4)
%標明4個輸入參數,3個輸出參數
%函數文件名與定義的函數名一般情況下要一致,否則,調用文件名作為函數名
%函數名要有實際意義,避免與內部函數衝突,通過help檢查是否為系統函數
%若無輸入參數
function[r1,r2,r3,r4] = MyFunc
%若無輸出參數
function MyFunc(a1,a2,a3,a4)
%既無輸出也無輸入
function MyFunc
函數書寫時可以使用兩個系統變量:nargin nargout
nargin:函數調用時輸入參數個數
nargout:函數調用時輸出參數個數
兩個常用語句 return pause
return 返回調用函數
pause 暫停運行,任意鍵執行
pause(n) 暫停n秒
主函數與子函數
一個函數文件可以定義一個或者一個以上函數
一個函數文件中第一個函數是主函數,後面定義的是子函數
注意:
- 函數文件名一般與主函數名相同
- 子函數只能被所在的函數程序文件中其他函數調用
- 調用含有子函數的函數文件時,只執行主函數的語句塊
- 主函數的語句塊包含了調用某些子函數的語句
函數文件調用規則
- 主函數可以調用子函數
- 子函數可以調用子函數
- 子函數不能調用主函數
- 子函數可以調用其他程序文件
- 程序文件可以使腳本程序文件,也可以是函數程序文件
定義簡單函數
inline函數
inline(expr) 根據expr建立內聯函數,函數自變量符號根據表達式自動確定
inline(expr,arg1,arg2,···) 定義時候指定自變量符號
inline(expr,N) 自變量符號為x,P1,P2,······PN
例如:
f=inline('2*x.*x-+sin(exp(x))');
x = linspace(-10,10,100);
plot(x,f(x))
用inline函數創建初等函數十分簡潔
計算多個點是,注意數組運算符的使用
匿名函數@定義方法
基本用法:@(參數列表)(函數表達式)
例如
>>f=@(x)(x.^2)
f=
@(x)(x.^2)
>> val=f(1:5)
val=
1 4 9 16 25
模塊化設計
將要實現的功能分割為幾個不同的模塊並且:
- 將功能劃分為多個模塊
- 每個模塊編寫一個函數文件
- 整個功能實現編寫一個程序(可以是函數文件,也可以是腳本文件)