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]

函數創建

  1. linespace(a,b,n) 含義是將區間[a,b]用n個數均勻等分成n-1份
    例如
x=linespace(0,10,5) %x=[0 2.5 5 7.5 10]
  1. 空矩陣 a=[]
  2. rand(a,b)產生a行b列的隨機矩陣
  3. zeros(m,n)產生m行n列的零矩陣
  4. ones(m,n)產生m行n列的全為1矩陣
  5. eye(m,n)產生m行n列單位陣

基於數組的拼接

  1. [A B] 橫向拼接 要求A,B行數相同
  2. [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

  1. sum(v) 求向量v中各個元素的和
  2. sum(A,1) 求矩陣A中每列的和,將每列和構成一個行向量返回
  3. sum(A,2) 求矩陣A中每行的和,將每行和構成一個列向量返回

注意 sum(A)相當於sum(A,1)

mean

  1. mean(v) 求向量v中元素的平均值
  2. mean(A,1) 求矩陣A中每列的平均值,將每列平均值構成一個行向量返回
  3. 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中stem函數數據點空心_數組
程序文件儲存格式:純文本文件–Matlab程序編譯器,記事本,寫字板編輯

腳本文件

  • 腳本程序變量在腳本執行完之後任然保留在工作空間中,並且可以被其他腳本文件調用。直到用clear將變量空間清除
  • 腳本程序可以調用系統空間中的變量

調用方式:

  1. 直接輸入文件名,不加擴展名
  2. 在文件中調用
······
	myprog
	······
  1. 在編譯器中按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

模塊化設計

matlab中stem函數數據點空心_matlab中stem函數數據點空心_02



將要實現的功能分割為幾個不同的模塊並且:

  • 將功能劃分為多個模塊
  • 每個模塊編寫一個函數文件
  • 整個功能實現編寫一個程序(可以是函數文件,也可以是腳本文件)