matlab 基礎

PamShao發表於2020-09-27

安裝

參考:連結

學習:參考連結

常量

 注意:MATLAB中的常量是可以重新賦值的,但不建議重新賦值

 

變數

以字母開頭,字母、數字和下劃線的組合,且區分大小寫

變數型別:數值型、符號型、字串型、其他(多維陣列、單元陣列、類和物件)

ans :系統變數,存放最近一次的結果

基本運算

加(+)、減(-)、乘(*)、除(/)、乘方(^)

基本函式

三角函式

對數&平方

format long  :以長格式顯示

format short  :以短格式顯示

虛數&取整

使用技巧

help  函式名

命令框中顯示

doc  函式名

彈出視窗顯示

clc

清屏,但不清變數

clear  (變數名)

清屏,且清變數(可以指定變數)

歷史命令

找佈局

是否顯示運算結果

是否加分號

命令補全

tab鍵

指令碼檔案

寫完點 - 執行

中斷執行

Ctrl+C

註釋&解釋 程式

% :加在前面是註釋單行,加在後面是解釋單行

Ctrl+R :一段程式加註釋

Ctrl+T:一段程式解除註釋

%% :將程式分為兩節

關閉所有的繪圖視窗

close all

矩陣

矩陣的輸入

用括號[ ] 建立矩陣,在一行內個數值之間可用空格或者逗號隔開,而行與行之間則用分號隔開

例如:

向量的輸入:

向量可以看成特殊的矩陣,行向量和列向量輸出時:

冒號表示式:

生成等間距行向量:v = s1:s2:s3

表示:以s1為起始值,s2為步長,每隔一個s2取一個值,直至不超過s3 的最大值,生成一個行向量,預設s2 的值為1

linspace 

生成等間距行向量

linspace(a,b,n) :生成的向量是以a為第一個值,b為最後一個值,等間距生成n個值,與 a:(b-a)/n-1:b 等價

特殊矩陣的輸入

矩陣元素的訪問

A( 要訪問的行,要訪問的列)

例如:

矩陣元素的重新賦值

首先要提取需要賦值的部分,然後用相同位數的新矩陣對其重新賦值即可

舉例:

矩陣的基本運算

 

常用函式

返回行數和列數: 

size(a,1):返回a的行數

size(a,2):返回a的列數

其他函式:

 

 

在圖片處理中的應用

1、影像檔案的讀/寫

imread :函式用來實現影像檔案的讀取

imshow:函式來顯示影像

imwrite:函式用來實現影像檔案的寫入

imfinfo:函式用來查詢影像檔案資訊

補充:

MATLAB 中的基本資料結構是由一組有序的實數或複數元素構成的陣列,同樣地,影像
物件的表達採用的是一組有序的灰度或彩色資料元素構成的實值陣列。MATLAB 中通常用二
維陣列來儲存影像,陣列的每個元素對應於影像的一個畫素值。例如,由 200 行和 300 列的
不同顏色點組成的一幅影像在 MATLAB 中採用 200*300 的矩陣儲存

1、影像的表示

一幅影像可以被定義為一個二維函式 f(x,y),其中 x 和 y 是空間(平面)座標,f 在任何
座標處(x,y)處的振幅稱為影像在該點的亮度

灰度是用來表示黑白影像亮度,0 代表純黑,255代表純白,而
彩色影像是由單個二維影像組合形成的。例如,在 RGB 彩色系統中,一幅彩色影像是由三
幅獨立的分量影像(紅、綠、藍)組成的。因此,許多為黑白影像處理開發的技術適用於彩
色影像處理,方法是分別處理三幅獨立的分量影像即可。
影像關於 x 和 y 座標以及振幅連續。要將這樣的一幅影像轉化為數字形式,就要求數字
化座標和振幅。將座標值數字化成為取樣;將振幅數字化成為量化。取樣和量化的過程如圖
所示。因此,當 f 的 x、y 分量和振幅都是有限且離散的量時,稱該影像為數字影像。

2、影像分類

根據影像資料矩陣解釋方法的不同,MATLAB 把其處理為 4 類:

亮度影像(Intensity images)

一幅亮度影像是一個資料矩陣,其歸一化的取值表示亮度。若亮度影像的畫素都是 uint8
類或 uint16 類,則它們的整數值範圍分別是[0 255]和[0 65536]。若影像的畫素是 double 類,
則畫素取值就是浮點數。規定雙精度型歸一化亮度影像的取值範圍是[0 1]

二值影像(Binary images)

一幅二值影像是一個取值只有 0 和 1 的邏輯陣列。而一幅取值只包含 0 和 1 的 uint8 類
陣列,在 MATLAB 中並不認為是二值影像。使用 logical 函式可以把數值陣列轉化為二值數
組或邏輯陣列。建立一個邏輯影像,其語法為:
B=logical(A)
其中,B 是由 0 和 1 構成的數值陣列。
要測試一個陣列是否為邏輯陣列,可以使用函式:
islogical(c)
若 C 是邏輯陣列,則該函式返回 1;否則,返回 0。

索引影像(Indexed images)

索引顏色通常也稱為對映顏色,在這種模式下,顏色都是預先定義的,並且可供選用的
一組顏色也很有限,索引顏色的影像最多隻能顯示 256 種顏色。
一幅索引顏色影像在影像檔案裡定義,當開啟該檔案時,構成該影像具體顏色的索引值
就被讀入程式裡,然後根據索引值找到最終的顏色。

RGB 影像(RGB images)

一幅 RGB 影像就是彩色畫素的一個 M×N×3 陣列,其中每一個彩色相似點都是在特定
空間位置的彩色影像相對應的紅、綠、藍三個分量。按照慣例,形成一幅 RGB 彩色影像的
三個影像常稱為紅、綠或藍分量影像。
令 fR,fG 和 fB 分別代表三種 RGB 分量影像。一幅 RGB 影像就利用 cat(級聯)操作
將這些分量影像組合成彩色影像:
rgb_image=cat(3,fR,fG,fB)
在操作中,影像按順序放置。

例如:

雙清:
clear;
clc;
讀入圖片:
a = imread("h.jpg");
b = imread("g.jpg");
顯示圖片:
imshow(a)
imshow(b)
讀取圖片資訊:
imfinfo("h.jpg") 

2、影像和資料間的轉化

資料型別:

格式轉換函式:

rgp2gray:將RGP圖片轉換成灰度圖片

將RGP圖片轉換成灰度圖片:
A = rgb2gray(a);
B = rgb2gray(b);
imshow(A);
imshow(B);

3、圖片處理

旋轉

rot90(a) :圖片逆時針旋轉90度

rot90(a,-1):圖片順時針旋轉90度

rot(a,2):圖片逆時針旋轉180度

將圖片旋轉:
imshow(rot90(a))
imshow(rot90(a,-1))
imshow(rot90(a,2))
imshow(rot90(a,-2))

翻轉

fliplr(a):圖片左右翻轉

flipud(a):圖片上下翻轉

例如:

將圖片翻轉:
imshow(fliplr(a))
imshow(flipud(a)) 

壓縮

a(1:2:end,1:2:end):矩陣的行和列每隔一行取一個,實現壓縮四倍

例如:

圖片壓縮:
imshow(a(1:2:end,1:2:end));

剪裁

a(橫座標,縱座標) 

補充:

Figure  - 資料遊標  工具,檢視圖片某一點的座標

如題:該點的橫座標為57,縱座標為177 

例如:

圖片剪裁:
imshow(a(49:89,174:241));

合併

例如:

圖片剪裁:
B = b;
c = a(49:89,174:241);
[a1,b1] = size(B);
[a2,b2] = size(c);

c(c<200) = 0; % 將c中小於200的畫素賦值為0
imshow(c);
B(1:a2,b1-b2+1:b1) = c;
imshow(B)

區域性馬賽克

原理:用區域性畫素的均值來代替該區域的畫素值

例如:

區域性馬賽克:
bb = b;
for i = 28:101
    for j = 81:154
        bb(i,j) = mean(mean(b(i:i+100,j:j+100)));% mean(b(i:i+100,j:j+100)):得出的是一個行向量,原方陣的每列的均值
    end
end
imshow(bb)

繪圖

Matlab繪圖原理:

先根據橫縱座標描點,然後將相鄰的兩個點用直線相連

二維圖繪製

figure :新建繪圖視窗

plot(x,y):x和y為長度相同的向量,分別儲存x座標和y座標資料

1、直角座標系下顯函式繪圖

例如:

clc;
clear;
figure;
x = 0 : pi / 10 : 2 * pi;% 冒號表示式:從0開始,每隔pi/100,取一個值,直到2 * pi,生成一個行向量
y = 2 * exp(-0.5 * x ) .* cos(4 * pi * x );%兩個向量之間用點乘
plot(x,y);

2、 直角座標系下引數方程所確定函式的繪圖

例如:

clc;
clear;
figure;
t = 0 : 0.01 : 0.2;
x = t;
y = t - 1/2 * 9.8 * t.^2;
plot(x,y);

3、極座標系下繪圖

polar(theta,rho)   theta:極角  rho:極徑、

polarplot - 在極座標中繪製線條,polar - (不推薦)極座標圖

例如:

 

clc;
clear;
theta = 0 : 0.01 :6 * pi;
rho = 5 * sin ( 4 * theta / 3 );
polar(theta,rho)
% polarplot(theta,rho) 也可以 
% polarplot - 在極座標中繪製線條,polar - (不推薦)極座標圖

4、直角座標系下隱函式繪圖

(1)對於函式f = f(x) ,ezplot函式的呼叫格式為:

ezplot(f):在預設區間 -2 π < x < 2π,繪製 f 的圖形

ezplot(f, [a,b]):在預設區間 a< x < b,繪製 f 的圖形

ezplot - (不推薦)易用的函式繪圖函式 

例如:

ezplot("cos(x)")
%fplot(@(x)cos(x))% fplot("cos(x)"):fplot 將不接受字元向量或字串輸入

Additional Information:
If the expression you are plotting uses the assignment operator (=), the equality relation operator (==), or more than 1 variable, use the fimplicit function instead of ezplot. Otherwise, use fplot instead of ezplot.
Both fplot and fimplicit require that the input function to plot is a function handle. The ezplot function accepted either a function handle or character vector.
For example, use fplot(@(x) sin(x.^2)) instead of ezplot('sin(x^2)') or fimplicit(@(x,y) sin(x)-cos(y)) instead of ezplot('sin(x)=cos(y)').



如果要繪製的表示式使用賦值運算子(=),相等關係運算子(==)或多個變數,請使用fimplicit函式而不是ezplot。 否則,請使用fplot而不是ezplot。
fplot和fimplicit都要求要繪製的輸入函式是函式控制程式碼。 ezplot函式接受函式控制程式碼或字元向量。
例如,使用fplot(@(x)sin(x。^ 2))而不是ezplot('sin(x ^ 2)')或fimplicit(@(x,y)sin(x)-cos(y)) 而不是ezplot('sin(x)= cos(y)')。

(2)對於隱函式 f  = f ( x ,y )

ezplot(f):在預設區間 -2 π < x < 2π 和 -2 π < y < 2π,繪製 f (x, y ) =0 的圖形

ezplot(f, [xmin,xmax ,ymin,ymax]):在預設區間 xmin < x < xmax  和 ymin < y < ymax,繪製 f (x, y ) =0 的圖形

ezplot(f, [a,b]):在預設區間 a< x < b 和 a< y < b,繪製 f (x, y ) =0 的圖形

ezplot('x^3 + y^3 - 5*x*y + 1/5',[-5 5 -4 4])

(3)對於x = x(t) 和 y = y(t)

ezplot(x,y):在預設區間 -2 π < t < 2π,繪製x = x(t) 和 y = y(t)的圖形

ezplot(x,y, [tmin,tmax]):在預設區間 tmin < t < tmax ,繪製x = x(t) 和 y = y(t)的圖形

ezplot('8*cos(t)','4*sqrt(2)*sin(t)')

二維圖修飾 

1、線的修飾

plot(x,y,LineSpec) :利用繪圖引數Linespec 來設定線型、節點型別和顏色

例如:

clc;
clear;
figure;
x = 0 : pi / 100 : 2 * pi;% 冒號表示式:從0開始,每隔pi/100,取一個值,直到2 * pi,生成一個行向量
y = 2 * exp(-0.5 * x ) .* cos(4 * pi * x );%兩個向量之間用點乘
plot(x,y,'r*-');  % 線型為實線、顏色為紅色、節點型別為*

 

 

plot(x,y,屬性1,屬性1的值,屬性2,屬性2的值......) :修改LineStyle 來設定線型、Marker 節點型別、Color顏色、線寬LineWidth

clc;
clear;
figure;
x = 0 : pi / 100 : 2 * pi;% 冒號表示式:從0開始,每隔pi/100,取一個值,直到2 * pi,生成一個行向量
y = 2 * exp(-0.5 * x ) .* cos(4 * pi * x );%兩個向量之間用點乘
plot(x,y,'colo','c','LineStyle',':','Marker','<','LineWidth','3');  % 線型為:、顏色為綠色、節點型別為<、線寬為2

2、圖的修飾

(1)圖示題:title('圖的標題')

(2)x軸標籤:xlabel('x軸名稱')    y軸標籤:ylabel('y軸名稱')

(3)圖例:legend('曲線1名稱','曲線2名稱',....)

(4)色條:colorbar;  顯示色條, colorbar(off);關閉色條  ,主要用於三維圖

(5)grid on ; 開網格  ,grid off ;關網格

(6)axis([a b c d]) 設定座標上下界,a<x<b,c<y<d

例如:

clc;
clear;
figure;
x = -2*pi : pi/100 : 2*pi;
y = cos(x);
plot(x,y)
title('y = cos(x)');
xlabel('x軸');
ylabel('y軸');
colorbar;
grid on;
axis([-6,6,-1,1]);

(7)hold on  :重新生成另外一個影像

一張畫布上生成多個影像:

第一種方法:

clc;
clear;
figure;
x = 0:pi / 10 :2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'ro-',x,y2,'g+:');  % 放到一個figure中

第二種方法:

clc;
clear;
figure;
x = 0:pi / 10 :2*pi;
y1 = sin(x);
plot(x,y1,'ro-'); 
hold on;
y2 = cos(x);
plot(x,y2,'g+:'); 
hold on;
y3 = sqrt(x);
plot(x,y3,'b>-'); 

加上legend:

clc;
clear;
figure;
x = 0:pi / 10 :2*pi;
y1 = sin(x);
plot(x,y1,'ro-'); 
hold on;
y2 = cos(x);
plot(x,y2,'g+:'); 
hold on;
y3 = sqrt(x);
plot(x,y3,'b>-'); 
legend("sin(x)","cos(x)","sqrt(x)");

 

(8)subplot (m,n,p) :將圖形視窗分為m*n個繪圖區,即m行,n列,區號按行優先編號,選定第p個區為當前活動區,每個繪圖區單獨繪製圖形 。

clc;
clear;
figure;
x = 0:pi / 10 :2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = sqrt(x);
y4 = x;
subplot(2,2,1),plot(x,y1,'ro-'); 
subplot(2,2,2),plot(x,y2,'g+:'); 
subplot(2,2,3),plot(x,y3,'b>-'); 
subplot(2,2,4),plot(x,y4,'c<-.'); 

特殊情況:

clc;
clear;
figure;
x = 0:pi / 10 :2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = sqrt(x);
subplot(2,2,1),plot(x,y1,'ro-'); 
subplot(2,2,2),plot(x,y2,'g+:'); 
subplot(2,1,2),plot(x,y3,'b>-');

clc;
clear;
figure;
x = 0:pi / 10 :2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = sqrt(x);
subplot(1,2,1),plot(x,y1,'ro-'); 
subplot(2,2,2),plot(x,y2,'g+:'); 
subplot(2,2,4),plot(x,y3,'b>-');

三維圖表示

plot3(x1,y1,z1,選項1,.......)  :三維圖的繪製

例如:

 

clc;
clear;
figure;
t = 0:pi/100:20*pi;
x = sin(t);
y = cos(t);
z = t .* sin(t) .* cos(t);
plot3(x,y,z);

三維曲面的繪製

已知二元函式 z = f (x,y)

1、[x,y] = meshgrid(v1,v2) :生成網格資料,其中v1與v2為x軸與y軸的分割方式

2、z = f(x,y):計算z

3、mesh(x,y,z):繪製網格圖

4、surf(x,y,z):繪製表面圖

5、surfl(x,y,z):光照下的二維曲面

6、waterfall(z,y,z):瀑布型三維圖形

例如:

clc;
clear;
figure;
[x,y] = meshgrid(-10:10);
z = 1./(1 + (x .^2 + y .^2) .^2 / 200);
mesh(x,y,z);

clc;
clear;
figure;
[x,y] = meshgrid(-10:0.2:10);
z = 1./(1 + (x .^2 + y .^2) .^2 / 200);
surf(x,y,z);

[x,y] = meshgrid(-10:0.2:10);
z = 1./(1 + (x .^2 + y .^2) .^2 / 200);
surfl(x,y,z);

[x,y] = meshgrid(-10:0.2:10);
z = 1./(1 + (x .^2 + y .^2) .^2 / 200);
waterfall(x,y,z);

 MATLAB 還可以繪製其他很多圖形,例如:直方圖、散點圖、柱狀圖、餅圖、登高線圖、熱圖等

可以輸入:檢視圖形種類以及相關使用方法

doc type of Matlab plots    

自定義函式

1、在MATLAB中新建指令碼檔案

2、函式格式:

function [輸出變數列表] = 函式名 (輸入變數1,輸入變數2,.....)

              根據輸入變數計算各個輸出變數

end

3、儲存指令碼,指令碼名字必須函式名

4、在其他程式中呼叫此函式,呼叫格式為:

  [輸出變數列表] = 函式名(輸入變數1,輸入變數2,........)

舉例

%myfun.m
function [outputArg1,outputArg2,outputArg3] = myfun(inputArg1,inputArg2)
% 根據輸入的兩個同形矩陣A和B,分別計算A+B、A-B、A.*B
outputArg1 = inputArg1 + inputArg2;
outputArg2 = inputArg1 - inputArg2;
outputArg3 = inputArg1 .* inputArg2;
end
>> A1 = [1,2,3;4,5,6];
>> A2 = [7,8,9;6,4,3];
>> [a,b,c] = myfun(A1,A2);

迴圈

for 

語法:

for  i = V

  迴圈結構體

end

註釋: i是迴圈變數,V是一個向量,i在V中不斷地取值,每取一個值就執行一次迴圈體的內容  

例1:

clc;
clear;
s = 0;
for i =1 : 100;
    s = s + 1 / i;
end

例2:  

clc;
clear;
s = 0;
for i =1 : 2 : 100;
    s = s + 1 / i;
end

例3:

clc;
clear;
s = 0;
for i = [2,3,5,7,11,13,17,19];
    s = s + 1 / i;
end

while

語法:

while (條件)

  迴圈結構體

end

注:條件是一個邏輯表示式,放棄值為真時,執行結構體,直到其值為假時結束  

 例1:

clc;
clear;
s = 0;
i = 0;
while s <= 100
    i = i + 1;
    s = s + i;  
end 

 

選擇

if

語法1:

if 條件

  命令組1

else

  命令組2

end

注:當條件滿足執行命令組1,當條件不滿足時執行命令組2  

語法2:

if 條件1

  命令組1

elseif  條件2

  命令組2

..........

else

  命令組n

end

語法3:  

if 條件
  命令組1
end

注:當條件滿足執行命令組1時,當條件不滿足時什麼都不執行

例1:

 

clc;
clear;
d = input('請輸入分數:');% 輸入函式
if d >= 60
    out = 1;
else
    out = 0;
end 

例2:

clc;
clear;
d = input('請輸入分數:');
if d >= 90
    disp('優');
elseif d >= 80
    disp('良');
elseif d >= 70
    disp('中');
elseif d >= 70;
    disp('及格');
else
    disp('差');
end

例3:

clc;
clear;
d = input('請輸入分數:');
if d >= 90
    disp('優');
end
if d >= 80 && d < 90
    disp('良');
end
if d >= 70 && d < 80
    disp('中');
end
if d >= 60  && d < 70
    disp('及格');
end
if d < 60
    disp('差');
end

switch

語法:

switch 表示式

case  表示式1

  語句組1

case  表示式2

  語句組2

.........

case 表示式n 

  語句組n

otherwise 

  語句組n+1

end

注:表示式必須是標量和一個字串:當表示式與表示式1相同時,執行語句1,當表示式與表示式2相同時,執行語句2,以此類推。當與所有的表示式都不同時,執行語句n+1

例1:

clc;
clear;
d = input('請輸入分數:');
ava = fix(d / 10);% 取整,只保留整數部分
switch ava
    case {9,10}
        disp('優');
    case 8
        disp('良');
    case 7
        disp('中');
    case 6
        disp('及格');
    otherwise
        disp('差');
end

例2:

clc;
clear;
price = input('請輸入價格:');
ava = fix( price / 100);% 取整,只保留整數部分
switch ava
    case {0,1} % 價格小於200
        rate = 0;
    case {2,3,4}  % 價格大於200小於500
        rate = 3 / 100;
    case num2cell(5:9) % 價格大於等於500小於1000 ,num2cell :將矩陣裝換成數字
        rate = 5 / 100;
    case num2cell(10:49) % 價格大於等於1000小於5000
        rate = 8 / 100;
    otherwise
        rate = 10 / 100;
end
price = price*(1 - rate);
disp(price);  % 輸出商品實際價格

中斷

break

跳出迴圈體,但只能跳出一層迴圈,當有多層迴圈時,只能跳出包含break的最內層迴圈 

continue

終止當次迴圈中餘下的語句,機型下一次迴圈

return

所有餘下命令均不執行,終止程式

例1:

clc;
clear;
A = [1,-4,8,-3,9];
n = length(A);
for i = 1:n
    if A(i) >= 0
        continue;
    end
    i,A(i)
end
s = sum(A)
i =

     2


ans =

    -4


i =

     4


ans =

    -3


s =

    11
clc;
clear;
A = [1,-4,8,-3,9];
n = length(A);
for i = 1:n
    if A(i) < 0
        break;
    end
    i,A(i)
end
s = sum(A)
i =

     1


ans =

     1


s =

    11
clc;
clear;
A = [1,-4,8,-3,9];
n = length(A);
for i = 1:n
    if A(i) > 8
        return;
    end
    i,A(i)
end
s = sum(A)
i =

     1


ans =

     1


i =

     2


ans =

    -4


i =

     3


ans =

     8


i =

     4


ans =

    -3

例2:

clc;
clear;
A = [1,-4,8;-3,9,1;-1,-2,3];
[m,n] = size(A);
flag = 0;
for i = 1 : m
    for j = 1 : n
        if A(i,j) < 0
            i,j,A(i,j)
            flag = 1;
            break;
        end
    end
    if flag == 1
        break;
    end
end
s = A'
i =

     1


j =

     2


ans =

    -4


s =

     1    -3    -1
    -4     9    -2
     8     1     3

元胞陣列

介紹

1、元胞陣列是matlab中的一種特殊資料型別

2、可以看做一種無所不包的通用矩陣,元胞陣列中的元素稱為元胞或者單元,可以是任何一種資料型別的資料

3、元胞陣列中的每一個元素可以具有不同的尺寸。可以佔用不同的記憶體空間

4、元胞陣列的記憶體空間可以動態分配

建立

1、直接賦值

1.1 內容索引

左邊{} ,右邊為內容

A{1,1} = "hello pam";

1.2 單元索引

左邊(), 右邊{內容}

A(1,2) = {11};

2、使用cell建立

C = cell(2,2);

3、使用{}直接建立所有的元胞陣列的所有單元

D = {"pam",[1,2,3;4,5,6],11};  

訪問

1、用()將下標括起來訪問其單元的大小和資料型別

>> D = {"pam",[1,2,3;4,5,6],11};
>> D(1,2)

ans =

  1×1 cell 陣列

    {2×3 double}

2、用{}將下標括起訪問其單元內容

>> D{1,2}

ans =

     1     2     3
     4     5     6

3、用celldisp()對其元胞陣列的所有內容進行訪問

>> celldisp(D)
 
D{1} =
 
pam
 
 
D{2} =
 
     1     2     3
     4     5     6

 
 
D{3} =
 
    11

刪除

1、使用{}

刪除其中的一個元素

>> D{1,1} = []

D =

  1×3 cell 陣列

    {0×0 double}    {2×3 double}    {[11]}

>> D{1,1}

ans =

     []

2、使用()

2.1 刪除部分

>> C(:,1) = []   % 刪除一列

C =

  2×1 cell 陣列

    {0×0 double}
    {0×0 double}

2.2 刪除全部

>> A(:) = [] % 刪除全部

A =

  空的 0×0 cell 陣列

相關函式  

1、celldisp  :顯示元胞陣列中所有的內容

2、cell:建立空的元胞陣列

3、cellplot:利用圖形方式顯示內容

4、cell2mat:將陣列轉變為普通的矩陣

5、mat2cell:將陣列矩陣轉變成為cell陣列

6、num2cell:將數值陣列轉變成cell陣列

7、iscell:判斷輸入是否為cell陣列 

Excel的讀寫

格式:

[num,txt,raw] = xlsread(filename,sheet,xlRange)

filename:檔名字,單引號括起

sheet:工作變得名字或者編號,例如:sheet1,或者1

xlRange:工作表中的指定區域,例如:A2:D5

num:儲存工作表中的數值資料,為一個矩陣

txt:儲存工作表中的文字資料,為一個元胞陣列

raw:儲存工作表中的數值資料和文字資料,為一個元胞陣列

註釋:txt和raw可以預設,sheet和xlRange可以預設

[num,txt,raw] = xlsread('111.xls','Sheet1','A3:K668');

 

寫  

語法:

xlswrite(filename,A,sheet,xlRange)

注意:寫入Excel時,被寫入的檔案不能被開啟,否則會出現錯誤提示“不可寫”

>> s = sum(num(:,3:5))  %計算表中第三列到第五列資料的總和,並寫入最後一行對應的列中

s =

   1.0e+05 *

    2.2416    0.5446    0.5839

>> xlswrite('111.xls',s,'Sheet1','E669:G669')

畫中畫

效果

程式碼

clc;
clear;
% 繪製原圖
x = 0:0.05:20;
y = exp(-0.5*x).*sin(10*x);
x1 = 8:0.05:10;
y1 = exp(-0.5*x1).*sin(10*x1);
plot(x,y);
%繪製小矩陣
a = 8; % 矩陣的左下角x軸最小
b = min(y1); % 矩陣的左下角y軸最小
c = 2; % 矩陣的長度
d = max(y1) - min(y1); %矩陣的高
rectangle('Position',[a,b,c,d]);
%繪製座標系
axes('Position',[0.5,0.6,0.3,0.3]); %在當前圖窗中建立預設的笛卡爾座標區,並將其設定為當前座標區,將座標系的左下角作為(0,0),橫縱座標各為1
% 繪製小圖
plot(x1,y1);

註釋:

1、axes('Position',[x1,y1,x2,y2])

在當前圖窗中建立預設的笛卡爾座標區,並將其設定為當前座標區。通常情況下,您不需要在繪圖之前建立座標區,因為如果不存在座標區,圖形函式會在繪圖時自動建立座標區。

2、rectangle('Position',[a,b,c,d])

此 MATLAB 函式 在二維座標中建立一個矩形。將 pos 指定為 [x y w h] 形式的四元素向量(以資料單位表示)。x 和 y 元素確定位置,w 和 h 元素確定大小。函式在當前座標區中繪製圖形,而不清除座標區中的現有內容。

  

相關文章