matlab 基础

时间:2024-01-27 11:20:56

安装

参考:链接

学习:参考链接

常量

 注意: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 元素确定大小。函数在当前坐标区中绘制图形,而不清除坐标区中的现有内容。

 

音频处理

音频读取

使用 audioread 函数读取文件 lei.wavaudioread 函数可以支持 WAVE、OGG、FLAC、AU、MP3 和 MPEG-4 AAC 文件。

[y,Fs]=audioread(\'lei.wav\');

播放音频

sound(y, Fs);   % 正常播放
pause(3);   % 暂停3秒

sound(x, 2*Fs);  % 2倍速播放
pause(3);   % 暂停3秒

绘制音频数据图

%==========以时间为横坐标绘制语音波形==========

subplot(2,1,1);
N=length(y);
time=(0:N-1)/Fs; %计算时间坐标
plot(time,y);
xlabel(\'时间\');

%==========以采样点为横坐标绘制语音波形==========

subplot(2,1,2);
plot(y);
xlabel(\'采样点\');

获取有关音频文件的信息

使用 audioinfo 函数获取有关 WAVE 文件 lei.wav 的信息。

>> info=audioinfo(\'lei.wav\')

info = 

  包含以下字段的 struct:

             Filename: \'D:\code\matlab\lei.wav\'
    CompressionMethod: \'Uncompressed\'
          NumChannels: 1
           SampleRate: 11025
         TotalSamples: 57880
             Duration: 5.2499
                Title: []
              Comment: []
               Artist: []
        BitsPerSample: 8

PS:audioinfo 返回一个 1×1 结构体数组。SampleRate 字段指示音频数据的采样率,以赫兹为单位。Duration 字段指示文件的持续时间,以秒为单位

参考

1、官方文档

2、CSDN