自适应神经模糊系统及其MATLAB实现
在Matlab中进行模糊系统建模与控制

在Matlab中进行模糊系统建模与控制在Matlab中进行模糊系统的建模与控制是一项重要且有挑战性的任务。
随着模糊控制理论的广泛应用和发展,越来越多的工程师和研究人员开始尝试使用Matlab来实现模糊系统的建模与控制。
本文将会深入探讨在Matlab中进行模糊系统建模与控制的相关内容,希望能给读者带来一些有益的指导和启示。
在开始之前,我们先了解一下模糊系统的基本原理。
模糊系统是一种基于模糊推理的控制系统,通过对输入和输出之间的关系进行模糊化和解模糊化处理,实现对系统的控制。
模糊控制器是模糊系统的核心组成部分,它通过模糊规则来实现输入和输出之间的映射关系。
在模糊控制器中,模糊规则由一系列的IF-THEN语句组成,其中IF部分是输入的模糊集合,THEN部分是输出的模糊集合。
模糊推理是通过对IF部分和THEN部分进行模糊度的计算和模糊度的合成来实现的。
模糊控制器还包括模糊化和解模糊化模块,用于将输入和输出从实际值转换为模糊值和从模糊值转换为实际值。
在Matlab中进行模糊系统的建模与控制,我们首先需要使用模糊逻辑工具箱。
模糊逻辑工具箱是Matlab中一种用于模糊系统建模和控制的工具,它提供了一系列的函数和工具,方便我们进行模糊系统的建模与控制。
在使用模糊逻辑工具箱之前,我们首先需要定义模糊系统的输入和输出变量,以及它们的模糊集合。
在定义变量和集合的时候,我们需要考虑到系统的实际需求和特点。
通常情况下,我们会根据输入和输出的物理特性和范围来选择合适的模糊集合。
在Matlab中,我们可以使用fis文件的形式来定义模糊系统的变量和集合,然后通过读取fis文件来创建模糊系统对象。
在定义好模糊系统的变量和集合之后,我们就可以开始进行模糊规则的建立。
在Matlab中,我们可以使用fuzzy函数来创建一个模糊系统对象,并通过addInput和addOutput函数来添加输入和输出变量。
然后,我们可以使用addMF函数来添加模糊集合,并使用addRule函数来添加模糊规则。
模糊逻辑控制matlab编程仿真(第七组)讲解

《智能控制》模糊逼近作业报告组员:李适、郑晓森、匡金龙、沈伟生、武云发黎浩炎、晏开、杜文学、杨晓星目录一、任务及要求 (3)二、系统分析及控制设计原理 (3)三、设计实现 (4)四、仿真验证 (7)五、讨论与分析 (12)一、任务及要求(1)任务设计一个在 上的模糊系统,使其以精度 一致地逼近函数()()()()()ππππ2121cos sin cos sin x x x x x g ++=,并进行Matlab 仿真。
(2)要求先进行系统分析,然后给出完整详细的设计过程,可参见P74-75页例5.1和例5.2的仿真实例。
二、系统分析及控制设计原理自适应模糊控制是指具有自适应学习算法的模糊逻辑系统,其学习算法是依靠数据信息调整模糊逻辑系统的参数,且可以保证控制系统的稳定性。
一个自适应模糊控制器可以用一个单一的自适应模糊系统构成,也可以用若干个自适应模糊系统构成。
与传统的自适应控制相比,自适应模糊控制的优越性在于它可以利用操作人员提供的语言性模糊信息,而传统的自适应控制则不能。
这一点对具有高度不确定因素的系统尤其重要。
自适应模糊控制有两种不同形式:一种是直接自适应模糊控制,即根据实际系统性能与理想性能之间的偏差直接设计模糊控制器;另一种是间接自适应模糊控制,即通过在线模糊逼近获得对象的模型,然后根据所得模型在线设计控制器。
三、设计实现(1)模糊系统的设计步骤设二维模糊系统g(x)为集合22211],[],[R U ⊂⨯=βαβα上的一个函数,其解析式形式未知。
假设对任意一个U x ∈,都能得到g(x),则可设计一个逼近g(x)的模糊系统。
模糊系统的设计步骤为:步骤1:在],[i i βα上定义)2,1(=i N i 个标准的,一致的和完备的模糊集i N i i i i A A A A ,...,,,321。
[][]1,11,1-⨯-=U 1.0=ε步骤2:组建21N N M ⨯=条模糊集IF-THEN 规则,即21ui i R :如果1x 为11i A 且2x 为22i A ,则y 为21i i B 式中,2211,...,2,1;,...,2,1N i N i ==,将模糊集21i i B 的中心表示为),(),(g 21121221i i i i e e g x x y==式中,j i e 为i x 在模糊集j i A 上的中间值或边界值()2,1;2,1==j i 。
自适应模糊神经网络MATLAB代码

function [ c, sigma , W_output ] = SOFNN( X, d, Kd )%SOFNN Self-Organizing Fuzzy Neural Networks%Input Parameters% X(r,n) - rth traning data from nth observation% d(n) - the desired output of the network (must be a row vector) % Kd(r) - predefined distance threshold for the rth input%Output Parameters% c(IndexInputVariable,IndexNeuron)% sigma(IndexInputVariable,IndexNeuron)% W_output is a vector%Setting up Parameters for SOFNNSigmaZero=4;delta=0.12;threshold=0.1354;k_sigma=1.12;%For more accurate results uncomment the following%format long;%Implementation of a SOFNN model[size_R,size_N]=size(X);%size_R - the number of input variablesc=[];sigma=[];W_output=[];u=0; % the number of neurons in the structureQ=[];O=[];Psi=[];for n=1:size_Nx=X(:,n);if u==0 % No neuron in the structure?c=x;sigma=SigmaZero*ones(size_R,1);u=1;Psi=GetMePsi(X,c,sigma);[Q,O] = UpdateStructure(X,Psi,d);pT_n=GetMeGreatPsi(x,Psi(n,:))';else[Q,O,pT_n] = UpdateStructureRecursively(X,Psi,Q,O,d,n);end;KeepSpinning=true;while KeepSpinning%Calculate the error and if-part criteriaae=abs(d(n)-pT_n*O); %approximation error[phi,~]=GetMePhi(x,c,sigma);[maxphi,maxindex]=max(phi); % maxindex refers to the neuron's index if ae>deltaif maxphi<threshold%enlarge width[minsigma,minindex]=min(sigma(:,maxindex));sigma(minindex,maxindex)=k_sigma*minsigma;Psi=GetMePsi(X,c,sigma);[Q,O] = UpdateStructure(X,Psi,d);pT_n=GetMeGreatPsi(x,Psi(n,:))';else%Add a new neuron and update structurectemp=[];sigmatemp=[];dist=0;for r=1:size_Rdist=abs(x(r)-c(r,1));distIndex=1;for j=2:uif abs(x(r)-c(r,j))<distdistIndex=j;dist=abs(x(r)-c(r,j));end;end;if dist<=Kd(r)ctemp=[ctemp; c(r,distIndex)];sigmatemp=[sigmatemp ; sigma(r,distIndex)];elsectemp=[ctemp; x(r)];sigmatemp=[sigmatemp ; dist];end;end;c=[c ctemp];sigma=[sigma sigmatemp];Psi=GetMePsi(X,c,sigma);[Q,O] = UpdateStructure(X,Psi,d);KeepSpinning=false;u=u+1;end;elseif maxphi<threshold%enlarge width[minsigma,minindex]=min(sigma(:,maxindex));sigma(minindex,maxindex)=k_sigma*minsigma;Psi=GetMePsi(X,c,sigma);[Q,O] = UpdateStructure(X,Psi,d);pT_n=GetMeGreatPsi(x,Psi(n,:))';else%Do nothing and exit the whileKeepSpinning=false;end;end;end;end;W_output=O;endfunction [Q_next, O_next,pT_n] = UpdateStructureRecursively(X,Psi,Q,O,d,n) %O=O(t-1) O_next=O(t)p_n=GetMeGreatPsi(X(:,n),Psi(n,:));pT_n=p_n';ee=abs(d(n)-pT_n*O); %|e(t)|temp=1+pT_n*Q*p_n;ae=abs(ee/temp);if ee>=aeL=Q*p_n*(temp)^(-1);Q_next=(eye(length(Q))-L*pT_n)*Q;O_next=O + L*ee;elseQ_next=eye(length(Q))*Q;O_next=O;end;endfunction [ Q , O ] = UpdateStructure(X,Psi,d)GreatPsiBig = GetMeGreatPsi(X,Psi);%M=u*(r+1)%n - the number of observations[M,~]=size(GreatPsiBig);%Others Ways of getting Q=[P^T(t)*P(t)]^-1%********************************************************************** ****%opts.SYM = true;%Q = linsolve(GreatPsiBig*GreatPsiBig',eye(M),opts);%%Q = inv(GreatPsiBig*GreatPsiBig');%Q = pinv(GreatPsiBig*GreatPsiBig');%********************************************************************** ****Y=GreatPsiBig\eye(M);Q=GreatPsiBig'\Y;O=Q*GreatPsiBig*d';end%This function works too with x% (X=X and Psi is a Matrix) - Gets you the whole GreatPsi% (X=x and Psi is the row related to x) - Gets you just the column related with the observationfunction [GreatPsi] = GetMeGreatPsi(X,Psi)%Psi - In a row you go through the neurons and in a column you go through number of %observations **** Psi(#obs,IndexNeuron) ****GreatPsi=[];[N,U]=size(Psi);for n=1:Nx=X(:,n);GreatPsiCol=[];for u=1:UGreatPsiCol=[ GreatPsiCol ; Psi(n,u)*[1; x] ];end;GreatPsi=[GreatPsi GreatPsiCol];end;endfunction [phi, SumPhi]=GetMePhi(x,c,sigma)[r,u]=size(c);%u - the number of neurons in the structure%r - the number of input variablesphi=[];SumPhi=0;for j=1:u % moving through the neuronsS=0;for i=1:r % moving through the input variablesS = S + ((x(i) - c(i,j))^2) / (2*sigma(i,j)^2);end;phi = [phi exp(-S)];SumPhi = SumPhi + phi(j); %phi(u)=exp(-S)end;end%This function works too with x, it will give you the row related to xfunction [Psi] = GetMePsi(X,c,sigma)[~,u]=size(c);[~,size_N]=size(X);%u - the number of neurons in the structure%size_N - the number of observationsPsi=[];for n=1:size_N[phi, SumPhi]=GetMePhi(X(:,n),c,sigma);PsiTemp=[];for j=1:u%PsiTemp is a row vector ex: [1 2 3]PsiTemp(j)=phi(j)/SumPhi;end;Psi=[Psi; PsiTemp];%Psi - In a row you go through the neurons and in a column you go through number of %observations **** Psi(#obs,IndexNeuron) ****end;end。
自适应模糊神经控制系统及其MATLAB实现

自适应模糊神经控制系统及其MATLAB实现
刘修廷;潘宏侠
【期刊名称】《机械工程与自动化》
【年(卷),期】2010(000)003
【摘要】介绍了自适应模糊神经网络控制系统的结构,并在此基础上重点介绍了自适应模糊神经系统及其MATLAB实现.
【总页数】3页(P162-164)
【作者】刘修廷;潘宏侠
【作者单位】中北大学,机械工程与自动化学院,山西,太原,030051;中北大学,机械工程与自动化学院,山西,太原,030051
【正文语种】中文
【中图分类】TP273+.4
【相关文献】
1.基于MATLAB的模糊自适应控制系统研究 [J], 苏海海;
2.模糊自适应PID控制系统的研究及MATLAB仿真 [J], 焦仁雷;宋慧波;任亚宁;杨睿;赵良伟
3.自适应模糊PID控制系统及其MATLAB仿真 [J], 张凤莉;李泰
4.基于MATLAB的自适应模糊PID控制系统计算机仿真 [J], 耿瑞
5.双模糊自适应PID控制的离合器控制系统的设计及应用--评《先进PID控制MATLAB仿真》 [J], 沙春
因版权原因,仅展示原文概要,查看原文内容请购买。
利用Matlab进行神经网络与模糊系统的设计与优化技巧

利用Matlab进行神经网络与模糊系统的设计与优化技巧概述:神经网络和模糊系统是人工智能领域的重要研究方向之一,它们能够模拟人类的认知和决策过程,在各种领域具有广泛的应用。
本文将介绍如何利用Matlab进行神经网络和模糊系统的设计与优化,以及一些实用的技巧和方法。
一、神经网络设计与优化1. 数据准备与预处理在进行神经网络设计之前,需要对数据进行准备和预处理。
首先,收集并清洗数据,去除异常值和噪声;其次,进行数据标准化或归一化,确保数据的均值为0,方差为1,以避免不同特征之间的数量级差异对模型的影响。
2. 网络结构设计神经网络的结构设计是神经网络设计的关键。
在Matlab中,可以利用神经网络工具箱快速搭建和设计神经网络。
根据问题的具体需求和数据特点,选择合适的网络结构,包括网络拓扑结构(如前馈神经网络、循环神经网络等)、激活函数(如sigmoid函数、ReLU函数等)和网络层数。
3. 参数初始化与训练设置好网络结构之后,需要对网络的参数进行初始化并进行训练。
在Matlab中,可以利用训练函数(如trainlm、trainbfg等)对网络进行训练。
选择合适的训练函数和训练参数,并观察损失函数的收敛情况,及时调整网络结构和参数设置。
4. 网络优化与性能评估经过训练之后,可以对训练好的神经网络进行优化和性能评估。
可以采用交叉验证、留出法等方法对网络的泛化性能进行评估,并对网络的超参数进行调优,以提高网络的性能和泛化能力。
在Matlab中,可以利用验证函数对网络进行验证和评估。
二、模糊系统设计与优化1. 模糊集合定义与隶属函数设计在进行模糊系统设计之前,需要对模糊集合和隶属函数进行定义和设计。
在Matlab中,可以利用模糊逻辑工具箱快速定义和设计模糊集合和隶属函数。
根据问题的具体需求和数据特点,选择合适的模糊集合类型(如三角形集合、梯形集合等)和隶属函数类型(如高斯隶属函数、三角隶属函数等)。
2. 规则库设计与推理机制模糊系统的规则库定义是模糊系统设计的核心。
模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)

模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)2这个例子的程序百度文库里有很多版本,但我下了很多都有错误,运行不了。
以下程序我一字一字的敲出来的,已经成功运行,绝对无误。
仿真实例,被控对象为p G (s)=ss s 1047035.8752350023++ 采样时间为1ms ,采用模糊PID 控制进行阶跃响应,在第300个采样时间时控制器输出加1.0的干扰,相应的运行结果如图1~13所示。
仿真程序如下:将以下程序保存为fuzzypid.m 文件,即可得到仿真结果。
%fuzzy tunning PID controlclear all ;clear all ;a=newfis('fuzzpid');a=addvar(a,'input','e',[-3,3]); %parameter ea=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'input','ec',[-3,3]); %parameter eca=addmf(a,'input',2,'NB','zmf',[-3,-1]);a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);a=addmf(a,'input',2,'PM','trimf',[0,2,3]);a=addmf(a,'input',2,'PB','smf',[1,3]);a=addvar(a,'output','kp',[-0.3,0.3]); %parameter kpa=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);a=addvar(a,'output','ki',[-0.06,0.06]); %parameter ki a=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]); a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);a=addvar(a,'output','kd',[-3,3]); %parameter kda=addmf(a,'output',3,'NB','zmf',[-3,-1]);a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);a=addmf(a,'output',3,'PM','trimf',[0,2,3]);a=addmf(a,'output',3,'PB','smf',[1,3]);rulelist=[1 1 7 1 5 1 1;1 2 7 1 3 1 1;1 3 62 1 1 1;1 4 62 1 1 1;1 5 5 3 1 1 1;1 6 4 42 1 1;1 7 4 4 5 1 1;2 1 7 1 5 1 1;2 2 7 13 1 1;2 3 6 2 1 1 1;2 4 53 2 1 1;2 5 53 2 1 1;2 6 4 43 1 1;2 734 4 1 1;3 1 6 14 1 1;3 2 6 2 3 1 1;3 3 6 3 2 1 1;3 4 5 3 2 1 1;3 54 4 3 1 1;3 6 3 5 3 1 1;3 7 3 54 1 1;4 1 6 2 4 1 1;4 2 6 2 3 1 1;4 35 3 3 1 1;4 4 4 4 3 1 1;4 5 3 5 3 1 1;4 6 2 6 3 1 1;4 7 2 6 4 1 1;35 1 5 2 4 1 1;5 2 5 3 4 1 1;5 3 4 4 4 1 1;5 4 3 5 4 1 1;5 5 3 5 4 1 1;5 6 2 6 4 1 1;5 7 2 7 4 1 1;6 1 5 47 1 1;6 2 4 4 5 1 1;6 3 3 5 5 1 1;6 4 2 5 5 1 1;6 5 2 6 5 1 1;6 6 27 5 1 1;6 7 1 7 7 1 1;7 1 4 4 7 1 1;7 2 4 4 6 1 1;7 3 2 5 6 1 1;7 4 2 6 6 1 1;7 5 2 6 5 1 1;7 6 1 7 5 1 1;7 7 1 7 7 1 1];a=addrule(a,rulelist);a=setfis(a,'DefuzzMethod','mom');writefis(a,'fuzzpid');a=readfis('fuzzpid');%PID controllerts=0.001;sys=tf(5.235e005,[1,87.35,1.047e004,0]); dsys=c2d(sys,ts,'tustin');[num,den]=tfdata(dsys,'v');u_1=0.0;u_2=0.0;u_3=0.0;y_1=0;y_2=0;y_3=0;x=[0,0,0]';4error_1=0;e_1=0.0;ec_1=0.0;kp0=0.40;kd0=1.0;ki0=0.0;for k=1:1:500time(k)=k*ts;rin(k)=1;%using fuzzy inference to tunning PIDk_pid=evalfis([e_1,ec_1],a);kp(k)=kp0+k_pid(1);ki(k)=ki0+k_pid(2);kd(k)=kd0+k_pid(3);u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);if k==300 %adding disturbance(1.0v at time 0.3s)u(k)=u(k)+1.0;endif u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;endyout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;error(k)=rin(k)-yout(k);%%%%%%%%%%%%%%%%%%%%%%%%%return of pid parameters%%%%%%%%%%%%%%%%%%%%%%%% u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);5x(1)=error(k); %calculating Px(2)=error(k)-error_1; %calculating Dx(3)=x(3)+error(k); %calculating De_1=x(1);ec_1=x(2);error_2=error_1;error_1=error(k);endshowrule(a)figure(1);plot(time,rin,'b',time,yout,'r'); xlabel('time(s)');ylabel( 'rin,yout');figure(2);plot(time,error,'r');xlabel('time(s)');ylabel( 'error ');figure(3);plot(time,u,'r');xlabel('time(s)');ylabel( 'u ');figure(4);plot(time,kp,'r');xlabel('time(s)');ylabel( 'kp ');figure(5);plot(time,ki,'r');xlabel('time(s)');ylabel( 'ki ');figure(6);plot(time,kd,'r');xlabel('time(s)');ylabel( 'kd ');figure(7);plotmf(a,'input',1);figure(8);plotmf(a,'input',2);figure(9);plotmf(a,'output',1);figure(10);plotmf(a,'output',2);figure(11);plotmf(a,'output',3);plotfis(a);fuzzy fuzzpid.fis6仿真运行结果:789。
基于MATLAB的自适应模糊PID控制系统计算机仿真

摘要: 在分析自适应模糊控制及 HIJ 参数变化对系统性能影响的基础上 K 提出在动态过程中对 HIJ 参数进行整定。 仿真研究表 明 K 控制质量得到了提高 。 关键词: 模糊 HIJ 控制; 自适应; 仿真 E19F1G; 中图分类号: 9HCB&$ B 文献标识码: 1
&
E19F1G 简介
E19F1G 软件于 &B?/ 年由美国的 E)82W",X7 公司推出 K 该软件使用简单、方便 。自 &BBC 年以来 K E)82W",X7 公司相继推出了 E19F1G /$ . 、 E19F1G /$ %、 E19F1GD$ %、 E19F1G <$ . 等版本。本文在 E19Z F1G<$ . 基础上 K 介绍如何利用 RIE4FI’[ 和 \4]]^ 工具箱构造某模糊控制系统的结构框图和进行仿真研 究的方法及步骤。 &$ & 模糊逻辑工具箱 模糊逻辑工具箱 @ 0+PP-#";3:8""#Q"_ A 提供了模糊逻辑控制器及系统设计的各种途径。工具箱提供了生成 和编辑模糊推理系统 @ \IR A 常用的工具函数 K 如 *6W037, )OO5),, )OOM0, )OO,+##6, 768037, W,386037 等 K 它包括了产
!"#$ %& ()*+),-
’"$ & %../
安徽工业大学学报 ($ "0 1*2+3 4*356,738- "0 96:2*"#";-
第 %& 卷 第 & 期 %../ 年 &月
自适应神经模糊推理系统及其仿真应用

自适应神经模糊推理系统及其仿真应用刘雨刚,耿立明,杨威辽宁工程技术大学电气与控制工程学院,辽宁葫芦岛(125105)摘 要:本文介绍了自适应神经模糊推理系统的结构,以及如何用MATLAB 模糊工具箱提供的ANFIS 应用工具仿真,完成训练模糊神经网络。
关键词:自适应神经模糊推理系统,MATLAB ,模糊神经网络0 引言由Jyh-Shing R.Jang 提出的自适应神经模糊推理系统[1],是一种基于Takagi -Sugeno 模型的模糊推理系统(简称ANFIS )。
研究表明,当输入模糊集采用非梯形/非三角形的隶属函数时,Sugeno 型模糊系统需要的模糊规则及输入的模糊集的个数较少。
1 基于Takagi -Sugeno 模型的自适应神经模糊推理系统所考虑的模糊推理系统有两输入和,单输出f 。
1x 2x 对于零阶T-S 模糊模型,模糊规则的第i 条规则有如下形式:⑴ 后件为恒值:Ri : ),...,2,1( , 221121n i f y Then A x A x If i i i ==是和是⑵ 后件为一阶线性方程:Ri :0,1,2)(j ),( ,...,2,1 ),( , 221102*********是常数是和是=++===ij i i i i i i i a x a x a a x x f ni x x f y Then A x A x If 式中,Ri 表示第i 条规则,Ai 表示模糊子集,即{NL ,NM ,NS ,ZO ,PS ,PM ,PL}={“负大”,“负中”,“负小”,“零”,“正小”,“正中”,“正大”}。
在T-S 模型中,每条规则的结论部分是个线性方程,表示系统局部的线性输入/输出关系,而系统的总输入是所有线性子系统输出的加权平均,可以表示全局的非线性输入输出关系,所以,T-S 模型是一种对非线性系统局部线性化的描述方法,它具有非常重要的研究意义和广泛的应用范围[2]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自适应神经模糊系统及其MATLAB实现
摘要:本文介绍了模糊神经网络系统的T-S模型、结构及算法,同时论述了采用网格分割方式生成模糊推论系统函数和自适应神经模糊系统的建模函数,最后用一个例子证明了自适应神经模糊系统在未知非线性的建模方面的良好的性能。
关键词:T-S模型、结构、算法、网格分割、自适应神经模糊系统
0 引言
模糊神经网络控制在控制领域里目前已经成为一个研究的热点,其原因在于神经网络和模糊系统两者之间的互补关系。
神经网络的一大特点就是其自学习功能,将这种自学习的方法它应用于对模型特征的分析与建模上,产生自适应的神经网络技术,这对于模糊系统的模型建立是非常有效的工具。
而自适应神经模糊系统就是基于数据的建模方法,该系统中的模糊隶属度函数及模糊规则是通过大量的已知数据的学习得到的。
1 基于T-S模型的模糊神经网络
由于MIMO的模糊规则可分解为多个MISO模糊规则,因此下面也只讨论MISO模糊系统的模型。
设输入向量,每个分量均为模糊语言变量。
并设
式中,是的第j个语言变量值,它是定义在论域上的一个模糊集合。
相应的隶属度函数为。
T-S所提出的模糊规则后件是输入变量的线性组合,即
若输入量采用单点模糊集合的模糊化方法,则对于给定的输入x,可以求得对于每条规则的适应度为:
模糊系统的输出量为每条规则的输出量的加权平均,即
2 自适应神经模糊系统及其MATLAB实现
2.1采用网络分割方式生成模糊推理系统函数
函数genfis1( )可为训练自适应神经模糊推理系统产生Takagi-Sugeno型模糊推理系统(FIS)结构的初值(隶属度函数参数的初值),它采用网格分割的方式,根据给定数据集生成一个模糊推理系统,一般与函数anfis ( )配合使用。
由genfis1( )生成的模糊推理系统的输入和隶属度函数的类型、数目可以在使用时指定,也可以采用默认值。
2.2 自适应神经模糊系统的建模函数在MATLAB模糊逻辑工具箱中,提供了对基于T-S模型的自适应神经模糊推理系统ANFIS的建模方法,该模糊推理系统利用BP反向传播算法和最小二乘算法来完成对输入/输出数据对的建模。
该系统为模糊建模的过程,提供了一种能够从数据集中提取相应信息(模糊规则)的学习方法。
这种学习方法与神经网络的学习方法非常相似,通过学习能够有效的计算出隶属度函数的最佳参数,使得设计出来的Takagi-Sugeno型模糊推理系统能够最好地模拟出希望的或是实际的输入/输出关系。
相应的函数为anfis(),该函数的输出为一个三维或五维向量。
当未指定检验数据时,输出向量为三维。
Anfis()支持采用输出加权平均的一阶或零阶Takagi-Sugeno型模糊推理。
3 仿真实例
利用模糊推理系统对下列非线性函数进行逼近。
非线性函数为
仿真结果如图1所示。
信号逼近的ANFIS训练仿真结果
4 结论
在这个例子中,训练数据和检验数据在输入空间均匀采样,如图(1)。
图(2)显示了由函数genfisl()按照均匀覆盖输入空间的原则构造了训练前模糊推理系统的初始输入变量的隶属函数。
图(3)显示了训练后模糊推理系统的输入变量的隶属函数曲线,说明经过训练后的模糊推理系统提取了训练数据的局部特征。
图(4)显示了原函数与神经模糊推理系统的输出曲线。
参考文献:
[1] 李国勇, 智能预测[M]. 北京: 电子工业出版社, 2010.
[2] 刘金锟, 智能控制[M]. 北京: 电子工业出版社, 2005.。