Matlab索引从1开始
clear all:清除工作区的所有变量
clc:命令行窗口清屏
脚本上的*号:当前脚本未保存
注释:“%%”+“空格” 或 “%”+"空格"
Matlab变量命名规则:
(1)变量名区分大小写
(2)变量名长度不超过63位
(3)变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点
(4)变量名应简洁明了,通过变量名可以直观看出变量所表示的物理意义
Matlab数据类型
(1)数字 加减乘除:+-*/
(2)字符与字符串 使用单引号‘ ’表示。
s = 'a'
% 输出字符的ASIIC码
abs(s)
% 输出ASIIC码对应的字符串
char(97)
% 输出字符串的长度
length(str)
(3)矩阵
% 矩阵
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
% 转置矩阵
B = A'
% 纵向拉伸成单列矩阵
C = A(:)
% 逆矩阵
D = inv(A)
% 矩阵乘法
A * D
% 构建零矩阵,参数为(行数,列数,维度数)
E = zeros(10,5,3)
E(:,:,1) = rand(10,5)
E(:,:,2) = randi(5,10,5)
E(:,:,3) = randn(10,5)
rand、randi和randn的区别?
1)rand 生成均匀分布的伪随机数。分布在(0~1)之间
主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,mn)利用指定的RandStream(我理解为随机种子)生成伪随机数
2)randn 生成标准正态分布的伪随机数(均值为0,方差为1)
主要语法:和上面一样
3)randi 生成均匀分布的伪随机整数
主要语法:randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
r=randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵
(4)元胞数组
元胞数组是MATLAB中特有的一种数据类型,是数组的一种,其内部元素可以是属于不同的数据类型,概念理解上,可以认为它和c语言里面的结构体、c++里面的对象很类似。元胞数组是matlab中的特色数据类型,它不同于其它数据类型(如字符型,字符数组或者叫字符串,以及一般的算术数据和数组)。它特有的存取数据方法决定了它的特点,它有给人一种查询信息的感觉,可以逐渐追踪一直到所有的变量全部翻译成基本的数据信息。它的class函数输出就是cell(细胞之意)。
% 元胞数组
% 一行六列
A = cell(1,6)
% eye(3):生成一个3x3的单位矩阵
A{2} = eye(3)
% 幻方
A{5} = magic(5)
magic字面意思是魔方,魔术的意思。在matlab中用来生成n阶幻方。比如三阶幻方就是1~9九个数字,组成一个3x3的矩阵,使得该矩阵无论横、竖还是斜三个方向上的三个数的和总是相同的。 magic(n)生成一个n阶幻方,就是把1~n^2排成一个nxn的矩阵,使得矩阵的每行、每列,以及主、副对角线上面的n个数之和都相等(容易证明,这个和等于 n*(n^2+1)/2)。
(5)结构体
% 结构体
books = struct('name',{{'machine learning','data mining'}},'price',[30 40])
books.name
books.name(1) % 数组
books.name{1} % 字符串
Matlab矩阵操作
矩阵定义与构造
% 矩阵的定义及构造
A = [1 2 3 4 5 6]
B = 1:2:9 % 1到9,步长为2
C = repmat(B,3,1) %重复。将B重复3行,1列(竖着不重复)
D = ones(2,4) % 生成一个2行4列元素值为1的矩阵
矩阵的运算
% 矩阵的四则运算
A = [1 2 3 4;5 6 6 7]
B = [1 2 3 3;4 4 5 6]
C = A + B
D = A - B
E = A * B'
F = A .* B % 对应项相乘
G = A / B % 相当于A乘B的逆矩阵
H = A ./ B %对应项相除
% 矩阵下标
A = magic(5)
B = A(2,3) % 第2行第3列元素
C = A(3,:) % 第3行所有元素
D = A(:,4) % 第4列所有元素
[m,n] = find(A > 20) %查找A矩阵中元素值大于20的元素,返回其行列号
程序结构
顺序结构
最简单的程序结构。但由于其不包含其他控制语句等内容,结构相对比较单一,实现的功能也比较有限。
循环结构
1、for循环
for 循环变量 = 初值 : 步长 : 终值
执行语句1
...
执行语句n
end
其中,步长默认值为1,可省略;初值、步长、终值可为正亦可为负,可为正数亦可为小数。
2、while循环
根据给定的条件,决定是否以不确定的循环次数来执行循环语句体。
while 条件表达式
执行语句1
...
执行语句n
end
若条件表达式中的条件成立,则执行循环语句体;若不成立,则执行end后面的语句。
分支结构
1、if...end结构
if 条件表达式
...
语句体
...
end
当条件表达式为真时,执行语句体;为假,则跳过。
2、if...else...end结构
if 表达式
语句1
else
语句2
end
3、switch...case...end结构
该结构是通过与某个表达式的值进行比较,根据比较的结果做不同得到选择,以实现程序的分支选择功能。
switch 表达式(数值或字符串)
case 数字或字符串1
语句体1;
case 数字或字符串2
语句体2;
...
otherwise
语句体n;
end
switch 后面表达式的值为数值变量或字符变量,通过这些值与 case后面数值或字符串的值进行比较,与哪一个 case的值相同就执行哪一个 case 下面的语句体,如果与所有 case的值都不相同,则执行otherwise下面的语句体。otherwise语句可以省略,如果省略 otherwise,所有case 都不满足时跳出分支结构,另外 switch 必须与 end 配对使用。
二维平面绘图
单纵坐标图
% 二维平面绘图
x = 0:0.01:2*pi;
y = sin(x);
figure % 建立一个幕布
plot(x,y) % 绘制二维平面图
title('y = sin(x)')
xlabel('x')
ylabel('sin(x)')
xlim([0 2*pi]) % x轴极限取2*pi
双纵坐标图
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
set(AX(1),'XColor','k','YColor','b'); % 设置坐标轴颜色
set(AX(2),'XColor','k','YColor','r'); % 设置坐标轴颜色
set(get(AX(1),'Ylabel'),'String','Slow Decay') % 设置纵坐标轴标签
set(get(AX(2),'Ylabel'),'String','Fast Decay') % 设置纵坐标轴标签
xlabel('Time(\musec)') % 设置横坐标轴标签
% set(AX(1),'ylim',[50 250]) % 设置纵轴极限区间
% set(AX(2),'ylim',[0 600]) % 设置纵轴极限区间
% set(AX(1),'ytick',50:50:250) % 设置纵轴数字间隔
% set(AX(2),'ytick',0:100:600)
% set(AX,'xlim',[0 24]) % 设置横轴极限区间
% set(AX,'xtick',0:2:24) % 设置横轴数字间隔
title('Multiple Decay Rates') % 设置标题
set(H1,'LineStyle','--') % 设置线条样式
set(H1,'color','b');
set(H2,'LineStyle',':') % 设置线条样式
set(H2,'color','r');
% 坐标图上添加线型说明
legend([H1,H2],{'y1 = 200*exp(-0.05*x).*sin(x)';'y2 = 0.8*exp(-0.5*x).*sin(10*x)'});
1.plotyy(X1,Y1,X2,Y2):以左、右不同纵轴绘制X1-Y1、X2-Y2两条曲线。
2.plotyy(X1,Y1,X2,Y2,FUN1):以左、右不同纵轴把X1-Y1、X2-Y2两条曲线绘制成FUN1指定形式的两条曲线。
3.plotyy(X1,Y1,X2,Y2,FUN1,FUN2):以左、右不同纵轴把X1-Y1、X2-Y2两条曲线绘制成FUN1、FUN2指定的不同形式的两条曲线。
4.[AX,H1,H2]=plotyy(...):返回AX中创建的两个坐标轴的句柄以及H1和H2中每个图形绘图对象的句柄。AX(1)为左侧轴,AX(2)为右侧轴。
1.左纵轴用于X1-Y1数据对,右纵轴用于X2-Y2数据对。
2.轴的范围、刻度都自动产生。如果要人工设置,必须使用axis函数。
3.FUN、FUN1、FUN2可以是MATLAB中所有接受X-Y数据对的二维绘图指令,如plot函数。
三维立体绘图
% 三维立体绘图
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
% 添加新绘图时保留当前绘图
hold on
% 显示坐标区网格线
grid on
axis square % 将示图规整化成正方形
hold——添加新绘图时保留当前绘图。此 MATLAB 函数 保留当前坐标区中的绘图,从而使新添加到坐标区中的绘图不会删除现有绘图。新绘图基于坐标区的 ColorOrder 和 LineStyleOrder 属性使用后续的颜色和线型。MATLAB 将调整坐标区的范围、刻度线和刻度标签以显示完整范围的数据。如果不存在坐标区,hold 命令会创建坐标区。
grid——显示或隐藏坐标区网格线。此 MATLAB 函数 显示 gca 命令返回的当前坐标区或图的主网格线。主网格线从每个刻度线延伸。
[x,y,z] = peaks(30);
mesh(x,y,z)
grid
图形窗口的分割
x = linspace(0,2*pi,60);
subplot(2,2,1)
plot(x,sin(x)-1);
title('sin(x)-1');
axis([0,2*pi,-2,0]) % 设置坐标轴上下限
subplot(2,1,2)
plot(x,cos(x)+1);
title('cos(x)+1');
axis([0,2*pi,0,2])
subplot(4,4,3)
plot(x,tan(x));
title('tan(x)');
axis([0,2*pi,-40,40])
subplot(4,4,8)
plot(x,cot(x));
title('cot(x)');
axis([0,2*pi,-35,35])
具体语法:
linspace
y = linspace(x1,x2) 返回包含 x1 和 x2 之间的 100 个等间距点的行向量。
y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。
subplot
①subplot(m,n,p) subplot(m,n,p) 将当前图形划分为 m×n 网格,并在 p 指定的位置创建坐标轴。MATLAB® 按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。如果指定的位置已存在坐标轴,则此命令会将该坐标轴设为当前坐标轴。
②subplot(m,n,p,‘replace’) subplot(m,n,p,‘replace’) 删除位置 p 处的现有坐标轴并创建新坐标轴。
③subplot(m,n,p,‘align’) subplot(m,n,p,‘align’) 创建新坐标轴,以便对齐图框。此选项为默认行为。
④subplot(m,n,p,ax) subplot(m,n,p,ax) 将现有坐标轴 ax 转换为同一图形中的子图。
⑤subplot(‘Position’,pos) subplot(‘Position’,pos) 在 pos 指定的自定义位置创建坐标轴。使用此选项可定位未与网格位置对齐的子图。指定 pos 作为 [left bottom width height] 形式的四元素矢量。如果新坐标轴与现有坐标轴重叠,新坐标轴将替换现有坐标轴。
⑥subplot(,Name,Value) subplot(_,Name,Value) 使用一个或多个名称-值对组参数修改坐标轴属性。有关属性列表,请参阅 Axes 属性。在所有其他输入参数之后设置坐标轴属性。
⑦ax = subplot()
ax = subplot(___) 返回创建的 Axes 对象。以后可以使用 ax 修改坐标轴。有关属性列表,请参阅 Axes 属性。
⑧subplot(ax) subplot(ax) 将 ax 指定的坐标轴设为父图的当前坐标轴。如果父图尚不是当前图形,此选项不会使父图成为当前图形