💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

2.1 模糊控制

2.2 T-S模糊系统

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

Fuzzy Control和T-S方法是控制系统中常见的两种技术,用于处理模糊系统建模和控制设计。这些方法在状态估计和控制领域有着广泛的应用。以下是关于这两种方法的简要介绍和研究方向:

1. **模糊控制 (Fuzzy Control)**:
   - **基本原理**:模糊控制是一种基于模糊逻辑的控制方法,它能够处理非精确、模糊的输入、输出和规则。模糊控制系统包括模糊推理、模糊集合、模糊规则库和模糊推理引擎等组成部分。
   - **应用**:模糊控制常用于处理具有模糊输入和输出的复杂系统,如温度控制、汽车转向控制、空调系统等。

   在研究方面,你可以考虑以下问题:
   - **模糊系统建模**:研究如何使用模糊集合和模糊规则来描述系统的动态行为,尤其是在非线性和模糊环境中。
   - **模糊控制器设计**:探索如何设计有效的模糊控制器来实现系统的目标,例如通过模糊规则的优化和推理引擎的改进。
   - **模糊系统与其他控制方法的集成**:研究模糊控制与传统控制方法(如PID控制器)或者机器学习算法(如神经网络)的集成,以提高控制性能和适用性。

2. **T-S模糊系统方法 (Takagi-Sugeno Method)**:
   - **基本原理**:T-S模糊系统是一种基于Takagi-Sugeno模型的模糊系统,它将模糊规则应用于线性子系统上,从而实现对非线性系统的建模和控制。
   - **应用**:T-S模糊系统常用于系统建模和控制,特别是对于非线性系统,可以通过线性子系统的组合来近似非线性系统的动态特性。

   在研究方面,你可以考虑以下问题:
   - **T-S模糊系统的建模技术**:研究如何有效地识别和建立T-S模糊系统的模型,包括确定模糊规则、隶属函数和线性子系统。
   - **T-S模糊系统的控制设计**:探索如何设计有效的T-S模糊控制器来实现系统的稳定性和性能要求,例如使用线性矩阵不等式(LMI)或其他优化方法进行控制器设计。
   - **T-S模糊系统在实际应用中的验证**:研究如何将T-S模糊系统应用于实际控制问题,并评估其在不同环境和条件下的性能表现。

以上是关于模糊控制和T-S模糊系统方法的一些研究方向和问题,你可以根据自己的兴

📚2 运行结果

2.1 模糊控制

clear;clc;close all;
% 观测点数
N = 500;
x = linspace(-2*pi, 2*pi,N );
% 信号
y = 3 * sin(x)+2*cos(x.^2);
% 噪声(方差1.25)
v1 = 0.05*randn(N , 1).*y';
v2 = sqrt(0.5)*randn(N , 1);
v=v1+v2;%噪声信号
z=y'+v;%真实输出信号
d=y';%期望输出信号
P=x;
T=z';

%% 画图
plot(x,y);
hold on;
plot(x,T);
axis([-2*pi 2*pi -6 6]);
legend('y-x曲线','z-x曲线');
xlabel('横坐标 x');
ylabel('纵坐标 y');

figure;
plot(x,v');
axis([-2*pi 2*pi -2 2]);
legend('v-x曲线');
xlabel('横坐标 x');
ylabel('纵坐标 y');

% 数据集设置
[a,b]=dividerand([P;T],0.8,0.2); %训练集+验证集 80%,测试集20%
trainp=a(1,:);
traint=a(2,:);
testp=b(1,:);
testt=b(2,:);

clear;clc;close all;
% 观测点数
N = 500;
x = linspace(-2*pi, 2*pi,N );
% 信号
y = 3 * sin(x)+2*cos(x.^2);
% 噪声(方差1.25)
v1 = 0.05*randn(N , 1).*y';
v2 = sqrt(0.5)*randn(N , 1);
v=v1+v2;%噪声信号
z=y'+v;%真实输出信号
d=y';%期望输出信号
P=x;
T=z';

%% 画图
plot(x,y);
hold on;
plot(x,T);
axis([-2*pi 2*pi -6 6]);
legend('y-x曲线','z-x曲线');
xlabel('横坐标 x');
ylabel('纵坐标 y');

figure;
plot(x,v');
axis([-2*pi 2*pi -2 2]);
legend('v-x曲线');
xlabel('横坐标 x');
ylabel('纵坐标 y');

% 数据集设置
[a,b]=dividerand([P;T],0.8,0.2); %训练集+验证集 80%,测试集20%
trainp=a(1,:);
traint=a(2,:);
testp=b(1,:);
testt=b(2,:);

2.2 T-S模糊系统

clear;clc;
close all;
%数据点个数51 
numpts=500; 
x1=linspace(-2*pi,2*pi,numpts); 
d=3 * sin(x1)+2*cos(x1.^2); 
% 噪声(方差1.25)
v1 = 0.05*randn(numpts , 1).*d';
v2 = sqrt(0.5)*randn(numpts , 1);
v=v1+v2;%噪声信号
y=d+v';
data=[x1' y'];     %整个数据集 
[train,test]=dividerand(data',0.8,0.2);
% trndata=data(1:2:numpts,:);    %训练数据集 
% chkdata=data(2:2:numpts,:);    %测试数据集 
trndata=train';
chkdata=test';
%训练数据和检验数据的分布曲线 
% plot(trndata(:,1),trndata(:,2),'o',chkdata(:,1),chkdata(:,2),'x') 
 
%建立T_S模糊模型 
%采用genfis1()函数直接由训练数据生成模糊推理系统 
nummfs=20;           %隶属度函数个数 
mftype='gbellmf';    %隶属度函数类型 gbellmf钟形隶属度函数
fismat=genfis1(trndata,nummfs,mftype); 
% showrule(fismat)
% in = getTunableSettings(fismat)

% 建立 Mamdani模糊系统
% opt1 = genfisOptions('FCMClustering' , 'FISType' , 'mamdani' );
% opt1.NumClusters = 30;
% fis = genfis (x1', y', opt1);
% showrule(fis)
dataRange = [min(data)' max(data)'];
fisin = mamfis;
fisin = addInput(fisin,[-2*pi,2*pi], 'Name' ,'in', 'NumMFs' ,32,'mftype','gaussmf');
fisin = addOutput(fisin,[-6.534905896158901,6.092046113952383], 'Name' ,'out', 'NumMFs' ,64,'mftype','gaussmf');
figure
plotfis(fisin)

% %绘制模糊推理系统的初始隶属度函数 
% [x,mf]=plotmf(fismat,'input',1); 
% figure 
% plot(x,mf); 
% title('initial menbership functions') 
 
%使用函数anfis()进行神经模糊建摸 
numepochs=100;   %训练次数40 
opt=anfisOptions("InitialFIS",fismat,"EpochNumber",numepochs,"ErrorGoal",0.005,"InitialStepSize",0.01,"StepSizeDecreaseRate",0.9,"ValidationData",chkdata);
[fismat1,truerr,ss,fismat2,chkerr]=anfis(trndata,opt);
%计算训练后神经模糊系统的输出与训练数据的均方根误差 
trnout=evalfis(trndata(:,1),fismat1); 
trnrmse=norm(trnout-trndata(:,2))/sqrt(length(trnout)); 


%使用函数tunefis()调整Mamdani模糊推理模型
% 1学习规则
options = tunefisOptions( 'Method' , 'particleswarm' , ... 
    'OptimizationType' , 'learning' , ... 
    'NumMaxRules' ,64);
options.MethodOptions.MaxIterations = 50;
options.UseParallel=true;
% [in,out,rule] = getTunableSettings(fis);
fisout1=tunefis(fisin,[],trndata(:,1),trndata(:,2),options);
figure
plotfis(fisout1)

%2 调整所有参数
[in,out,rule] = getTunableSettings(fisout1);
options.OptimizationType = 'tuning';
options.Method = 'patternsearch';
options.MethodOptions.MaxIterations = 60;
options.MethodOptions.UseCompletePoll = true;
fisout = tunefis(fisout1,[in;out;rule],trndata(:,1),trndata(:,2),options); 
figure
plotfis(fisout)


%绘制训练过程中均方根误差的变化情况 
epoch=1:numepochs; 
figure 
plot(epoch,truerr,'o',epoch,chkerr,'x') 
hold on 
plot(epoch,[truerr,chkerr]); 
hold off 
title('误差曲线');
legend("训练集误差","验证集误差");
 
% %绘制训练过程中的步长的变化的情况 
% figure 
% plot(epoch,ss,'-',epoch,ss,'x'); 
% title('步长变化曲线') 
 
% %绘制训练后模糊推理系统的输入隶属度函数曲线 
% [x,mf]=plotmf(fismat1,'input',1); 
% figure 
% plot(x,mf) 
% title('训练后的输入隶属度函数'); 

% % %绘制训练后模糊推理系统的输入隶属度函数曲线 
% % % figure 
% plotmf(fismat1,'output',1); 
% title('训练后的输出隶属度函数'); 
 
%绘制神经模糊推理系统的输出曲线 
pre_y=evalfis(x1,fismat1); %系统辨识
pre_y_1=evalfis(x1,fisout1); %系统辨识
mse1=norm(y-d)/sqrt(length(d)); 
mse=norm(pre_y-d')/sqrt(length(d')); 
mse_mamfis=norm(pre_y_1-d')/sqrt(length(d')); 

figure 
plot(x1,d,'-r');
hold on;
plot(x1,y,'-b');
hold on;
plot(x1,pre_y_1,'--',"LineWidth",2)
title('系统辨识曲线');
legend("理想系统",sprintf('辨识前的系统:误差%.03f',mse1),sprintf('模糊集合辨识后的系统:误差%.03f',mse_mamfis));

%总曲线
figure 
plot(x1,d,'-r');
hold on;
plot(x1,y,'-b');
hold on;
plot(x1,pre_y,'--k',"LineWidth",2)
hold on;
plot(x1,pre_y_1,'--',"LineWidth",2)
title('系统辨识曲线');
legend("理想系统",sprintf('辨识前的系统:误差%.03f',mse1),sprintf('T-S模型辨识后的系统:误差%.03f',mse),sprintf('模糊集合辨识后的系统:误差%.03f',mse_mamfis));

clear;clc;
close all;
%数据点个数51 
numpts=500; 
x1=linspace(-2*pi,2*pi,numpts); 
d=3 * sin(x1)+2*cos(x1.^2); 
% 噪声(方差1.25)
v1 = 0.05*randn(numpts , 1).*d';
v2 = sqrt(0.5)*randn(numpts , 1);
v=v1+v2;%噪声信号
y=d+v';
data=[x1' y'];     %整个数据集 
[train,test]=dividerand(data',0.8,0.2);
% trndata=data(1:2:numpts,:);    %训练数据集 
% chkdata=data(2:2:numpts,:);    %测试数据集 
trndata=train';
chkdata=test';
%训练数据和检验数据的分布曲线 
% plot(trndata(:,1),trndata(:,2),'o',chkdata(:,1),chkdata(:,2),'x') 
 
%建立T_S模糊模型 
%采用genfis1()函数直接由训练数据生成模糊推理系统 
nummfs=20;           %隶属度函数个数 
mftype='gbellmf';    %隶属度函数类型 gbellmf钟形隶属度函数
fismat=genfis1(trndata,nummfs,mftype); 
% showrule(fismat)
% in = getTunableSettings(fismat)

% 建立 Mamdani模糊系统
% opt1 = genfisOptions('FCMClustering' , 'FISType' , 'mamdani' );
% opt1.NumClusters = 30;
% fis = genfis (x1', y', opt1);
% showrule(fis)
dataRange = [min(data)' max(data)'];
fisin = mamfis;
fisin = addInput(fisin,[-2*pi,2*pi], 'Name' ,'in', 'NumMFs' ,32,'mftype','gaussmf');
fisin = addOutput(fisin,[-6.534905896158901,6.092046113952383], 'Name' ,'out', 'NumMFs' ,64,'mftype','gaussmf');
figure
plotfis(fisin)

% %绘制模糊推理系统的初始隶属度函数 
% [x,mf]=plotmf(fismat,'input',1); 
% figure 
% plot(x,mf); 
% title('initial menbership functions') 
 
%使用函数anfis()进行神经模糊建摸 
numepochs=100;   %训练次数40 
opt=anfisOptions("InitialFIS",fismat,"EpochNumber",numepochs,"ErrorGoal",0.005,"InitialStepSize",0.01,"StepSizeDecreaseRate",0.9,"ValidationData",chkdata);
[fismat1,truerr,ss,fismat2,chkerr]=anfis(trndata,opt);
%计算训练后神经模糊系统的输出与训练数据的均方根误差 
trnout=evalfis(trndata(:,1),fismat1); 
trnrmse=norm(trnout-trndata(:,2))/sqrt(length(trnout)); 


%使用函数tunefis()调整Mamdani模糊推理模型
% 1学习规则
options = tunefisOptions( 'Method' , 'particleswarm' , ... 
    'OptimizationType' , 'learning' , ... 
    'NumMaxRules' ,64);
options.MethodOptions.MaxIterations = 50;
options.UseParallel=true;
% [in,out,rule] = getTunableSettings(fis);
fisout1=tunefis(fisin,[],trndata(:,1),trndata(:,2),options);
figure
plotfis(fisout1)

%2 调整所有参数
[in,out,rule] = getTunableSettings(fisout1);
options.OptimizationType = 'tuning';
options.Method = 'patternsearch';
options.MethodOptions.MaxIterations = 60;
options.MethodOptions.UseCompletePoll = true;
fisout = tunefis(fisout1,[in;out;rule],trndata(:,1),trndata(:,2),options); 
figure
plotfis(fisout)


%绘制训练过程中均方根误差的变化情况 
epoch=1:numepochs; 
figure 
plot(epoch,truerr,'o',epoch,chkerr,'x') 
hold on 
plot(epoch,[truerr,chkerr]); 
hold off 
title('误差曲线');
legend("训练集误差","验证集误差");
 
% %绘制训练过程中的步长的变化的情况 
% figure 
% plot(epoch,ss,'-',epoch,ss,'x'); 
% title('步长变化曲线') 
 
% %绘制训练后模糊推理系统的输入隶属度函数曲线 
% [x,mf]=plotmf(fismat1,'input',1); 
% figure 
% plot(x,mf) 
% title('训练后的输入隶属度函数'); 

% % %绘制训练后模糊推理系统的输入隶属度函数曲线 
% % % figure 
% plotmf(fismat1,'output',1); 
% title('训练后的输出隶属度函数'); 
 
%绘制神经模糊推理系统的输出曲线 
pre_y=evalfis(x1,fismat1); %系统辨识
pre_y_1=evalfis(x1,fisout1); %系统辨识
mse1=norm(y-d)/sqrt(length(d)); 
mse=norm(pre_y-d')/sqrt(length(d')); 
mse_mamfis=norm(pre_y_1-d')/sqrt(length(d')); 

figure 
plot(x1,d,'-r');
hold on;
plot(x1,y,'-b');
hold on;
plot(x1,pre_y_1,'--',"LineWidth",2)
title('系统辨识曲线');
legend("理想系统",sprintf('辨识前的系统:误差%.03f',mse1),sprintf('模糊集合辨识后的系统:误差%.03f',mse_mamfis));

%总曲线
figure 
plot(x1,d,'-r');
hold on;
plot(x1,y,'-b');
hold on;
plot(x1,pre_y,'--k',"LineWidth",2)
hold on;
plot(x1,pre_y_1,'--',"LineWidth",2)
title('系统辨识曲线');
legend("理想系统",sprintf('辨识前的系统:误差%.03f',mse1),sprintf('T-S模型辨识后的系统:误差%.03f',mse),sprintf('模糊集合辨识后的系统:误差%.03f',mse_mamfis));

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]修智宏,任光.T-S模糊控制系统的稳定性分析及系统化设计[J].自动化学报, 2004, 30(5):11.DOI:CNKI:SUN:MOTO.0.2004-05-010.

[2]李柠,李少远,席裕庚.比例型T-S模糊控制系统稳定性分析与设计[J].控制理论与应用, 2003, 20(4):6.DOI:10.3969/j.issn.1000-8152.2003.04.004.

🌈4 Matlab代码实现

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐