MATLAB学习随笔

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 指定的坐标轴设为父图的当前坐标轴。如果父图尚不是当前图形,此选项不会使父图成为当前图形

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值