📄 feedb.m
字号:
% feedbl.m
% 反馈线性化
% 初始化
clear
X1 = [rand(1,300)*pi, rand(1,100)*pi];
X2 = [rands(1,300)*pi, zeros(1,100) ];
P = [X1; X2];
dt = 0.05;
T= X2 + dt*(10*sin(X1)-2*(X2));
[R,Q] = size(P);
S1 = 10;
[S2,Q] = size(T);
% 训练网络
%========
net = newff(minmax(P),[S1 S2],{'tansig' 'purelin'},'trainlm');
[w1,b1]=rands(S1,R);
[w2,b2]=rands(S2,S1);
net.iw{1,1}=w1*0.7;
net.b{1}=b1;
net.lw{2,1}=w2*0.5;
net.b{2}=b2*0.5;
net.performFcn = 'sse';
net.trainParam.goal = 0.02;
net.trainParam.show = 100;
net.trainParam.epochs = 5000;
net.trainParam.mc = 0.95;
net.trainParam.lr=0.0001;
net.trainParam.lr_inc =1.05;
net.trainParam.lr_dec =0.7;
[net,tr] = train(net,P,T);
W1 = net.iw{1,1};
B1 = net.b{1};
W2 = net.lw{2,1};
B2=net.b{2};
pause %按任意键测试网络性能
% x2 = 0, Nf对x1的函数逼近
dt = 0.05;
x1 = 0:.01*pi:pi;
x2 = 0*ones(1,101);
xt = [x1; x2];
% 计算网络输出以及期望输出
nf = purelin(W2*tansig(W1*xt,B1),B2);
df = x2 + dt*(9.81*sin(x1)-x2);
plot(x1,nf,x1,df,'--')
title('Nf __ & desired Nf -- as f[x(1)] with x(2)=0')
xlabel('x(1)')
ylabel('Nf')
grid
pause %按任意键继续
% x1 = pi/2, Nf对x2的速度的响应
dt = 0.05;
x1 = pi/2*ones(1,101);
x2 = -2*pi:.04*pi:2*pi;
xt=[x1; x2];
% 计算网络输出以及期望输出
nf=purelin(W2*tansig(W1*xt,B1),B2);
df = x2 + dt*(9.81*sin(x1)-x2);
% 作图
plot(x2, nf, x2, df, '--')
title('Nf __ & Desired Nf -- as f[x(2)] with x(1)=pi/2')
xlabel('x(2)')
ylabel('Nf')
grid
pause
% 测试系统响应
dtr = 1/180*pi; % 度与弧度的转换量
% 状态与参考输入
xm=[10*dtr;0];
r=90*dtr;
% 线性参考模型常数
k=[9 6];km=k;
% 线性控制器常数
kl=[9 4];
ul=0;u =0;up=0;um=0;
x=xm;xl=xm;xp=xm;
% 仿真参数
tmax=4;dt=0.05;j=1;
% 计算初始输入
% 计算理想对消控制信号
up=k(1)*r-k*xp-(9.81*sin(xp(1)))-2*xp(2);
% 计算神经网络控制信号(逼近对消)
nf=purelin(W2*tansig(W1*x,B1),B2);
u=(x(2)+dt*(k(1)*r-k*x)-nf)/dt;
% 计算非线性系统线性控制信号
ul=-10-kl*xl+kl(1)*r;
% 计算线性参考控制模型的线性控制信号
um=-km*xm+km(1)*r;
% 系统仿真回路
for t=dt:dt:tmax
% 具有理想对消控制器系统的调整
xpdot=zeros(2,1);
xpdot(1)=xp(2,j);
xpdot(2)=9.81*sin(xp(1,j))-2*xp(2,j) + up(j);
xp = [xp (xpdot*dt + xp(:,j))];
% 线性参考模型的调整
xmdot=zeros(2,1);
xmdot(1)=xm(2,j);
xmdot(2)=um(j);
xm = [xm (xmdot*dt + xm(:,j))];
% 具有神经网络控制器系统的调整
xdot=zeros(2,1);
xdot(1)=x(2,j);
xdot(2)=9.81*sin(x(1,j))-2*x(2,j) + u(j);
x = [x (xdot*dt + x(:,j))];
% 具有线性控制器系统的调整
xldot=zeros(2,1);
xldot(1)=xl(2,j);
xldot(2)=9.81*sin(xl(1,j))-2*xl(2,j) + ul(j);
xl = [xl (xldot*dt + xl(:,j))];
j=j+1;
% 计算理想对消控制信号
up=[up (k(1)*r-k*(xp(:,j))-(10*sin(xp(1,j))-2*xp(2,j)))];
% 计算神经网络控制信号(逼近对消)
nf=purelin(W2*tansig(W1*x(:,j),B1),B2);
u=[u (x(2,j)+dt*(k(1)*r-k*x(:,j))-nf)/dt];
% 计算非线性系统的线性控制信号
ul=[ul (-10-kl*xl(:,j)+kl(1)*r)];
% 计算线性参考控制模型的线性控制信号
um=[um (-km*xm(:,j)+km(1)*r)];
end
t = 0:dt:tmax;
d = r*ones(size(t));
% 作图(转化成度)
rtd=180/pi;
% 神经网络控制器与线性参考模型,以及精确非线性对消控制器的响应
plot(t,rtd*x(1,:),t,rtd*xm(1,:),'--',t,rtd*d)
hold on
plot(t,rtd*x(1,:),t,rtd*xp(1,:),'-',t,rtd*d)
title('Neural __, Reference Model & Perfect Cancel -- Responses')
xlabel('Time (sec)')
ylabel('Position (deg)')
grid
hold off
pause
% 神经网络控制器与线性控制器的响应
plot(t,rtd*x(1,:),t,rtd*xl(1,:),'--',t,rtd*d)
title('Neural __ & Linear Control -- Responses')
xlabel('Time (sec)')
ylabel('Position (deg)')
grid
pause
% 3种控制器的控制电流
plot(t,u,t,ul,'--',t,up,'o')
title('Currents: Neural __ Linear -- Perfect Cancel oo')
xlabel('Time (sec)')
ylabel('Control Current (amps)')
grid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -