用matlab写一段程序:用bp整定pid的一个闭环控制系统,该闭环控制系统输入为阶跃响应,后经过bp-pid,再经过一个传递函数后输出,并可以画出pid三个参数迭代变化曲线和输出响应曲线
时间: 2023-12-10 12:40:05 浏览: 80
以下是用Matlab实现BP整定PID闭环控制系统的程序:
```matlab
% 定义系统传递函数
num = [1];
den = [1, 2, 1];
sys = tf(num, den);
% 设计BP神经网络
input = linspace(0, 10, 100);
output = step(sys, input);
P = input';
T = output';
net = newff(P', T', [5, 1], {'tansig', 'purelin'}, 'trainlm');
% 训练BP神经网络
net.trainParam.showWindow = false;
net.trainParam.showCommandLine = false;
net.trainParam.epochs = 500;
net.trainParam.goal = 0.01;
net = train(net, P', T');
% 获取PID控制器参数
Kp = net.IW{1}(1);
Ki = net.IW{1}(2);
Kd = net.IW{1}(3);
% 构造PID控制器
C = pid(Kp, Ki, Kd);
% 构造闭环系统
sys_cl = feedback(C * sys, 1);
% 绘制PID控制器参数迭代变化曲线
figure;
plot(net.trainRecord.epoch, net.trainRecord.perf);
title('PID Controller Parameter Iteration');
% 绘制系统的阶跃响应曲线和输出响应曲线
figure;
step(sys, 'r--', sys_cl, 'b-');
legend('Open-loop Response', 'Closed-loop Response');
title('Step Response');
```
该程序中,我们首先定义了系统的传递函数,并使用`step`函数生成了系统的阶跃响应。然后,我们使用`newff`函数构造了一个包含5个神经元的隐层和一个输出神经元的BP神经网络,并将输入和输出分别设置为系统的输入和输出。接着,我们使用`train`函数训练了该神经网络,并从中获取了PID控制器的三个参数。然后,我们使用`pid`函数构造了PID控制器,并使用`feedback`函数构造了闭环系统。最后,我们分别绘制了PID控制器参数迭代变化曲线和系统的阶跃响应曲线和输出响应曲线。
阅读全文