01.前言——Matlab語言基礎

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列在01間均勻分佈的隨機數
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行列數必須相等,分別判斷相對應的元素是否相等,相等返回1true),不等返回0false)
       注意,邏輯判斷爲雙等號,區別於賦值單等號
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,即求得110的和。
注:與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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章