Matlab基础学习

Matlab learning

1. basic grammar

1.1 数据类型

1.1.1 cell
1. 创建
c = {42, rand(5), "abcd"}
2. 列表索引

要对表进行索引,可以使用圆括号 () 返回子表,或者使用花括号 {} 提取内容。

1.1.2 matrix
(1)创建特殊矩阵:
① 0矩阵:zeros()

zeros(n) %创建一个n阶0矩阵

B=zeros(2,4) %创建一个2×4的0矩阵

B(1, : ) %第一行数组

C=zeros(2,3,4) %创建一个三维0矩阵

C( : , : , 2) %是一个2×3的二维0矩阵

②1矩阵:ones()

ones(n,'int8') % 规定数据类型的矩阵

X = ones(___,'like',p) % 指定 X 具有与数值变量 p 相同的数据类型、稀疏性和复/实性(实数或复数)

③ 单位矩阵:eye()

特别的

eye(3,5)	% 非方阵单位矩阵结果如下
 1     0     0     0     0
 0     1     0     0     0
 0     0     1     0     0
sz=[2,3]	% 创建 2×3矩阵的向量
>> eye(sz)
 1     0     0
 0     1     0
④ 对角矩阵 diag()
% 创建对角矩阵
V = [1,3,4,5,0]	% 向量
D = diag(v)		% 主对角为V的5×5的对角矩阵 
D = diag(v,k)	% k<0,主对角线下方对角线k,如k=-2为第二条下对角线,7×7的矩阵;k>0,主对角线上方

x = diag(A)		% A为矩阵,x返回的主对角线值
x = diag(A,k)	% A的第k条对角线值
⑤ 随机矩阵rand()
X = rand(n)	% n阶的(0,1)均匀分布的矩阵
X = rand(sz1,...,szN)	% 多维度矩阵
r = -5 + (5+5)*rand(10,1)	% 生成-5到5的均匀分布的10×1列向量

randi()均匀分布的伪随机整函数

r = randi([10 50],1,5)	% 使用 randi 函数(而不是 rand)生成在 10 和 50 之间均匀分布的 5 个随机整数。
%% 函数用法
X = randi(imax)
X = randi(imax,n)
X = randi(imax,sz1,...,szN)
X = randi(imax,sz)
X = randi(___,typename)
X = randi(___,"like",p)
X = randi([imin,imax],___)
%% 生成标准正太分布的(-1,1)数组
X = randn
X = randn(n)
X = randn(sz1,...,szN)
X = randn(sz)

rng随机数生成器

rng(seed)	% seed可以是0,1....
rng(seed,generator)
s = rng
% 如下举例
s=rng(1,'twister')	% 创建结构体
rng(s);rand(1,3)	% 选择生成器s,产生随机数
rand(1,3)			% 初始生成器产生随机数,与上面产生的数组不同
rng(s);rand(1,3)	% 选择生成器s,与第一个产生的数组相同
% generator生成器名称
值				生成器名称	
'twister'		梅森旋转	
'simdTwister'	面向 SIMD 的快速梅森旋转算法	
'combRecursive'	组合多递归	
'multFibonacci'	乘法滞后 Fibonacci	
'philox'		执行 10 轮的 Philox 4×32 生成器	
'threefry'		执行 20 轮的 Threefry 4×64 生成器
%% 整数随机排列
p = randperm(n)		% 返回行向量,其中包含从 1 到 n 没有重复元素的整数随机排列。
p = randperm(n,k)	% 返回向量k,产生1到n里的随机数,随机排成1×k向量,k<=n
p = randperm(s,___)
⑥ true () false()矩阵

用法同上,true矩阵值为1,false 为0

(2)矩阵索引及运算

特殊索引A([n,m]) % ???

A=magic(5)
>> A =

17    24     1     8    15
23     5     7    14    16
 4     6    13    20    22
10    12    19    21     3
11    18    25     2     9

A([2,3])
>> 23     4

A(1:2:8,:)
% 1:2:9表示起始为1步长为2,结束为9,数组:[1,3,5,7,9]
% : 表示所有列举数
① blkdiag()
%% 返回通过沿 B 的对角线对齐输入矩阵 A1,...,AN 创建的分块对角矩阵。
A1 = ones(2,2);
A2 = 2*ones(3,2);
A3 = 3*ones(2,3);
B = blkdiag(A1,A2,A3)
>>
B =
     1     1     0     0     0     0     0
     1     1     0     0     0     0     0
     0     0     2     2     0     0     0
     0     0     2     2     0     0     0
     0     0     2     2     0     0     0
     0     0     0     0     3     3     3
     0     0     0     0     3     3     3
② 矩阵串联
C = cat(dim,A1,A2,…,An) % dim串联维度,dim=1等同于[A1;A2;....]和horzcat();dim=2等同于[A1,A2,A3....]和vertchat()
③ 重复
%% 重复向量
v = [1 2 3 4];
u = repelem(v,3) 
% u=[ 1     1     1     2     2     2     3     3     3     4     4     4]
u = repelem(v,[2 2 3 3])
% u= [1     1     2     2     3     3     3     4     4     4]
%% 重复矩阵
A = [1 2; 3 4]
B = repelem(A,3,2)		% 每个元素列重复2次,行重复3次
>>
B = 6×4

     1     1     2     2
     1     1     2     2
     1     1     2     2
     3     3     4     4
     3     3     4     4
     3     3     4     4
④ repmat()

参考:重复数组副本 - MATLAB repmat - MathWorks 中国

(2)矩阵运算

区别

.* 与 * 的区别
* 	矩阵乘法
.* 	矩阵对应元素相乘

其他:算术运算 - MATLAB & Simulink - MathWorks 中国

1.1.3 struct
1. 创建
data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'

或

s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s.f % 输出所有value值
s(1).f	% 输出value的第一个值

或
s = struct('a',{},'b',{},'c',{})
1.1.4 table
1. 列表创建

表 - MATLAB & Simulink - MathWorks 中国

2. 列表索引

要对表进行索引,可以使用圆括号 () 返回子表,或者使用花括号 {} 提取内容。

1.2 创建网格

①linspace
%% 创建线性等间距的向量
y = linspace(-5,5);		% 生成从-5到5的100个等间距点
y = linspace(-5,5,10);	% 生成从-5到5的10个等间距点
%% 创建对数的间距点向量
y = logspace(a,b)	% 10^a 和 10^b(10 的 N 次幂)之间的 50 个对数间距点组成的行向量
y = logspace(a,b,n)	% 10^a 和 10^b(10 的 N 次幂)之间的n 个对数间距点组成的行向量
y = logspace(a,pi)	%在 10^a 和 pi 之间生成 50 个点s
freqspace
② freqspace

参考:频率响应的频率间距 - MATLAB freqspace - MathWorks 中国

③ meshgrid()

% 列如
[X,Y] = meshgrid(x,y)	% 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。
[X,Y] = meshgrid(x) 	% 等同于[X,Y] = meshgrid(x,x) 
%% 绘制三维图形
x = -2:0.25:2;
y = x;
[X,Y] = meshgrid(x);
F = X.*exp(-X.^2-Y.^2);
surf(X,Y,F)
④ ndgrid()

N 维空间中的矩形网格 - MATLAB ndgrid - MathWorks 中国

1.3 文件调用

1.3.1 数据文件
(1)数据保存
save data1 a 		 % 创建data1.mat数据文件,将a保存到data1
load data1			% 加载文件数据

2. 拟合与插值

2.1 曲线拟合

% 多项式拟合函数
p = polyfit(x,y,n)	% p 中的系数按降幂排列,p 的长度为 n+1
[p,S] = polyfit(x,y,n)	% 还返回一个结构体 S,后者可用作 polyval 的输入来获取误差估计值
[p,S,mu] = polyfit(x,y,n)

2.2 曲线插值

一维线性插值

% 向量 x 包含样本点,v 包含对应值 v(x)。向量 xq 包含查询点的坐标,vq返回xq对应值
vq = interp1(x,v,xq)
% 指定备选插值方法:'linear'、'nearest'、'next'、'previous'、'pchip'、'cubic'、'v5cubic'、'makima' 或 'spline'。默认方法为 'linear'
% nearest 光滑度差,速度快 
% spline 光滑,内存小,运行慢
vq = interp1(x,v,xq,method)
% 外插值 可将 extrapolation = 'extrap'
vq = interp1(x,v,xq,method,extrapolation)

二维插值

Vq = interp2(X,Y,V,Xq,Yq)

2.3 三次样条插值

spline

s = spline(x,y,xq)
% 返回一个分段多项式结构体以用于 `ppval` 和样条实用工具 `unmkpp`
pp = spline(x,y)

yi = ppval(pp,xi) % 在查询点 xq处计算分段多项式 pp
[breaks,coefs,L,order,dim] = unmkpp(pp)

3. 绘图

3.1 plot 函数

一参数形式:plot(Y)

  • 如果 Y 是向量,x 轴的刻度范围是从 1 至 length(Y)

  • 如果 Y 是矩阵,则 plot 函数绘制 Y 中各列对其行号的图。x 轴的刻度范围是从 1 到 Y 的行数。

  • 如果 Y 是复数,则 plot 函数绘制 Y 的虚部对 Y 的实部的图,使得 plot(Y) 等效于 plot(real(Y),imag(Y))

二参数形式plot(x,y)

  • 如果 XY 都是向量,则它们的长度必须相同。plot 函数绘制 YX 的图。

  • 如果 XY 均为矩阵,则它们的大小必须相同。plot 函数绘制 Y 的列对 X 的列的图。

  • 如果 XY 中的一个是向量而另一个是矩阵,则矩阵的各维中必须有一维与向量的长度相等。如果矩阵的行数等于向量长度,则 plot 函数绘制矩阵中的每一列对向量的图。如果矩阵的列数等于向量长度,则该函数绘制矩阵中的每一行对向量的图。如果矩阵为方阵,则该函数绘制每一列对向量的图。

  • 如果 XY 之一为标量,而另一个为标量或向量,则 plot 函数会绘制离散点。但是,要查看这些点,您必须指定标记符号,例如 plot(X,Y,'o')

  • ‘o’ 表示线属性

三参数形式plot(X,Y,LineSpec)

plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)

lineSpec属性:

示例: '--or' 是带有圆形标记的红色虚线

线型说明
-实线
--虚线
:点线
-.点划线
标记说明
'o'圆圈
'+'加号
'*'星号
'.'
'x'叉号
'_'水平线条
`’'`
's'方形
'd'菱形
'^'上三角
'v'下三角
'>'右三角
'<'左三角
'p'五角形
'h'六角形
颜色说明
y黄色
m品红色
c青蓝色
r红色
g绿色
b蓝色
w白色
k黑色

绘图样式:

Colordef : 图形整体样式

grid 显示格栅

3.2 加标签text,gtext

text(x,y,txt)	% 二维坐标x,y位置
text(x,y,z,txt)	% 三维坐标
gtext(str)		% 鼠标可以拖动的
gtext(str,Name,Value)   % specifies text properties using one or more name-value pair arguments. For example, 'FontSize',14 specifies a 14-point font.

3.3 加图例legend

legend('cos(x)','cos(2x)')

3.4 box显示三维坐标坐标线

box on : displays the box outline around the current axes by setting their Box property to 'on'. This property value is the default for GeographicAxes objects.

3.4 加标签

xlabel(str),ylabel(str)

title(str)

可以手动调整

3.5 定制坐标轴

(1) axis设置坐标参数
axis(limits)
% limits = [xmin,xmax,ymin,ymax]	% 坐标值限制

axis style

axis mode
axis ydirection
axis visibility
lim = axis
(2) 绘制双y坐标
% 命令
yyaxis left
yyaxis right

% 举例
x = linspace(0,10);
y = sin(3*x);
yyaxis left
plot(x,y)

z = sin(3*x).*exp(0.5*x);
yyaxis right
plot(x,z)
ylim([-150 150])
(3) 极坐标

polar 新版推荐 polarplot

% 函数用法
polarplot(theta,rho)	% 极角,极径
polarplot(theta,rho,LineSpec)
polarplot(theta1,rho1,...,thetaN,rhoN)
polarplot(theta1,rho1,LineSpec1,...,thetaN,rhoN,LineSpecN)

3.6 多重图行或多窗口

1) 一个图形窗口绘制同坐标多曲线

hold on

hold off

ishold:判断是否打开

tiledlayout(2,1) 一窗口绘制不同坐标曲线

2) 开多个图形窗口

h1 = figure % 句柄

h2 = figure

figure(h2) % 打开窗口

3)图形窗口内容

close(h1) %关闭图形窗口

clf %清除图形窗口内容

4) 子图

subplot(m,n,p)  % 生成mxn的图形图形窗口,激活窗口p,对第p个子图进行操作
% 举例
subplot(2,1,1);
x = linspace(0,10);
y1 = sin(x);
plot(x,y1)

subplot(2,1,2); 
y2 = sin(5*x);
plot(x,y2)

3.7 交互式绘图工具

% 缩放工具
zoom on 
zoom off
zoom out
% 在曲线上采点
[x,y] = ginput(n)	% 采取n个点

3.8 快速绘图

% 函数表达式f,f可以是数组函数f='[f1,f2,f3]'
fplot(f)			% y = f(x) over the default interval [-5 5] for x.
fplot(f,xinterval)
fplot(funx,funy)
fplot(funx,funy,tinterval)

% 老版本
fplot('sin(x)',[-10,10])

4. 多项式

创建多项式或求矩阵特征值

% 创建多项式系数,即创建出了多项式,为0的系数也要写出,如p数组
p = [1,3,0,9]

% 多项式求根,返回列向量r
r = roots(p)
% 根值r
r =
  -3.6687 + 0.0000i
   0.3343 + 1.5302i
   0.3343 - 1.5302i
   
% 逆运算:由多项式的根构建相应多项式函数
pp=poly(r)
% 返回值
pp = 1.0000    3.0000    0.0000    9.0000

% 矩阵A特征向量P
P = ploy(A)

多项式加减:同数组运算,注意不同项要补0项运算

多项式乘法:conv(a,b)
( 5 x 2 + 3 x − 1 ) × ( 3 x 3 − 2 x 2 + x ) (5x^2+3x-1)×(3x^3-2x^2+x) 5x2+3x1)×(3x32x2+x)

a = [0 5 3 1];
b = [3 2 1 0];
% a,b系数的卷积,函数conv支持多项式乘法(执行两个数组的卷积) ,
c = conv(a,b)
c =[ 0    15    19    14     5     1     0]

多项式除法:deconv(a,b) ???

% b向量不能为0
[d,r] = deconv(a,b)
% a除以b ,d为商多项式和r为余数
d =     0

r =  0     5     3     1

多项式导数:polyder§

% 多项式a的导数
de_a = polyder(a)

% 多项式a*b卷积的导数
de_ab = polyder(a,b)

% 对有理多项式求导
[b1,a1]=polyder(b,a)

多项式积分:q = polyint§

多项式估值:**y = polyval(p,x) **即计算多项式p的x值对应的y

% x 是数组
y = polyval(a,x)

% 以矩阵方式返回多项式 p 的计算值。此计算方式等同于使用多项式 p 替换矩阵 X
Y = polyvalm(p,X)

有理多项式:residue和polyder

%  计算以如下形式展开的两个多项式之比的 部分分式展开式 的留数、极点和直项
[r,p,k] = residue(b,a)
% 逆运算
[b,a] = residue(r,p,k)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqZrqUAB-1669171339308)(C:\Users\YP\AppData\Roaming\Typora\typora-user-images\image-20221118161410308.png)]
14 5 1 0]


多项式除法:**deconv(a,b)**     ???

```matlab
% b向量不能为0
[d,r] = deconv(a,b)
% a除以b ,d为商多项式和r为余数
d =     0

r =  0     5     3     1

多项式导数:polyder§

% 多项式a的导数
de_a = polyder(a)

% 多项式a*b卷积的导数
de_ab = polyder(a,b)

% 对有理多项式求导
[b1,a1]=polyder(b,a)

多项式积分:q = polyint§

多项式估值:**y = polyval(p,x) **即计算多项式p的x值对应的y

% x 是数组
y = polyval(a,x)

% 以矩阵方式返回多项式 p 的计算值。此计算方式等同于使用多项式 p 替换矩阵 X
Y = polyvalm(p,X)

有理多项式:residue和polyder

%  计算以如下形式展开的两个多项式之比的 部分分式展开式 的留数、极点和直项
[r,p,k] = residue(b,a)
% 逆运算
[b,a] = residue(r,p,k)

[外链图片转存中…(img-bqZrqUAB-1669171339308)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面壁者-yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值