首页 > 编程知识 正文

Logistic函数,logistics 函数

时间:2023-05-03 21:51:51 阅读:178337 作者:2577

在这几天神经网络分类器的学习中,发现了Sigmoid函数。

Sigmoid函数的公式如下。

可以在Matlab或Octave中绘制函数曲线。

t=-60:0.1:60; s=1./(1e.^(-0.2*t ) ); plot(t,s ) xlabel(x ) (ylabel ) s ) x ) ) title ) sigmoid ) )

但是今天,我接通了电机,学会了电机有加速度,速度达到一个值。 希望该加速度先缓慢增加,再缓慢减少。 这样,电机的旋转就更顺畅了。 业界喜欢把这个过程称为“加减速”。 请参照下图。 必须使电机旋转到目标速度、速度或加速度的骤变,可能会引起电流浪涌。 由于转子的速度急剧变化,带电的定子线圈将产生反电动势。 加速度的急剧变化可能会因惯性引起机械损伤。 因此,对于速度和加速度的变化,或注入电机的电流和电压,最好有一个渐进的过程。

(这张照片感谢名为《硬石电机控制专题指导手册_20180515》的开源部分)

据了解,速度和时间曲线宜为s形曲线。 但是,这条曲线很难用单片机实现。 以往的减少速度

突变的方法是用左边的梯形加减速。

但是,我手头的主板是STM32F4,带FPU的核心是Cortex-m4的微控制器,所以实时性有了保证。 该MCU的工作频率可达168MHz,我选择每1ms运行本算法。 从CPU的消费量来看,这应该还很充裕。

因为想起了以前的神经元激活函数Sigmoid,在网上搜索了Sigmoid函数,找到了Logistic函数。

简化的结果是:

该函数有三个变量,第一个是k,k是最终值,但是是初始值。 也就是说,t=0时,曲线相对于纵轴横穿。 时间常数。

在下图中,P0不变化(P0=0.5 ),(tau不变化) tau=1),k不变化。 蓝线表示K=1,红线表示K=10,绿线表示K=100。

P0=0.5; K=1; r=1; t=-10:0.1:10; pt=k./(1) k/p0-1 ).*e.^(-r*t ) ); plot(t,Pt,' b ' ) K=10; pt=k./(1) k/p0-1 ).*e.^(-r*t ) ); Holdonplot(t,Pt,' r ' ) K=100; pt=k./(1) k/p0-1 ).*e.^(-r*t ) ); holdonplot(t,Pt,' g ' ) xlabel ) t ) ylabel ) ) p ) x ) ) title ) logisticcurveofp0=0.5.t=1. k=1,10,

然后,我们改变P0; 将时间常数设为1、K=10、开始值P0分别设为1 (蓝色线)、5 )红色线)、9 )绿色线)。

在Matlab或Octave中执行以下代码:

P0=1; K=10; r=1; t=-10:0.1:10; pt=k./(1) k/p0-1 ).*e.^(-r*t ) ); plot(t,Pt,' b ' ) P0=5; pt=k./(1) k/p0-1 ).*e.^(-r*t ) ); Holdonplot(t,Pt,' r ' ) ) P0=9; pt=k./(1) k/p0-1 ).*e.^(-r*t ) ); holdonplot(t,Pt,' g ' ) xlabel ) t ) ylabel ) ) p ) x ) ) title ) logisticcurveofp0=1,5,9.t=1. k=10

t=0时,初始值为p(t )的值。 当t=0时,p(0)=P0。 整个曲线似乎根据p(0)左右移动。

第三个参数是时间常数。 K=1,p(0)=0.5,(将tau分别设为0.1、1、10

下午,放松这三个参数,尝试将函数的输出转换为电机的脉冲速度。 (电机是步进电机,发送一个个脉冲后角度就会旋转。 增加每秒的脉冲数可以增加电机的转速。

另外,在减速中也可以使用本方法,只要将曲线镜像到纵轴上,就可以得到减速的速度曲线。

镜像后曲线函数:

正文思绪混乱……就当草稿看吧……国庆节呆在自己房间里工作也不容易。

总之,主要的故事是s形曲线。 没想到在电机控制下还能使用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。