光滑和上升时间阶跃函数

176(30天)
法比奥Freschi
法比奥Freschi 2021年10月23日
编辑: 法比奥Freschi 2021年10月31日
大家好!
我知道这个问题比Matlab数学相关的,但我知道有很多大师,他们可以很容易地解决这个问题。
我想有一个光滑的阶跃函数与指定的上升时间,输出的控制。我试着更好地解释。它是非常简单的创建一个分段线性阶跃函数和记者光滑函数斜率控制使用一个参数化的物流功能:
%时间轴
t = linspace (0, 10000);
%阶跃函数参数
Tr = 1;
= 2;
t50 = 2;
%分段线性的阶跃函数
x = @ (t) (t > t50-Tr / 2 & t < t50 + Tr / 2) * (a / Tr。* (t-t50) + / 2) + (t > = t50 + Tr / 2)。*;
%的物流功能
y = @ a (t) / (1 + exp (4 * (t-t50) / Tr));
%的阴谋
图,
情节(t) x (t))
情节(t, y (t))
网格
但是我想控制圆角的形状,让他们或多或少地接近于原始函数根据一个额外的参数(但保持原始函数的斜率)箭头所显示在下面的图片
我不是爱上了物流功能,所以任何其他函数是受欢迎的。
提前感谢您的帮助
法比奥

接受的答案

法比奥Freschi
法比奥Freschi 2021年10月29日
编辑:法比奥Freschi 2021年10月31日
我的同事索非亚发现一篇文章[1],作者报道的解析近似分段线性阶跃函数与所谓的挤压功能首先在[2]中引入的。
这个函数有两个参数与中心的位置有关 γ 和振幅 和一个参数控制曲率 β :
下面的代码显示这个函数在起作用
清晰的变量,关闭所有
%时间轴
t = linspace (2 4 1000)。';
%阶跃函数参数
Tr = 2;%上升时间
= 2;%最大价值
T50 = 2;%半上升点
%分段线性的阶跃函数
x = @ (t) (t > T50-Tr / 2 & t < T50 + Tr / 2) * (A / Tr。* (t-T50) + / 2) + (t > = T50 + Tr / 2)。*;
%挤压作用
βy = @ (t) / Tr *日志(((1 + exp(β* (t-T50 + Tr / 2)))。/ (1 + exp(β* (t-T50-Tr / 2))))。^(1 /β));
%的阴谋
图,、网格
情节(t) x (t))
情节(t, y (t, 5))
情节(t, y (t, 20))
传奇(“线性”,“镇压\β= 5”,“镇压\β= 20”,“位置”,“最佳”)
[1] 人工智能Iliev: Kyurkchiev, s .马尔可夫 近似的削减和步骤功能物流和龚帕兹功能,Biomath 4卷,2号(2015)1 - 12,dx.doi.org/10.11145/j.biomath.2015.10.101
[2]j . z Dombi和基拉 分段线性近似的隶属度函数和Lukasiewicz操作符 154、模糊集和系统(2)(2005)275 - 286, http://dx.doi.org/10.1016/j.fss.2005.02.016
编辑
挤压的指数项函数可以成为非常大的大型(积极)*(即如果实验的参数函数大于约700)。我建议编辑函数使用简单的代数
1评论
明星黾
明星黾 2021年10月30日
这似乎是适当的解决方案。
如果需要接受它。

登录置评。

更多的答案(2)

约翰D 'Errico
约翰D 'Errico 2021年10月23日
编辑:约翰D 'Errico 2021年10月23日
你不能解决这个问题你口口声声要解决使用一个简单的逻辑。它没有flexiibility控制的幅度上升,以及位置和中点处的斜率。没有足够的自由参数的函数形式对手头的任务。
一个简单的变体问题将允许您编写的问题分段多项式的形式。
把它分成子问题:你能找到一个低阶多项式,穿过点(x, y)坐标(T50, 1),与给定斜坡吗?,要求曲线必须通过一个点(T100, 2),斜率为0。看到,因为你能控制距离T100 T50,那么它将允许您控制曲线的形状在上升。
一旦你完成以上的任务,你就会做同样的事情,有效地反映刚才发现的形式来完成这条曲线的下半部分。
一条直线没有足够复杂。但也许2或3阶多项式就足够了。事实上,你可以表明,必须至少有三次多项式来满足所有的条件。
所以,写下的需求。4一个三次多项式系数。称他们为a, b, c, d。我将使用符号来做这项工作,因为我太懒。我们将:
信谊a b c d T50 T100 t dT
P (t) = * t ^ 3 + b * t ^ 2 + c * t + d;
DPdt =差异(P t);
eq (1) = P (T50) = = 1;%的力曲线通过(T50, 1)
eq (2) = P (T100) = = 2;%的力量通过(T100, 2)
eq (3) = DPdt (T100) = = 0;%迫使上端点处的斜率是0
最后,中点处的斜率是多少?它必须匹配直线段的斜率。所以选择一些dT, dT大于0,但不到T100-T50。线段将选择,经过点(T50 - dT, 0)和(T50 + dT, 2)。(这是线性段画。线段的斜率为2 / (2 * dT) = 1 / dT。
eq (4) = DPdt (T50) = = 1 / dT;
现在我们可以解出a, b, c, d。
abcdsol =解决(eq (a, b, c, d))
abcdsol =结构体字段:
(T50 - T100 + 2 * dT) / (dT * (T50 - T100) ^ 3) b: - (T50 ^ 2 + T50 * T100 + 3 * * T50 dT - 2 * T100 ^ 2 + 3 * dT * T100) / (dT * (T50 - T100) ^ 3) c: - (- 2 * T50 ^ 2 * T100 + T50 * T100 ^ 2 - 6 * dT * T50 * T100 + T100 ^ 3) / (dT * (T50 - T100) ^ 3) d: (2 * dT * T50 ^ 3 - T50 ^ 2 * T100 ^ 2 - 6 * dT * T50 ^ 2 * T100 + T50 * T100 ^ 3 + 3 * dT * T50 * T100 ^ 2 - dT * T100 ^ 3) / (dT * (T50 - T100) * (T50 ^ 2 - 2 * T50 * T100 + T100 ^ 2))
是的,这个解决方案看起来有点凌乱,但是这就是为什么我们有电脑。这也是为什么我没有做这个用铅笔和纸。
小狗=潜艇(P, abcdsol)
小狗(t) =
一片混乱,但仍然容易使用。
首先,我会挑选一些值T50, T100, dT。在这个例子中,我将选择T50 = 2,然后我们会离开T100 dT在稍后的时间控制。
Pupperfun = matlabFunction(潜艇(小狗,T50 2))
Pupperfun =function_handle与价值:
@ (t T100 dT) (t ^ 2。* 1.0. / T100 - 2.0)。^ 3。* (T100。* 2.0 + dT。* 6.0 + T100。* dT。* 3.0 -T100 ^ 2 * 2.0 + 4.0)) / dT - (dT。* 1.6 e + 1-T100。* dT。* 2.4 e + 1 + T100。^ 2。* dT。* 6.0 -T100。^ 3 ^ 2 * dT-T100。* 4.0 + T100。^ 3。* 2.0)。/ (dT。* (T100 - 2.0) * (T100 * -4.0 + T100。^ 2 + 4.0))——(t ^ 3。* 1.0. / T100 - 2.0)。^ 3。* (-T100 + dT。* 2.0 + 2.0)) / dT - (t。* 1.0. / T100 - 2.0)。^ 3。* (T100 * 8.0 + T100。* dT。* 1.2 e + 1-T100 ^ 2 * 2.0 -T100。^ 3)) / dT
现在,绘制曲线。
%线段进行比较。在这里,我将选择
T50 = 2;
dT = 1;
T100 = 4;
情节([T50-dT、T50 T50 + dT], [0 1 2],“- r”)
持有
fplot (@ (T) Pupperfun (3.5 T), dT), T50, 3.5,‘g’)
fplot (@ (T) Pupperfun (T 4 dT), [T50 4],“b”)
包含T
网格
传奇(“线段”,“T100 = 3.5”,“T100 = 4”,“位置”,“东南”)
看看你可以控制曲线的形状通过调整T100和dT。你现在可以反映上层函数形式的下半部分曲线。我不会这么做,因为这是某种形式的学生项目。
1评论
法比奥Freschi
法比奥Freschi 2021年10月28日
编辑:法比奥Freschi 2021年10月28日
@John D 'Errico 谢谢你的回答。它真的有开明的我,所以我花了一些时间在工作这个想法。
我被你的方法,使用一种稍微不同的符号和观察的系数多项式函数可以解决线性系统计算
清晰的变量,关闭所有
%时间轴
t = linspace (1, 4, 1000)。';
%阶跃函数参数
Tr = 2;%上升时间
= 2;%最大价值
T50 = 2;%半上升点
%分段线性的阶跃函数
x = @ (t) (t > T50-Tr / 2 & t < T50 + Tr / 2) * (A / Tr。* (t-T50) + / 2) + (t > = T50 + Tr / 2)。*;
%控制参数
dT = 0.5;
%的多项式阶3:p0 + p1 * t + p2 * t ^ 2 + p3 * t ^ 3
[P = @ (t)的(大小(t)) t t。^ 2 t。^ 3);
%的导数多项式
dP = @ (t)[0(大小(t)) 1(大小(t)) 2 * 3 * t ^ 2);
%建立线性系统实施
% 1。通过(T50 + Tr / 2 + dT, A)。注意:T50 + Tr / 2 = T100
% 2。通过(T50 / 2)
% 3。零导数T50 + Tr / 2 + dT
% 4。规定了边坡T50
%系数矩阵
K = [P (T50 + Tr / 2 + dT)% 1
P (T50)% 2
dP (T50 + Tr / 2 + dT)% 3
dP (T50)];% 4
b = (% 1
/ 2;% 2
0;% 3
/ Tr];% 4
%解决找到p_i多项式的系数
p = K \ b;
%多项式函数
y = @ (t) (t > = T50 & t < T50 + Tr / 2 + dT)。* P (t) * P;
图,、网格
情节(t) x (t))
情节(t, y (t))
传奇(“线性”,“立方”)
绿色曲线,结果是相同的。但是有一个问题。参数的值 dT ,最大衍生品不是位于T50。例如,通过使用dT = 0.3,切三次多项式相交线段。
我也意识到一个类似的方法可以应用于编写一个高阶多项式,覆盖整个线段,施加合适的数量的限制。在这种情况下,一个五次多项式似乎是合适的。再次,问题是,对于某些参数的值 dT 最大斜率可以不位于T50。下面我展示情况导数最大值 T50 ,产生多个直线的交点。
清晰的变量,关闭所有
%时间轴
t = linspace (1, 4, 1000)。';
%阶跃函数参数
Tr = 2;%上升时间
= 2;%最大价值
T50 = 2;%半上升点
%分段线性的阶跃函数
x = @ (t) (t > T50-Tr / 2 & t < T50 + Tr / 2) * (A / Tr。* (t-T50) + / 2) + (t > = T50 + Tr / 2)。*;
%控制参数
dT = 0.15;
%的多项式阶5:p0 + p1 * t + p2 * t ^ 2 + p3 * t ^ 3 + p4 * t ^ 4 + p5 * t ^ 5
[P = @ (t)的(大小(t)) t t。^ 2 t。^ 3 t。^ 4 t。^ 5);
%的导数多项式
dP = @ (t)[0(大小(t)) 1(大小(t)) 2 * 3 * t。4 * t ^ 2。^ 3 5 * t。^ 4);
%建立线性系统实施
% 1。通过(T50-Tr / 2-dT, 0)
% 2。通过(T50 + Tr / 2 + dT,)
% 3。零导数T50-Tr / 2-dT
% 4。零导数T50 + Tr / 2 + dT
% 5。通过(T50 / 2)
% 6。规定在T50斜率:A / Tr
%系数矩阵
K = [P (T50-Tr / 2-dT)% 1
P (T50 + Tr / 2 + dT)% 2
dP (T50-Tr / 2-dT)% 3
dP (T50 + Tr / 2 + dT)% 4
P (T50)% 5
dP (T50)];% 6
% rhs
b = [0;一个;0;0;/ 2;/ Tr];
%解决找到p_i多项式的系数
p = K \ b;
% smooth-step函数
y = @ (t) (t > T50-Tr / 2-dT & t < T50 + Tr / 2 + dT)。* P (t) * P + (t > = T50 + Tr / 2 + dT)。*;
% smooth-step函数的导数
dy = @ (t) (t > T50-Tr / 2-dT & t < T50 + Tr / 2 + dT)。* * p dP (t);
图,、网格
情节(t) x (t))
情节(t, y (t))
情节(t, dy (t))
传奇(“线性”,五次的,“衍生品”)
为了克服这种不方便有什么建议呢?
再次感谢您的帮助
法比奥

登录置评。


明星黾
明星黾 2021年10月23日
在我看来,一个选择是过滤的原始信号“圆滑”的急剧转换。我第一次尝试频率选择滤波器,然而转换太渐进的过滤。(通常在方波脉冲工作,虽然这里没有。)
最后,我去了Savitzky-Golay ( sgolayfilt )过滤器。
%时间轴
t = linspace (0 5 1 e + 5);
%阶跃函数参数
Tr = 1;
= 2;
t50 = 2;
%分段线性的阶跃函数
x = @ (t) (t > t50-Tr / 2 & t < t50 + Tr / 2) * (a / Tr。* (t-t50) + / 2) + (t > = t50 + Tr / 2)。*;
%的物流功能
y = @ a (t) / (1 + exp (4 * (t-t50) / Tr));
%的阴谋
图,
情节(t) x (t))
情节(t, y (t))
持有
网格
L =元素个数(t);
十五= x (t);
青年志愿= y (t);
xvf = sgolayfilt(十五1 1 + L * 0.075);
情节(t,十五,t, xvf)
网格
实验框架的长度(第三个参数,必须是奇数,这里我表达的一小部分信号长度)和多项式秩序(第二个参数)来获得期望的结果。
2的评论
明星黾
明星黾 2021年10月28日
导数的计算数值,使用 梯度 函数向量)
dxvf =梯度(xvf)。/梯度(t);
当然另一种选择是使用 polyfit 近似 “xvf” 作为一个多项式足够的订单,然后 polyder 计算导数和高阶导数(如果需要)。

登录置评。

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!