1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWcmp9r
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
利用模糊数学的基本思想和理论的控制方法。在传统的控制领域里,控制系统动态模式的精确与否是影响控制优劣的最主要关键。系统动态的信息越详细,则越能达到精确控制的目的。然而,对于复杂的系统,由于变量太多,往往难以正确的描述系统的动态,于是工程师便利用各种方法来简化系统动态,以达成控制的目的,但却不尽理想。换言之,传统的控制理论对于明确系统有强而有力的控制能力,但对于过于复杂或难以精确描述的系统,则显得无能为力了。因此便尝试着以模糊数学来处理这些控制问题。
4.部分源码
.....................................................................
a=addrule(a,rulelist);
a=setfis(a,'DefuzzMethod','mom');
writefis(a,'fuzzpid');
a=readfis('fuzzpid');
%显示规则
showrule(a)
%%
%控制对象的设置
%采样时间
ts = 0.002;
%产生连续形式的传递函数
Gp = tf([16],[10,1.2,6]);
%产生离散形式的传递函数
Gpz = c2d(Gp,ts,'z');
%将传递函数转换为差分式子
[num,den] = tfdata(Gpz,'v');
%%
%控制算法初始参数
L = 100;
fai = 0.1;
F = 50;
%此变量分别保存误差,误差积分以及误差导数
Err = [0,0,0]';
%延迟变量
y_1 = 0;
y_2 = 0;
u_1 = 0;
u_2 = 0;
e_1 = 0;
ei = 0;
ed = 0;
%%
%迭代过程
Time = 1001;
u = zeros(1,Time);
Pk = L*ones(1,Time);
Ik = fai*ones(1,Time);
Dk = F*ones(1,Time);
M = 8;
Ed = 0.0;
Ecd = 0.0;
for i=0:1:M
for k=1:1:Time
%产生时间变量
time(k) = (k-1)*ts;
%给定轨迹输入
yd(k) = 8*sin(6*2*pi*k*ts);
%根据模糊规则,进行PID参数的更新
k_pid = evalfis([Ed,Ecd],a);
Pk(k) = L + k_pid(1);
Ik(k) = fai+ k_pid(2);
Dk(k) = F + k_pid(3);
%控制对象模型的输出
.......................................................................
%使用延迟程序起到存储器的功能
u2(k) = u(k);
e_1 = e(k);
y_2 = y_1;
y_1 = y(k);
u_2 = u_1;
u_1 = u2(k);
Ed = e(k);
Ecd = e(k)-e_1;
end
i=i+1;
end
figure;
subplot(311);
plot(time,yd,'b','linewidth',2);
xlabel('time(s)');
ylabel('yd');
legend('给定位移曲线');
axis([0,2,-12,12]);
subplot(312);
plot(time,y,'b','linewidth',2);
xlabel('time(s)');
ylabel('y');
legend('跟踪位移曲线');
axis([0,2,-12,12]);
subplot(313);
plot(time,yd-y,'r','linewidth',2);
xlabel('time(s)');
ylabel('error');
legend('误差曲线');
axis([0,2,-1,1]);
figure;
subplot(311);
plot(time,Pk,'b','linewidth',1);
xlabel('time(s)');
ylabel('L');
legend('参数L的模糊PID方式下的自适应变化');
subplot(312);
plot(time,Ik,'b','linewidth',1);
xlabel('time(s)');
ylabel('fai');
legend('参数fai的模糊PID方式下的自适应变化');
subplot(313);
plot(time,Dk,'b','linewidth',1);
xlabel('time(s)');
ylabel('F');
legend('参数F的模糊PID方式下的自适应变化');
figure;
subplot(321);plotmf(a,'input',1); title('E隶属函数变化');
subplot(322);plotmf(a,'input',2); title('Ec隶属函数变化');
subplot(323);plotmf(a,'output',1); title('L隶属函数变化');
subplot(324);plotmf(a,'output',2); title('fai隶属函数变化');
subplot(325);plotmf(a,'output',3); title('F隶属函数变化');
figure;
plotfis(a);
08_027_m