一直想要用BP神经网络来训练自动控制理论里面的传递函数,想法很简单:用输入数据(如单位阶跃信号)和输出数据(传递函数的输出)放在BP神经网络中,这样肯定能建立输入与输出的关系。但具体如何实现一直没有头绪,直到读了这篇
https://blog.csdn.net/m0_47868423/article/details/124538007?spm=1001.2014.3001.5502
博主非常详细地介绍了如何用BP神经网络实现正弦函数的步骤,我也照着复现了,但是当我想拓展到训练自控传递函数时,还是出现了问题。我们一般理解传递函数的输入是阶跃信号,一开始我只是将阶跃信号的幅值作输入,传函输出的幅值做输出。但是训练的结果就是不对。想了好长时间,传函是拉斯域,反拉斯变换到时域后,输出和时间是有关系的,但我们不至于要做拉斯反变换吧,尤其高阶系统,还有非线性系统,做拉斯反变换的话,复杂又不现实。后来突然想到会不会输入应该是两个变量:时间和幅值。这个BP神经网络输入为2,输出为1。
我用的MATLAB是2020b版本,to workspace与上面博主的显示略有不同,创建如下:
这里的to workspace储存形式要包括时间,设置如下:
输入数据就是两列,阶跃信号的时间和幅值,代码如下: