Matlab語言代碼基礎
此篇matlab語言基礎代碼的整理是ZJU心橙園製作的,視頻地址可見:https://www.bilibili.com/video/av78309804?p=2
%語言代碼基礎
% 常用命令
clear 清除工作空間中的所有變量
clear x 清除工作空間中的變量x
clc 清屏
help 幫助
pwd
who 查看工作空間中的變量
whos 查看工作空間中變量的詳細信息
; 該行命令結果不在命令窗口中顯示
% 註釋,符號後的該行命令不運行
% 數學運算
+-*/ 四則運算 1+1 2-1 2*1 1/2
^n n次冪 2^3
sqrt(x) 求x的平方根;=x^(1/2) sqrt(4)
exp(x) 自然對數e的x次冪 exp(1)=e
log(x) 以自然對數e爲底的對數函數 log(exp(1))
log10(x) 以10爲底的對數函數 log10(10)
abs(x) 求x的絕對值 abs(-2)=2
mod(x,n) x除以n的餘數,例:mod(9,2)=1;
round(x) 對x四捨五入 round(1.6)=2;
fix(x) 去掉x的小數部分(向0取整) fix(1.6)=1;
ceil(x) 向正無窮取最小整數 ceil(1.6)=2;
floor(x) 向負無窮取最大整數 floor(1.6)=1;
pi 圓周率π
sin(x) sind(x) 正弦,sin(x)的參數爲弧度,sind(x)參數爲角度,
即sin(x)=sind(x/pi*180),以下介紹三角函數均是如此
cos(x) 餘弦
tan(x) 正切,即sinx(x)/cos(x)
asin(x) asind(x)反正弦,即已知正弦值求弧度/角度
acos(x) 反餘弦
atan(x) 反正切
%矩陣/向量生成
MATLAB以矩陣形式儲存,用[]定義,不同行的元素用;分隔,不同行之間元素個數必須相同。
對於任意m行n列矩陣,一般稱爲m*n的矩陣,單行/單列的矩陣一般稱爲向量,如:a=[1 3 7; 2 9 5; 4 8 6];
a=[x1:n:x2]; 以x1開始,n爲步長,到x2爲止的數列,若n爲負數,則x1>x2,n默認爲1
例:a=[2:3:8]; 得到a=[2 5 8];
a=[7:-2:-1]; 得到a=[7 5 3 1 -1];
若結束值不等於起始值加n步長,則結束值爲起始值加(n-1)步長
例:a=[1:2:6]; 得到a=[1 3 5];
ones(m,n) 生成m*n的矩陣,矩陣各元素均爲1
zeros(m,n) 生成m*n的矩陣,矩陣各元素均爲0
eye(m,n) 生成m*n的矩陣,其中對角線元素爲1,其餘元素爲0
magic(n) 生成n*n的矩陣,由1到n*2組成,且各行、各列、對角線的和均相同
repmat(x,m,n) 把矩陣x複製m行n列;
如x=[1 2; 3 4]; repmat(x,2,3)=[1 2 1 2; 3 4 3 4; 1 2 1 2; 3 4 3 4];
%矩陣/向量運算
a(n) 取出矩陣a中第n個元素,其中n爲將矩陣按列重排後的第n個值,通常稱爲一維索引(index)。
例如,對於3*3的矩陣,前三個元素分別爲第一列的三個元素,第4個元素爲第1行第2列的元素,如此類推
a(end) 取出矩陣a中最後一個元素,可以對end進行運算操作,如a(end-1)則爲取出矩陣a中倒數第二個元素
a(m,n) 取出矩陣a中第m行第n列的元素,通常稱爲二維索引。括號內亦可爲矩陣,
如a=[1 3 7; 2 9 5; 4 8 6]; 則a([1 2],[2 3])=[3 7; 9 5];
a(m,:) 取出矩陣第m行所有元素
a(:,n) 取出矩陣第n列所有元素
a(m,n)=x 將矩陣a中第m行第n列的元素賦值x;若m/n超出矩陣行/列,則補充其餘值爲0
如a=[1 3 7; 2 9 5; 4 8 6]; a(1,2)=2; 得到a=[1 2 7; 2 9 5; 4 8 6];
特別地,對於向量a,若a(n)=[],則刪除第n個元素
如a=[1:2:5]; a(2)=[]; a=[1 5];
a’ 將矩陣a轉置
a(:) 將矩陣a的元素按列堆疊,產生一個新的列向量。
如a=[1 3 7; 2 9 5; 4 8 6];則a(:)=[1 2 4 3 9 8 7 5 6]’;
reshape(a,m,n) 將矩陣a按列重排後,轉換成m行n列的新矩陣
如a=[1 2 3 4; 5 6 7 8]; 則reshape(a,4,2)=[1 3; 5 7; 2 4; 6 8];
[m,n]=size(a) 返回矩陣的行數m和列數n
length(a) 返回矩陣或向量的行列數中較大值
max(a) 返回矩陣a中每一列的最大值
min(a) 返回矩陣a中每一列的最小值
假設a=[1 2 2 3]; b=[2 3 4 5];
isequal(a,b) 判斷向量或矩陣a和b是否相同;相同,值爲1;不同,值爲0.
find(a) 找到矩陣a中所有不爲零的數,返回其位置; a=[1 2;0 3]; find(a);
%隨機與排序
rand(m,n) 生成m行n列在0到1間均勻分佈的隨機數
randn(m,n) 生成m行n列以0爲均值,1爲方差的隨機數
randi(x,m,n) 生成m行n列的矩陣,其中元素爲1到x之間的隨機整數
randperm(n) 生成1至n隨機排列的行向量
shuffle(x) 將行向量x的各元素隨機排列
注:某些版本的shuffle命令可以支持對矩陣按行或列進行隨機排列,詳情可以help shuffle查看
sort(x) 對於向量x,將x中的元素按升序排列
sort(x,DIM,mode) 對於矩陣x,將x中的元素按指定維度按指定順序排列,
其中DIM=1爲按列排序,DIM=2爲按行排序;
mode='ascend'爲升序,mode='descend'爲降序。
如對於x=[3 7 5; 0 4 2]; 則sort(x,1,'ascend')=[0 4 2; 3 7 5]; sort(x,2,'descend')=[7 5 3; 4 2 0];
%統計運算
mean(x,DIM) 計算矩陣x每列(DIM=1)或每行(DIM=2)的平均值,
如對於x=[3 7 5; 0 4 2; 2 9 7];則mean(x,1)=[1.667 6.667 4.667],mean(x,2)=[5; 2; 6];
如需計算某些元素的均值,可首先取出該元素,然後將其按列堆疊,再求均值,
如z=x(:,2:3); mean(z(:)),則可求矩陣x中第二列和第三列元素的均值
median(x) 計算矩陣x每一列的中位數
sum(x) 計算矩陣x每一列的和
std(x) 計算行向量x的方差,若x爲矩陣,計算每列的方差
%邏輯判斷
a==b 判斷a的值是否與b相等,如果a爲矩陣,b爲常數,則a中各個元素與b進行比較;
若a、b均爲矩陣,則a、b行列數必須相等,分別判斷相對應的元素是否相等,相等返回1(true),不等返回0(false)
注意,邏輯判斷爲雙等號,區別於賦值單等號
a>b 判斷a的值是否大於b
a>=b 判斷a的值是否不小於b
a<b 判斷a的值是否小於b
a<=b 判斷a的值是否不大於b
a~=b 判斷a的值是否與b不等
& 邏輯與
| 邏輯或
比較:a=[0 0 2 1]; b=[3 0 2 0];
a==b 返回[0 1 1 0] (逐個元素比較是否相等)
a~=b 返回[1 0 0 1] (逐個元素比較是否不等)
a&b 返回[0 0 1 0] (各非零元素均看作1,只有同時爲真a&b才爲真)
a|b 返回[1 0 1 1] (各非零元素均看作1,有一爲真a|b即爲真)
%循環、判斷
for … end 當滿足for條件時,執行命令,否則跳出循環,例如
n=0;
for i=1:10
n=n+i;
end
得到n=55,即求得1至10的和。
注:與C++語言不同,在for循環中,MATLAB默認步長爲1,在循環體中不需加入i=i+1語句,當然加入也並不會出錯。
while … end 當滿足while條件時,執行命令,否則跳出循環,例如
i=1;
while i<=5
a(i)=i^2;
i=i+1;
end
得到a=[1 4 9 16 25]。注意,此時必須加入i=i+1語句,否則將會陷入死循環。
在while循環中加入 break 的位置會立即退出循環。
while 1
break;
end
if … elseif … else … end
當滿足if條件時,執行命令1,否則當滿足elseif條件時,執行命令2,否則執行命令3,例如
for i=1:5
if i==1
a(i)=sqrt(i);
elseif i==3
a(i)=i^3;
else
a(i)=i+2;
end
end
得到a=[1 4 27 6 7]。由這個例子可見,循環、判斷語句往往搭配運用。
%Cell及其賦值、取值
在MATLAB中,不同類型的值不能存放於同一矩陣中,例如x=['a' 88],MATLAB會將88轉換成字符X,返回x=aX。
如果需要把不同類型的值存放在一起,需要用到Cell,以{}開始和結束,例如x={'a' 88}。
對Cell中元素的賦值和取值與矩陣類似,但是需要注意的是,{index}和(index)的意義是不同的。
例如,對於x={'string' 25; 77 'hello'},s=x{1,1}返回s=string;c=x(1,1)則返回c='string',在工作空間中c的值爲cell。
同時,cell的取值可以與矩陣的取值相結合,例如a=x{1,1}(3),返回第一個cell中的第三個元素,即字母r。
如想刪除某個cell,與矩陣類似,可通過x{m,n}={}實現。
對於Cell也可以使用repmat對其進行復制處理。
%end