主要内容

修剪

求动力系统的平衡点

语法

u (x, y, dx] =修剪('sys')
u (x, y, dx] =修剪('sys”,x0,情况,y0)
u (x, y, dx] =修剪('sys”,x0,情况,y0,第九,iu, iy)
u (x, y, dx] =修剪('sys”,x0,情况,y0,第九,iu, iy, dx0, idx)
u (x, y, dx,选项]=修剪('sys”,x0,情况,y0,第九,iu, iy, dx0, idx,选项)
u (x, y, dx,选项]=修剪('sys”,x0,情况,y0,第九,iu, iy, dx0, idx,选项,t)

描述

修剪点,也称为平衡点,是动态系统的参数空间中系统处于稳态的一个点。例如,飞机的平衡点是一种使飞机直线和水平飞行的控制设置。数学上,修剪点是系统状态导数为零的点。修剪从一个初始点开始搜索,使用顺序二次规划算法,直到找到最近的修剪点。您必须隐式或显式地提供初始点。如果修剪不能找到修剪点,它返回在搜索中遇到的点,在最小-最大值的意义上状态导数最接近于零;也就是说,它返回的是导数离零的最大偏差最小的点。修剪可以找到满足特定输入、输出或状态条件的修剪点,也可以找到系统以特定方式变化的点,即系统状态导数等于特定非零值的点。

u (x, y, dx] =修剪('sys')找到模型的平衡点sys’,最接近系统的初始状态,x0.具体地说,修剪求使的最大绝对值最小的平衡点(x-x0, u, y).如果修剪如果找不到靠近系统初始状态的平衡点,它就返回系统最接近平衡状态的点。具体来说,它返回最小化的点abs (dx)在哪里dx表示系统的导数。你可以获得x0使用此命令。

(大小、x0 xstr) =系统 ([],[],[], 0)

u (x, y, dx] =修剪('sys”,x0,情况,y0)找到最接近的修剪点x0情况y0,即使最大值最小的点

abs ([x-x0;u-u0;y-y0])

u (x, y, dx] =修剪('sys”,x0,情况,y0,第九,iu, iy)找到最接近的修剪点x0情况y0满足一组指定的状态、输入和/或输出条件。整数向量9国际单位,iy选择x0情况,y0这一点必须得到满足。如果修剪不能找到一个完全满足指定条件集的平衡点,它返回满足条件集最近的点,即,

abs ([x (ix) x0 (ix);u (iu)情况(iu);y (iy) y0 iy ())

u (x, y, dx] =修剪('sys”,x0,情况,y0,第九,iu, iy, dx0, idx)找到特定的非平衡点,即系统的状态导数具有特定非零值的点。在这里,dx0指定在搜索的起始点和处的状态导数值idx选择dx0搜索必须完全满足。

u (x, y, dx,选项]=修剪('sys”,x0,情况,y0,第九,iu, iy, dx0, idx,选项)指定一个优化参数数组修剪传递到优化函数,它用来寻找修剪点。而优化函数则使用这个数组来控制优化过程并返回有关该过程的信息。修剪返回选项数组在搜索过程的末尾。通过以这种方式公开底层优化过程,修剪允许您监视和微调修剪点的搜索。

下表描述了每个元素如何影响对裁剪点的搜索。数组元素1、2、3、4和10对于寻找修剪点特别有用。

不。 默认的 描述
1 0 指定显示选项。0表示不显示;1表示表格输出;-1抑制警告信息。
2 104 计算的修剪点必须达到终止搜索的精度。
3. 104 为了终止搜索,修剪搜索目标函数必须达到的精度。
4 106 状态导数必须达到终止搜索的精度。
5 N/A 不习惯。
6 N/A 不习惯。
7 N/A 在内部使用。
8 N/A 返回修剪搜索目标函数的值(目标实现中的λ)。
9 N/A 不习惯。
10 N/A 返回用于查找裁剪点的迭代次数。
11 N/A 返回函数梯度计算的次数。
12 0 不习惯。
13 0 等式约束的个数。
14 100 *(数量的变量) 用于寻找裁剪点的函数求值的最大次数。
15 N/A 不习惯。
16 108 在内部使用。
17 0.1 在内部使用。
18 N/A 返回步长。

u (x, y, dx,选项]=修剪('sys”,x0,情况,y0,第九,iu, iy, dx0, idx,选项,t)将时间设置为t如果系统依赖于时间。

请注意

如果您确定了任何状态、输入或输出值,修剪使用未指定的自由变量导出满足这些约束条件的解。

例子

考虑一个使用状态空间块建模的线性状态空间系统

x ˙ 一个 x + B u y C x + D u

一个BC,D在命令行或块参数对话框中输入的矩阵是:。

A = [-0.09 -0.01];1 0];B = [0 -7;0 2];C = [0 2;1 5];D = [-3 0;1 0];

示例1

在这个模型中找到一个平衡点叫做sys使用:

[x,u,y,dx,options] = trim('sys') x = 0 0 u = 0 0 y = 0 0 dx = 0 0

迭代次数为:

选项(10)ans = 7

示例2

找到一个平衡点X = [1;1], u = [1;1],输入

x0 = (1, 1);情况= (1,1);[x,u,y,dx,options] = trim('sys', x0, u0);y = -1.0000 0.3333 dx = 1.0e-12 * 0.1979 0.0035

迭代次数为

选项(10)ans = 25

示例3

求一个平衡点,其输出固定为1使用:

y = (1, 1);iy = [1, 2];u (x, y, dx] =修剪(sys ', [], [], y , [], [], iy y) x -0.3075 = 0.0009 u = -0.5383 - 0.0004 = 1.0000 1.0000 dx = 1.0 e15汽油0.1483 * -0.0170

示例4

为了找到一个平衡点,输出固定为1,导数设置为0和1,使用

y = (1, 1);iy = [1, 2];dx = [0, 1];idx = [1, 2];u (x, y, dx,选项]=修剪(“sys”,[][],y, [], [], iy, dx, idx) x = 0.9752 -0.0827 u = -0.3884 - -0.0124 = 1.0000 - 1.0000 dx = 0.0000 - 1.0000

迭代次数为

选项(10)ans = 13

限制

发现的修剪点修剪从任意给定的初始点开始只是一个局部值。其他,更合适的修剪点可能存在。因此,如果您想为特定的应用程序找到最合适的修剪点,那么尝试多次初始猜测是很重要的xu,y

算法

修剪采用顺序二次规划算法求修剪点。看到序列二次规划(SQP)(优化工具箱)此算法的描述。

之前介绍过的R2006a