您现在的位置:首页 >> 智能控制 >> 内容

m基于matlab的模糊控制器仿真实现,采用matlab编程方式定义模糊规则,隶属函数等

时间:2023/3/3 19:29:17 点击:

  核心提示:08_027_m,包括程序操作录像+说明文档...

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

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168