1.close:
close
关闭当前图窗。
close all
关闭其句柄可见的所有图窗。
2.clear:清除工作空间的所有变量;
3.创建矩阵:
eye(n):返回n*n单位矩阵;
diag([0.13,0.13,0.14]):返回3*3的对角矩阵
4.for :用来重复指定次数的 for
循环
for
在循环中将一组语句执行特定次数。index
= values
, statements
, endvalues
为下列形式之一:
-
initVal
:endVal
-index
变量从initVal
至endVal
按1
递增,重复执行statements
直到index
大于endVal
。 -
initVal
:step
:endVal
- 每次迭代时按值step
对index
进行递增,或在step
是负数时对index
进行递减。 -
valArray
- 每次迭代时从数组valArray
的后续列创建列向量index
。例如,在第一次迭代时,
。循环最多执行index
=valArray
(:,1)n
次,其中n
是valArray
的列数,由numel(
给定。输入valArray
(1,:))valArray
可属于任何 MATLAB® 数据类型,包括字符向量、元胞数组或结构体。
最简单的用法:
for t=1:n %循环n次
statement
end
嵌套for里的i只在循环里面起作用
5.B = A.'
返回 A
的非共轭转置,即每个元素的行和列索引都会互换。如果 A
包含复数元素,则 A.'
不会影响虚部符号。例如,如果 A(3,2)
是 1+2i
且 B = A.'
,则元素 B(2,3)
也是 1+2i
。
B = transpose(A)
是执行 A.'
的另一种方式,它可以为类启用运算符重载。
6.命名规则:文件名和变量名都是一样的规则,英文、数字或下划线,第一个字符不能是数字,不能有空格
7.global:将变量声明为全局变量
global var1 ... varN
将变量 var1 ... varN
声明为作用域中的全局变量。
通常每个 MATLAB® 函数均有各自的局部变量,这些局部变量与其他函数的局部变量和基础工作区的局部变量是分开的。但是,如果多个函数都将特定的变量名称声明为 global
,则它们都共享该变量的一个副本。在任何函数中对该变量的值做任何更改,在将该变量声明为全局变量的所有函数中都是可见的。
如果首次发出 global
语句时尚不存在全局变量,则此语句初始化为空 0x0
矩阵。
如果当前工作区中已经存在与全局变量具有相同名称的变量,则 MATLAB 会发出警告,并更改该变量的值及其范围以匹配全局变量。
总结一下:函数使用全局变量时,要先声明。
9.grid on:添加网格;
10.plot3:画三维空间中的点;
11.pause(a):程序暂停a秒后继续执行,没有参数a,这样的意思是程序暂停,按任意键程序继续执行
12.hold on:保持原图并接受此后绘制的新的曲线,叠加绘图; 多次叠绘,就是说你可以连续plot,如果想很多东西画在一个图上那就是先plot之后要hold on
13.cla():Clear axis即清除当前图形中的当前活动轴。其他轴不受影响。
14.clf():Clear figure清除所有轴,但是窗口打开,这样它可以被重复使用。
15.view:设置视点
16.画三维直线:plot3([x1 x2],[y1 y2],[z1 z2]);
17.叉乘与点乘:
语法
说明
-
如果
A
和B
为向量,则它们的长度必须为 3。 -
如果
A
和B
为矩阵或多维数组,则它们必须具有相同大小。在这种情况下,cross
函数将A
和B
视为三元素向量集合。该函数计算对应向量沿大小等于 3 的第一个数组维度的叉积。
C = cross(A,B,dim)
计算数组 A
和 B
沿维度 dim
的叉积。A
和 B
必须具有相同的大小,并且 size(A,dim)
和 size(B,dim)
必须为 3。dim
输入是一个正整数标量。
语法
说明
-
如果
A
和B
是向量,则它们的长度必须相同。 -
如果
A
和B
为矩阵或多维数组,则它们必须具有相同大小。在本例中,dot
函数将A
和B
视为向量集合。该函数计算对应向量沿大小不等于 1 的第一个数组维度的叉积。
C = dot(A,B,dim)
计算 A
和 B
沿维度 dim
的点积。dim
输入是一个正整数标量。
18.figure:
画图首先要创建一个图标窗口,开启新的图表窗口,figure('Name', 'xxx')对窗口命名
figure(1) 选择编号为 1 的图形窗口作为当前活动窗口
19.plot:
plot(Y)
创建 Y
中数据对每个值索引的二维线图。
plot(x,y,'r-'):x和y可以是数组,x是横坐标,y是纵坐标
subplot(m,n,p)
将当前图窗划分为 m
×n
网格,并在 p
指定的位置创建坐标区。MATLAB® 按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。
画多张图:
figure(1); % 第一个子图 plot(...); figure(2); % 第二个子图 plot(...);
一张图画多条曲线:
plot();hold on;
plot();hold on;
plot();grid on;
一张图里画多个子图:
figure
subplot(311)
plot();
subplot(312)
plot();
subplot(313)
plot();
plot(X1,Y1,...,Xn,Yn)
绘制多个 X
、Y
对组的图,所有线条都使用相同的坐标区。
legend
为每个绘制的数据序列创建一个带有描述性标签的图例。
y1 = rand(3);
ax1 = subplot(2,1,1);
plot(y1)
legend(ax1,'Line 1','Line 2','Line 3')
20.linspace(x1,x2,n):生成 n
个点,返回包含 x1
和 x2
之间的 n 个等间距点的行向量。
21.xlswrite('filename.xls', data):将数据写入excel
22.clc:用来清除命令窗口的内容;
23.nargin:
针对当前正在执行的函数,返回函数调用中给定函数输入参数的数目。
24.patch:绘制多边形,画立方体;
patch(X,Y,C)
使用 X
和 Y
的元素作为每个顶点的坐标,以绘制一个或多个填充多边形区域。patch
以您指定顶点的顺序连接这些顶点。要创建一个多边形,请将 X
和 Y
指定为向量。要创建多个多边形,请将 X
和 Y
指定为矩阵,其中每一列对应于一个多边形。C
决定多边形的颜色。
25.矩阵合并:a=[a;b]纵向合并,a=[a,b]横向合并;
26.load(filename):从 filename
加载数据,filename包括文件类型名。文件格式可以是txt、csv
27.linkaxes:plot的坐标轴同步
28.format rat:命令窗口使用分数表示
29.数组索引:
指定行和列下标:A(4,2)
单一下标:A(8)
引用多个数组元素:A(1:3,2)
指定该维中的所有元素:A(3,:)
30.norm(v): 返回向量 v
的欧几里德范数。此范数也称为 2-范数、向量模或欧几里德长度。
31.矩阵运算:
matlab中不管是矩阵乘矩阵,矩阵乘向量,向量乘数,都是*
如果是对应元素相乘则用.*
数除矩阵要用./
如果是加法,矩阵加一个标量,会将这个标量加到矩阵的每一个元素
什么时候考虑用.*,但运算中出现向量与向量,向量与矩阵,矩阵与矩阵的时候,.*和*就有区别,其他情况没有区别
一句话概括就是,正常的数学运算直接乘除就好了,其他不正常的运算用.*
32.反正切函数:asin反正弦,acos反余弦,atan2反正切
33.zeros():初始化函数,zeros(1,n)相当于初始化向量,zeros(n)初始化n*n的方阵,zeros(m,n)初始化m*n的矩阵
34.符号运算:主要用于公式推导
35.syms:定义符号变量,之后对此变量的所有运算都是以符号形式进行运算
符号对象包括符号常量、符号变量和符号表达式
36.expand:将符号展开
37.diff(T,x):函数T对变量x求偏导
38.注释:用%注释,不能用//
39.如果符号运算涉及到转置,输出结果会出现conj,需要在定义变量后加个real
如:syms x y real;
40.行向量:a=[1,2,3,4,5]
41.列向量:a=[1;2;3;4;5]
42.省略号:换行标志
45.end 终止代码块或指示最大数组索引
end
是终止 for、while、switch、try、if 和 parfor 语句的关键字。若没有 end
语句,则 for
、while
、switch
、try
、if
和 parfor
会等待进一步输入。end
的每个实例与先前最近的未成对的 for
、while
、switch
、try
、if
或 parfor
语句配对使用。
end
还终止声明的函数。虽然它有时是可选的,但使用 end
可提高代码可读性。在下列情况下,需要使用 end
:
-
如果文件包含多个函数,并且其中一个函数用
end
终止,则文件中的每个函数都必须用end
终止。 -
如果文件包含具有一个或多个嵌套函数的函数,则该文件中的每个函数都必须用
end
终止。 -
如果脚本包含一个或多个局部函数,则文件中的每个函数都必须用
end
终止。
end
也表示数组的最后一个索引。例如,X(end)
是 X
的最后一个元素,X(3:end)
选择 X
的第三个到最后一个元素。
46.结构体:结构体可以直接定义,可以直接data.x直接定义,结构体里面可以是数,向量或矩阵,取决于你赋值的那个东西是什么
48.subplot(m,n,p)
将当前图窗划分为 m
×n
网格,并在 p
指定的位置创建坐标区。
49.定义类方法和函数:
方法代码块
在 classdef
代码块内的 methods
代码块中将方法定义为 MATLAB® 函数。构造函数方法与类同名,并返回类的初始化对象。要创建具有该实例独有属性值的对象,请在类构造函数中为属性赋值。用 end
语句终止所有方法函数。
classdef ClassName
properties
PropertyName
end
methods
function obj = ClassName(arg1,...)
obj.PropertyName = arg1;
...
end
function ordinaryMethod(obj,arg1,...)
...
end
end
methods (Static)
function staticMethod(arg1,...)
...
end
end
end
50.科学计数法:
在matlab中,科学计数法用如下形式表示:3.14e5
51.matlab里面没用++、+=这种运算。
52.mod:b = mod(a,m)
返回 a
除以 m
后的余数,其中 a
是被除数,m
是除数。
如 0 = mod(100,50) ;1 = mod(1,50)
53.m文件中如何批量修改变量名称:改完了一个按shift+enter
54.nan:NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。
返回NaN的运算有如下三种
55.filter:
y=filter(b,a,x); y:信号输出;x:信号输入;b:对应差分方程x(n-k)的系数;a:对应差分方程y(n-k)的系数。
56.不等于:matlab中的不等于命令为“~=”。
57.fullfile:fullfile函数作用是利用文件各部分信息创建并合成完整文件名。
输入:f = fullfile('C:','Applications','matlab','fun.m')
得到:f =C:\Applications\matlab\fun.m
58.eval:将字符串转换为matlab可执行语句
for i=1:100
eval([‘load ’ num2str(i) ‘.mat’])
end
59.ans:最近计算的答案
ans
是在未指定输出参数的情况下返回输出时创建的变量。MATLAB® 创建了 ans
变量,并用该变量存储输出。建议不要在脚本或函数中更改或使用 ans
的值,因为该值可能会经常变化。
60.相对路径和绝对路径:
file1 = '/…….csv';file2 = '…….csv';
第一个是从文件系统的根开始的绝对路径。第二个是相对路径 - 相对于您当前的工作目录
61.打印:
Matlab 输出变量值使用fprintf("%d.....", variable).
disp直接打印字符串到控制台,也可以打印变量
62.length:L = length(X)
返回 X
中最大数组维度的长度。对于向量,长度仅仅是元素数量。对于具有更多维度的数据,长度为 max(size(X))
。空数组的长度为零。
sz = size(A)
返回一个行向量,其元素是 A
的相应维度的长度。例如,如果 A
是一个 3×4 矩阵,则 size(A)
返回向量 [3 4]
。
63.lsqnonlin:x = lsqnonlin(fun,x0)
从点 x0
开始,求 fun
中所描述函数的平方和的最小值。函数 fun
应返回由值(而不是值的平方和)组成的向量(或数组)。
输入:
fun-要最小平方和的函数,指定为函数句柄或函数名称。函数 fun
接受数组 x
并返回数组 F
,F 为在 x
处计算目标函数的结果。函数 fun
可以指定为文件的函数句柄
x0-初始点 指定为实数向量或实数数组。求解器使用 x0
中的元素数量和 x0
的大小来确定 fun 接受的变量数量和大小。
输出:
求解器停止原因:
1.Solver stopped prematurely. 求解器过早停止
lsqnonlin stopped because it exceeded the function evaluation limit,options.MaxFunctionEvaluations = 2400 (the default value).
Lsqnonlin停止是因为它超出了函数求值的限制,选项。 MaxFunctionEvaluations = 2400(默认值)。
2.Local minimum possible. 局部最小值
2.1 lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the selected value of the function tolerance.
Lsqnonlin停止是因为其最终平方和相对于其初始值的变化小于函数公差的选定值。
2.2 lsqnonlin stopped because the relative size of the current step is less than the selected value of the step size tolerance.
Lsqnonlin停止,因为当前步长的相对大小小于所选的步长公差值。
TolFun
— 函数值的终止容差
函数值的终止容差。在当前函数值与先前值相差小于 TolFun
时(相对于初始函数值),迭代结束
TolX
— 关于当前点 x
的终止容差
关于当前点 x
的终止容差。在当前点与先前点相差小于 TolX
时(相对于 x
的大小),迭代结束
64.[B,A]=butter(n,wn)
n是滤波器的阶数,根据需要选择合适的整数,Wn是归一化截止频率,又叫自然频率,Wn = 截止频率*2/采样频率
65.换行:在写matlab程序时,如果一行代码太长,不利于可读性和美观,那么我们可以使用三个点号(...) 来实现换行。
66.数组添加新元素:在末尾添加k = [k,10] 或者k(end+1) = 10;
67.ones:
ones(2,4),生成一个2行4列的全1矩阵
ones(n,1),生成一个n行1列的单位列向量
68.mean:
M = mean(A)
返回 A
沿大小不等于 1 的第一个数组维度的元素的均值。
-
如果
A
是向量,则mean(A)
返回元素均值。 -
如果
A
为矩阵,那么mean(A)
返回包含每列均值的行向量。
M = mean(A,dim)
返回维度 dim
上的均值。
X为矩阵,mean(X,1)为每一列向量的均值,mean(X,2)为每一行向量的均值
69.simplify:化简表达式simplify(Y)
70.matlab不同版本系统库函数会不一样,有些函数只存在于高版本,要想使用高版本函数只能升级?重装?
71.等差数组:y = linspace(x1,x2,n)
生成 n
个点。这些点的间距为 (x2-x1)/(n-1)
。
72.矩阵:要创建每行包含四个元素的数组,请使用逗号 (,
) 或空格分隔各元素。
a = [1 2 3 4]
这种数组为行向量。
要创建包含多行的矩阵,请使用分号分隔各行。ps:不用分号直接换行也ok
a = [1 3 5; 2 4 6; 7 8 10]
73.矩阵求逆
-
X^(-1)
等效于inv(X)
。 -
x = A\b
的计算方式与x = inv(A)*b
不同,建议用于求解线性方程组。
74.数组元素集体赋值:a(3,:) = b;
75.variant subsystem:
右键,选中块参数可看子系统名字、变量、条件。可以在工作区改变条件的值,可在不同子系统之间进行切换
建立子系统:
1.创建子系统变量
NONLINEAR_CONTOLLER = Simulink.Variant('Mode == 1')
SECOND_ORDER_CONTOLLER = Simulink.Variant('Mode == 2')
对应条件初始化 Mode = 1
2.将上述语句写到加载模型的回调函数上
3.设置子系统,右键子系统,可以去到子系统的参数设置,设置对应子系统的变量和条件
76.模型特性,在file栏可以去到模型特性,有加载模型时会调用的回调函数
77.s-function:
通过命令edit sfuntmpl调出函数模板
DirFeedthrough 是1还是0,就看Outputs函数的输出是否与u有直接关系,0 表示没有,即Output 函数中不出现输入变量u;1 表示有直接联系,即Output 函数中出现了输入变量u。
function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag)
level1中x和u都只能是向量,不能是矩阵
level2的输入可以是矩阵,但状态不能是矩阵
block.SetPreCompInpPortInfoToDynamic;//所有输入端口从其输入信号继承其功能属性(数据类型、维度、复杂性和采样模式)。正常加上这个设置。
78.信号发生器:
当我们想要对信号进行设置时,我们选中信号线之后,按照提示按住Shift+左键可以添加信号控制点,然后选住控制点之后,可以在底部对控制点的坐标进行设置,设置为我们所想要的信号走势。
79.MATLAB中 / 和 \ 的区别
对于标量运算
a/b 相当于a除以b,或者是a乘以(b的倒数)
b\a 相当于b除a,或者是(b的倒数)乘以a
对于矩阵运算
A/B 相当于
B\A 相当于
80.工具箱:如果不装工具箱,有很多函数都不能用,比如滤波的,优化的
安装工具箱不需要卸载matlab,直接点击setup运行安装程序,安装需要的工具箱即可
必须的工具箱:Control System Toolbox
81.simulink仿真步长:
-
如果模型没有定义任何周期性采样时间,则 Simulink 会选择一个可将总仿真时间等分为 50 个时间步的步长。
-
如果模型没有指定周期性速率并且停止时间为
Inf
,则 Simulink 将使用 0.2 作为步长。
82.矩阵乘法:
a和b是两个矩阵,a*b是进行矩阵相乘,a.*b是a矩阵的每一个元素乘以b矩阵对应位置的元素形成的一个新矩阵
除法同理
矩阵乘法不可交换
83.scatter:画散点图
85.tf2ss:
[A,B,C,D] = tf2ss(b,a),需要传入参数为分子和分母,不能传整个传递函数
86.参数自动整定:
参数自动整定有三个命令:systune
, looptune
, hinfstruct
slTuner用于提取simulink里的可调节模块,提取后可在matlab使用各种自整定命令进行参数整定
kalman无法使用systune进行调参
三个整定命令 systune
, looptune
, hinfstruct
都是通过优化 H∞ norm 来求出控制参数,这和传统的 H∞ 方法是不一样的.
hinfstruct
扩张了经典 H∞ 综合 (hinfsyn),用于固定控制器结构的系统,通过构造权滤波器以描述设计需求。systune 和 looptune 没用到权滤波器。
87.利用InitFcn回调函数进行初始化
将参数初始化写在一个matlab脚本中。用InitFcn回调函数进行初始化处理。在Model Properties选择Callbacks然后再选择InitFcn,在对话框中输入脚本名。这样,就可以直接运行simulink模型了。每次run会自动先执行脚本进行参数初始化。
ps:脚本中不要有清楚变量的命令,在matlab和simulink联合用时会把一些早赋值的变量给清了
88.realp:设置可调节的参数,PID模块可以和realp联用,增益模块不能和realp联合使用
90.脚本文件:可以直接写,也可以在脚本里写函数
91.drawnow
drawnow
更新图窗并处理任何挂起的回调。如果您修改图形对象并且需要在屏幕上立即查看这次更新,请使用该命令。
drawnow limitrate
将更新数量限制为每秒 20 帧。如果自上次更新后不到 50 毫秒,或图形渲染器忙于处理之前的更改,则 drawnow
会丢弃新的更新。如果您在循环中更新图形对象并且不需要在屏幕上查看每个更新,请使用该命令。跳过更新可以产生更快的动画。挂起的回调得到处理,这样您可以在动画期间与图窗交互。
92.System Identification工具箱
在"Estimate"中选择State Space Models,只需指定所辨识模型的阶数,并选择合适的估计方法Estimation Method,点击Estimate即可开始拟合模型,同时系统辨识工具箱会自动打开一个Plant Identification Progress窗口显示数据的拟合过程,并给出数据的拟合度和最终预测误差(FPE)作为评价标准,拟合度越高,FPE越小,表明拟合的模型越精确。从伯德图的幅频曲线可以看出模型是否准确。
将辨识模型导出到matlab的工作空间。双击模型,可以查看该模型的状态空间表达式,点击Present可以将拟合信息显示在matlab的命令行窗口,点击Export可以将模型导出到工作空间
93.margin
margin(sys)
绘制波特图响应
[Gm,Pm,Wcg,Wcp] = margin(sys)
返回裕度,不画图
gm-增益裕度 pm-相位裕度 wcg-穿越-180度相位时的角频率 wcp-穿越0db增益时的角频率
94.round
Y = round(X)
将 X
的每个元素四舍五入为最近的整数。在舍入机会均等的情况下,即有元素的十进制小数部分为 0.5
(在舍入误差内)时,round
函数会偏离零四舍五入到最接近的具有更大幅值的整数。
96.sum:sum模块上下翻转改|的位置
97.simulink仿真速度:
如果是变步长,速度很快,定步长的速度慢,步长越小速度越慢
变步长也很慢的原因是仿真中某个地方数值很大导致仿真速度变慢
98.simulink求解器:
不同求解器的结果可能不一样,比如ode45下系统是收敛的,但ode15不收敛,一直震荡
99.传递函数:
常数传递函数:G = k不是传递函数类型,G = k*s^0是传递函数类型
100.getIOTransfer
:
给定整个控制系统的广义模型,可用于提取各种子系统的响应。可用于验证使用 Tuning 后的控制系统的响应。
和slTuner接口配合可提取simulink的系统传递函数
调用getIOTransfer接口,实际上会运行一遍simulink的初始化脚本,如果simulink中加入了初始化脚本,这个脚本也会重新跑一遍,这个时候要注意初始化脚本不要clear,不然slTuner接口会被清除掉
101.setBlockParam
通过slTuner接口设置可调模块的参数形式,使用这个函数我们可以将可调模块设置成任意阶数的控制器,只要知道控制器的结构,就能通过这个函数进行设置
102.Transfer Fcn:在simulink中,传递函数分子的阶数必须小于或等于分母的阶数。
103.open_system:打开simulink模型的命令