第4章模糊控制的matlab实现

合集下载

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例模糊控制(模糊逻辑控制)是一种基于模糊数学理论的控制方法,它可以用于控制系统的稳定性、精度和响应速度等方面的优化。

在MATLAB 中,可以使用模糊逻辑工具箱(FLUS)来应用模糊控制。

以下是一个简单的实例,展示了如何使用 MATLAB 中的模糊逻辑工具箱来对温度控制系统进行控制:首先,我们需要创建一个温度控制系统,该系统将使用模糊控制来控制传感器的读数。

假设我们有四个传感器,分别为温度传感器、湿度传感器、压力和传感器,每个传感器读数为实数。

```matlab% 创建模型T = [120 100 80 50]; % 温度控制器输出R1 = [1.2 0.8 0.4 0.2]; % 湿度控制器输出R2 = [0.9 0.1 0.3 0.5]; % 压力控制器输出R3 = [1.4 0.6 0.2 0.1]; % 传感器误差P1 = [125 125 125 125]; % 温度控制器输入P2 = [100 100 90 80]; % 湿度控制器输入P3 = [85 85 80 75]; % 压力控制器输入F1 = [0.3 0.2 0.1 0.1]; % 温度控制器输出F2 = [0.4 0.3 0.2 0.1]; % 湿度控制器输出F3 = [0.5 0.4 0.3 0.1]; % 压力控制器输出y1 = [100 85 75 60]; % 实际温度y2 = [120 95 80 70]; % 实际湿度y3 = [135 110 90 80]; % 实际压力% 创建模糊控制器go1 = @(t,u,v) if t > 100 then ((1-v)*F1 + v*R1 +(1+v)*R2)/(1-v)*y1 else 0;go2 = @(t,u,v) if t < 50 then ((1-v)*F3 + v*R1 +(1+v)*R2)/(1-v)*y2 else 0;go3 = @(t,u,v) if t == 0 then ((1-v)*F1 + v*R1 +(1+v)*R2)/(1-v)*y3 else 0;% 创建模糊控制器的优化器var = [0 0 0 0];go1(0,:,:) = var;matlab.模糊控制.优化器.LevenbergMarquardt(var,go1);% 运行模糊控制器[t,u,v] = ode45(go1,[0 1],[120 100 80 50],y1);% 输出结果disp(["实际温度:" num2str(t)]);disp(["实际湿度:" num2str(u)]);disp(["实际压力:" num2str(v)]);```在这个例子中,我们使用 MATLAB 中的 ode45 工具箱来拟合温度控制器和湿度控制器的输出响应函数。

matlab模糊控制实现

matlab模糊控制实现

模糊控制作业一介绍模糊控制是指基于模糊逻辑描述一个过程的控制算法,是以模糊集合论、模糊语言变量及模糊逻辑推理为基础的,基于被控系统的物理特性,模拟人的思维方式和人的控制经验来实现的一种计算机智能控制。

模糊控制器主要嵌有操作人员的经验和直觉知识,是模糊语言形式的控制方法,不需要预先知道被控对象结构、参数,不需要建立被控对象的精确数学模型,并能克服非线性因素、大惯性因素的影响,对调节对象的参数变化不敏感,对对象时变及纯滞后有一定的适应性,即具有较强的鲁棒性。

模糊控制器的设计参数容易选择调整。

模糊控制系统如图1-1所示图1-1 模糊控制系统框图二本作业介绍1、选定模糊控制器的输入输出变量,并进行量程转换输入语言变量选为实际浓度与给定值之间的偏差(纸浆浓度偏差)e及纸浆浓度偏差变化率ec,输出语言变量选为阀门开度增量u。

首先确定e、ec和u 的基本论域分别为[-1.2%~1。

2%]、[—0。

6%~0.6%]和[-12~12],选定e、u 的模糊集合的论域为[-6,—5,—4,—3,—2,-1,0,1,2,3,4,5,6],ec的模糊集合的论域为[-7,—6,-5,—4,—3,—2,—1,0,1,2,3,4,5,6,7]2、确定模糊控制器的结构根据系统输入变量个数可知,应采用采用双输入单输出模糊控制器。

(如图2所示)模糊控制器主要包含三个功能环节:用于输入信号处理的模糊量化和模糊化环节,模糊控制算法功能单元,以及用于输出解模糊化的模糊判决环节.ed/dt 图2 双输入单输出模糊控制器3、确定各变量的模糊语言取值及相应的隶属函数,即进行模糊化模糊化是将模糊控制器输入量的确定值转换为相应模糊语言变量值的过程,此相应语言变量均由对应的隶属度函数来定义。

对纸浆浓度偏差e 、纸浆浓度偏差变化率ec 、阀门开度的增量u 进行模糊化,分别用模糊语言变量X 、Y 、Z 进行表示,语言值集合均为{负大,负中,负小,零,正小,正中,正大},用英文缩写进行表示分别为:X={NBe,NMe ,NSe,ZOe ,PSe,PMe ,PBe }Y={ NBec ,NMec,NSec ,ZOec ,PSec ,PMec ,PBec }Z={ NBu ,NMu ,NSu ,ZOu ,PSu,PMu ,PBu }模糊化包括两个任务:第一个任务是进行论域变换,过程参数的实际范围称为基本论域,可以通过变换系数(量化因子)实现由基本论域到量化论域的变换;第二个任务是求得输入对应于语言变量的隶属度。

模糊控制matlab

模糊控制matlab

模糊控制matlab模糊控制是一种基于模糊数学理论的控制方法,它可以有效地处理非线性系统和模糊系统的控制问题。

在模糊控制中,通过将输入、输出和中间变量用模糊集合表示,设计模糊逻辑规则以实现控制目标。

本文将介绍如何用Matlab实现模糊控制,并通过实例讲解其应用和效果。

1. 模糊集合的表示在Matlab中,我们可以使用fuzzy工具箱来构建和操纵模糊系统。

首先,我们需要定义输入和输出的模糊集合。

例如,如果我们要控制一个直线行驶的自动驾驶汽车,可以定义速度和方向作为输入,定义方向盘角度作为输出。

我们可以将速度和方向分别划分为缓慢、中等、快速三个模糊集合,将方向盘角度划分为左转、直行、右转三个模糊集合。

可以使用Matlab的fuzzy工具箱中的fuzzy集合函数实现:slow = fuzzy(fis,'input',[-10 -10 0 20]);gap = fuzzy(fis,'input',[0 20 60 80 100]);fast = fuzzy(fis,'input',[60 80 110 110]);其中,fis为模糊系统对象,输入和输出的模糊集合分别用fuzzy函数定义,分别用输入或输出、模糊集合变量名、模糊集合界限参数表示,如fuzzy(fis,'input',[-10 -10 0 20])表示定义一个输入模糊集合,变量名为slow,其界限参数为[-10 -10 0 20],即表示此模糊集合上下界是[-10,-10]和[0,20]。

2. 设计模糊控制规则在Matlab中,可以使用fuzzy工具箱的ruleviewer函数来设计模糊控制的规则库。

规则库由模糊条件和模糊结论构成,用if-then形式表示。

例如,定义类别均为slow和keep的输入,输出为类别均为left的控制操作的规则如下:rule1 = "if (slow is slow) and (keep is keep) then (left is left);";其中,slow和keep为输入的模糊变量名,left为输出的模糊变量名。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例以下是一个模糊控制的MATLAB实例:假设我们要控制一个水平摆,使其保持在垂直状态。

我们可以使用模糊控制器来实现这个任务。

首先,我们需要定义输入和输出变量。

对于输入变量,我们可以选择摆的角度和摆的角速度,对于输出变量,我们可以选择施加到摆上的力。

```matlab% 定义输入变量angle = fuzzymf("angle", [-90 -45 0 45 90], "trimf", [-90 -45 0 45 90]);angular_velocity = fuzzymf("angular_velocity", [-10 -5 0 5 10], "trimf", [-10 -5 0 5 10]);% 定义输出变量force = fuzzymf("force", [-20 -10 0 10 20], "trimf", [-20 -10 0 10 20]);```接下来,我们定义模糊规则。

这些规则描述了如果摆的角度和角速度是什么,我们应该施加多少力,以使摆保持垂直。

```matlab% 定义模糊规则rules = [1 1 3 1;1 2 4 1;1 3 5 2;2 1 2 1;2 23 1;2 3 4 2;3 1 1 2;3 2 2 1;3 3 3 1;4 1 1 3;4 2 2 2;4 3 3 1;5 1 1 3;5 2 2 2;5 3 4 3];% 定义模糊推理引擎fis = mamfis("Name", "Pendulum Fuzzy Controller", "NumInputs", 2, "NumOutputs", 1);fis.Inputs(1).MembershipFunctions = angle;fis.Inputs(2).MembershipFunctions = angular_velocity; fis.Outputs(1).MembershipFunctions = force;fis.Rules = rules;```最后,我们可以使用模糊控制器来控制水平摆。

使用Matlab技术进行模糊控制的基本方法

使用Matlab技术进行模糊控制的基本方法

使用Matlab技术进行模糊控制的基本方法随着科技的不断发展,控制系统越来越广泛地应用于各个领域,帮助我们解决实际问题。

在控制系统中,模糊控制技术因其适应性强、鲁棒性好等特点而备受关注。

而Matlab作为一个强大的计算工具,为我们提供了许多实现模糊控制的功能。

本文将介绍使用Matlab技术进行模糊控制的基本方法。

一、模糊控制的基本理论在介绍使用Matlab进行模糊控制的方法之前,我们先来了解一下模糊控制的基本理论。

模糊控制是一种基于模糊逻辑的控制方法,它模拟人类的思维方式进行控制,通过建立模糊规则库来实现对系统的控制。

在模糊控制中,输入和输出之间的关系由一组模糊规则来描述,这些模糊规则可以通过模糊推理进行计算得到系统的输出。

模糊控制主要有三个基本步骤:模糊化、模糊推理和去模糊化。

模糊化是将输入的实际值通过模糊隶属函数映射成模糊集合。

模糊推理则是根据模糊规则库进行推理计算,得到模糊输出。

最后,去模糊化将模糊输出转换为实际的控制量。

二、使用Matlab进行模糊控制的步骤1. 定义模糊集合和模糊规则库使用Matlab进行模糊控制的第一步是定义模糊集合和模糊规则库。

模糊控制中的模糊集合可以通过Matlab的fuzzymf函数来定义,它可以根据实际问题选择三角形、梯形、高斯函数等不同形状的隶属函数。

模糊规则库则是描述输入和输出之间关系的集合,它由一组模糊规则构成。

在Matlab中,可以使用fuzzylut函数来定义模糊规则库。

这个函数需要指定输入和输出的隶属函数以及规则的后件。

2. 模糊化和模糊推理定义好模糊集合和模糊规则库之后,接下来就是进行模糊化和模糊推理的计算了。

在Matlab中,可以使用fuzzy函数进行模糊化的计算。

这个函数需要输入模糊集合、输入的隶属函数和对应的输入值,然后计算得到模糊输入。

模糊推理可以通过fuzzy函数结合模糊规则库进行计算。

这个函数需要输入模糊规则库、模糊输入和输出的隶属函数,然后计算得到模糊输出。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例以下是一个简单的模糊控制器在 MATLAB 中的实例:假设你有一个被控对象,它的输出值 y 取决于输入值 u。

你想要设计一个模糊控制器来控制该对象。

首先,你需要定义模糊控制器的输入和输出变量以及它们的隶属度函数。

示例中,我们定义了两个输入变量 x1 和 x2 以及一个输出变量y,每个变量都由三个隶属度函数组成。

```matlab% 定义输入和输出变量及其隶属度函数x1 = fuzzyvar("input", [-5 5], "bellmf", [1 2 3]);x2 = fuzzyvar("input", [-5 5], "trimf", [-4 0 4]);y = fuzzyvar("output", [-10 10], "trimf", [-8 0 8]);```接下来,我们需要定义规则库。

规则库是一系列模糊规则的集合,每条规则由前提和结论组成。

在这个示例中,我们定义了九条规则,将输入变量 x1 和 x2 映射到输出变量 y。

```matlab% 定义规则库ruleList = ["If (x1 is 1) and (x2 is 1) then (y is -7)";"If (x1 is 1) and (x2 is 2) then (y is -9)";"If (x1 is 1) and (x2 is 3) then (y is -9)";"If (x1 is 2) and (x2 is 1) then (y is -5)";"If (x1 is 2) and (x2 is 2) then (y is -7)";"If (x1 is 2) and (x2 is 3) then (y is -8)";"If (x1 is 3) and (x2 is 1) then (y is -3)";"If (x1 is 3) and (x2 is 2) then (y is -5)";"If (x1 is 3) and (x2 is 3) then (y is -6)";];```现在我们可以创建模糊控制器,并将输入变量和输出变量与规则库相结合。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例模糊控制是一种应用广泛的控制方法,它可以处理那些难以精确建立数学模型的系统。

在Matlab中,使用Fuzzy Logic Toolbox工具箱可以方便地实现模糊控制系统。

以下是一个简单的模糊控制器示例,控制一个小车的速度和方向,使得其能够沿着预设的轨迹行驶。

1. 首先,定义输入和输出变量。

这里我们需要控制小车的速度和转向角度。

代码如下:```speed = newfis("speed");speed = addvar(speed,"input","distance",[0 10]);speed = addmf(speed,"input",1,"slow","trimf",[0 0 5]);speed = addmf(speed,"input",1,"fast","trimf",[5 10 10]); speed = addvar(speed,"output","velocity",[-10 10]);speed = addmf(speed,"output",1,"reverse","trimf",[-10-10 -2]);speed = addmf(speed,"output",1,"stop","trimf",[-3 0 3]); speed = addmf(speed,"output",1,"forward","trimf",[2 10 10]);angle = newfis("angle");angle = addvar(angle,"input","position",[-1 1]);angle = addmf(angle,"input",1,"left","trimf",[-1 -1 0]);angle = addmf(angle,"input",1,"right","trimf",[0 1 1]); angle = addvar(angle,"output","steering",[-1 1]);angle = addmf(angle,"output",1,"hard_left","trimf",[-1 -1 -0.5]);angle = addmf(angle,"output",1,"soft_left","trimf",[-1 -0.5 0]);angle = addmf(angle,"output",1,"straight","trimf",[-0.5 0.5 0.5]);angle = addmf(angle,"output",1,"soft_right","trimf",[0 0.5 1]);angle = addmf(angle,"output",1,"hard_right","trimf",[0.5 1 1]);```2. 然后,定义模糊规则。

模糊控制在MATLAB中的实现

模糊控制在MATLAB中的实现

模糊控制在MATLAB中的实现模糊控制是一种基于模糊逻辑的控制方法,可以处理输入模糊或模糊输出的问题。

在MATLAB中,模糊控制可以通过Fuzzy Logic Toolbox实现。

Fuzzy Logic Toolbox提供了一套用于设计、模拟和分析模糊逻辑系统的工具。

它允许用户定义模糊集、模糊规则和模糊推理过程,从而实现模糊控制。

在实现模糊控制之前,首先需要确定输入和输出的模糊集以及它们之间的关系。

可以通过定义模糊集合的成员函数来描述输入和输出的模糊集。

常见的成员函数有三角形、梯形、高斯等。

例如,对于一个温度控制系统,可以定义三个模糊集:"冷","舒适"和"热"用于描述温度的状态。

每个模糊集可以具有不同的成员函数。

接下来,需要定义模糊规则,规则用于描述输入和输出之间的关系。

例如,当温度"冷"时,可以设定输出为"加热",当温度"舒适"时,输出为"保持",当温度"热"时,输出为"冷却"。

在MATLAB中,可以使用Fuzzy Logic Toolbox的命令createFIS来创建一个模糊逻辑系统(FIS),并使用addInput和addOutput命令来定义输入和输出的模糊集。

例如,以下代码片段演示了如何创建一个简单的模糊逻辑系统:```MATLABfis = createFIS('fuzzy_system');fis = addInput(fis, [0 100], 'Temperature');fis = addOutput(fis, [0 10], 'Control');fis = addMF(fis, 'input', 1, 'cold', 'trimf', [-10 0 10]);fis = addMF(fis, 'input', 1, 'hot', 'trimf', [40 100 160]);fis = addMF(fis, 'output', 1, 'cool', 'trimf', [-5 0 5]);fis = addMF(fis, 'output', 1, 'maintain', 'trimf', [0 5 10]);fis = addMF(fis, 'output', 1, 'heat', 'trimf', [5 10 15]);ruleList = [1 1 2 3 1;22221;33211];fis = addRule(fis, ruleList);```在定义模糊逻辑系统之后,可以使用evalfis命令对系统进行模糊推理和模糊控制。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例模糊控制是一种基于经验知识的控制方法,与传统的精确控制方法不同,它允许对系统的行为进行模糊描述,并通过一套模糊规则来对系统进行控制。

在实际应用中,模糊控制常常用于处理非线性、复杂和不确定的系统,例如温度控制、汽车制动系统等。

在MATLAB中,可以通过使用Fuzzy Logic Toolbox工具箱来实现模糊控制。

下面以一个简单的温度控制系统为例,来介绍如何在MATLAB中进行模糊控制的实现。

首先,需要定义模糊控制器的输入和输出变量,以及它们的模糊集合。

在温度控制系统中,可以定义温度作为输入变量,定义加热功率作为输出变量。

可以将温度的模糊集合划分为"冷"、"适中"和"热"三个模糊集合,将加热功率的模糊集合划分为"低"、"中"和"高"三个模糊集合。

```temperature = readfis('temperature.fis');temp_input = [-10, 40];temp_output = [0, 100];temperature_inputs = ["冷", "适中", "热"];temperature_outputs = ["低", "中", "高"];```然后,需要定义模糊规则。

模糊规则用于根据输入变量的模糊集合和输出变量的模糊集合之间的关系来确定控制规则。

例如,当温度为"冷"时,加热功率应该为"高"。

可以根据经验知识定义一系列模糊规则。

```rules = ["冷", "高";"适中", "中";"热", "低";];```接下来,需要定义模糊控制器的输入和输出变量值。

模糊控制的Matlab仿真实例分析

模糊控制的Matlab仿真实例分析

.
18
在Simulink编辑窗口左边的模块浏览区可以看 到在水箱仿真系统中包括水箱子模型、阀门子 模型及 PID 控制子模型。直接在浏览区中点 击或右键点击它们,并在弹出菜单中选择 [ look under mask 】 ,可以看到这些模块实 现的细节结构,如图 所示。
.
19
.
20
.
21
这里暂时不讨论具体的系统模型的构造问题,我们可 以先在这个已经建立好的系统模型上进行修改,体验 模糊逻辑与仿真环境结合使用的优势。
字分别代表服务和食
物的质量( 10 表示
非常好, 0 表示非常
差),这时小费与它
.
们之间的关系又应4当8
如何反映呢?
假设是二元线性关系 用下列 MATLAB 语句可绘出下图 。
.
49
.
50
可以看到,如果不考虑服务质量因素比食物质量因素对 于小费的支付占有更大的比重,上面的关系图形已经能 够反映一些实际的情况了。假如希望服务质量占小费的 80 % , 而食物仅占 20 %。这里可以设定权重因子:
注意将鼠标箭头放置图内,移动鼠标可得到不同 角度的视图,如下图所示。
.
15
Matlab模糊控制仿真演示例子
模型sltank.mdl ——使用模糊控制器对水箱水位进 行控制。
假定水箱有一个进水口和一个出水口,可以通过控 制一个阀门来控制流入的水量(即水位高度),但 是流出的速度取决于出水口的半径(定值)和水箱 底部的压力(随水箱中的水位高度变化)。系统有 许多非线性特性。
真。
.
31
学习 MATLAB 仿真工具的一个快速有效的方法就 是学习示例模型,通过看懂这些模型和模块的功
能以及搭建过程,可以很快熟悉和掌握如何使用 MATLAB 仿真工具来设计和搭建自己独特的模型。

如何在MATLAB中进行模糊控制

如何在MATLAB中进行模糊控制

如何在MATLAB中进行模糊控制模糊控制是一种基于模糊逻辑理论的控制方法,它通过建立模糊规则、模糊集合和模糊推理等步骤,实现对复杂系统的控制。

在MATLAB中,我们可以利用模糊控制工具箱进行模糊控制设计和仿真。

本文将从模糊控制的基本原理、MATLAB中的模糊控制工具箱的使用以及实例应用等方面进行讨论。

一、模糊控制基本原理模糊控制的基本原理是将人类的经验和模糊逻辑理论应用于系统控制中。

它不需要准确的数学模型,而是通过模糊集合、模糊规则和模糊推理等方法来描述和制定控制策略。

下面我们将简要介绍一下模糊控制中的基本概念。

1. 模糊集合模糊集合是一种可以容纳不确定性的集合。

与传统集合论不同,模糊集合中的元素可以部分地、模糊地属于该集合。

在模糊控制中,我们通常使用隶属度函数来描述元素对模糊集合的隶属程度。

2. 模糊规则模糊规则是一种将输入和输出间的关系表示为一组语义规则的方法。

它基于专家的经验和知识,将输入变量的模糊集合与输出变量的模糊集合之间建立映射关系。

模糊规则通常采用IF-THEN的形式表示,例如:“IF 温度冷 AND 湿度高 THEN 空调制冷”。

3. 模糊推理模糊推理是基于模糊规则进行推理和决策的过程。

它通过对模糊集合的隶属度进行运算,计算出输出变量的模糊集合。

常用的推理方法有模糊关联、模糊交集和模糊合取等。

二、MATLAB中的模糊控制工具箱MATLAB提供了一套完整的模糊控制工具箱,包括模糊集合的创建、模糊规则的定义、模糊推理和模糊控制系统的仿真等功能。

下面我们将逐步介绍这些功能的使用方法。

1. 模糊集合的创建在MATLAB中,我们可以使用fuzzymf函数来创建模糊集合的隶属度函数。

该函数可以根据用户指定的类型和参数生成不同形状的隶属度函数。

常用的隶属度函数有三角型函数、梯形函数和高斯型函数等。

2. 模糊规则的定义在MATLAB中,我们可以使用addrule函数来定义模糊规则。

该函数将用户指定的输入变量、模糊集合和输出变量、模糊集合之间的关系转化为模糊规则,并添加到模糊推理系统中。

模糊控制在matlab中的实例

模糊控制在matlab中的实例

模糊控制在matlab中的实例以下是一个简单的模糊控制实例,使用Matlab进行实现:假设有一辆小车,需要通过模糊控制来控制它的速度。

1. 首先,我们需要定义输入(error)和输出(delta),并且规定它们的范围:```inputRange = [-2 2];outputRange = [-1 1];```其中,inputRange表示error的范围为-2到2,outputRange表示delta的范围为-1到1。

2. 接下来,我们需要定义模糊变量:```error = fisvar("input", "error", "range", inputRange); delta = fisvar("output", "delta", "range", outputRange); ```这里我们定义了两个模糊变量:输入变量error和输出变量delta。

3. 然后,我们需要用隶属函数来描述模糊变量:```errorFuncs = [fisGaussmf(error, -1, 0.5) % NBfisGaussmf(error, 0, 0.5) % ZOfisGaussmf(error, 1, 0.5) % PB];deltaFuncs = [fisGaussmf(delta, -1, 0.25) % NBfisGaussmf(delta, 0, 0.25) % ZOfisGaussmf(delta, 1, 0.25) % PB];```在这个例子中,我们使用了高斯隶属函数来描述模糊变量。

NB 表示“negative big”(负大),ZO表示“zero”(零),PB表示“positive big”(正大)。

4. 接下来,我们需要定义规则:```ruleList = [1 1 1 3 % NB -> PB2 1 1 2 % ZO -> NB3 1 1 1 % PB -> ZO];```这个规则表达式的意思是:如果error是NB,则delta是PB;如果error是ZO,则delta是NB;如果error是PB,则delta是ZO。

模糊pid控制matlab程序

模糊pid控制matlab程序

模糊pid控制matlab程序
模糊PID控制是一种结合模糊控制和PID控制的方法,它可以
在控制系统中应对非线性和不确定性。

在MATLAB中,实现模糊PID
控制可以分为以下几个步骤:
1. 定义模糊系统,首先,需要使用MATLAB中的Fuzzy Logic Toolbox来定义模糊系统。

可以使用fuzzy函数来创建一个模糊系
统对象,并定义输入、输出和隶属函数等参数。

2. 设计模糊控制器,接下来,需要设计模糊控制器。

可以使用fisedit函数来打开模糊逻辑编辑器,通过编辑器来定义模糊控制
器的输入、输出和规则等。

3. 整合PID控制器,在MATLAB中,可以使用pid函数来创建
一个PID控制器对象。

然后,将模糊控制器和PID控制器整合在一起,可以通过串联、并联或级联的方式来实现模糊PID控制。

4. 闭环控制,最后,将设计好的模糊PID控制器应用于闭环控
制系统中。

可以使用sim函数来进行仿真,观察系统的响应和性能。

需要注意的是,模糊PID控制的设计涉及到模糊集合的定义、隶属函数的选择、规则的设置等,需要根据具体的控制对象和要求来进行调整和优化。

同时,对于PID控制器的参数调节也需要谨慎处理,可以使用MATLAB中的工具箱来进行参数整定和性能分析。

总的来说,实现模糊PID控制的MATLAB程序需要综合运用模糊逻辑工具箱和控制系统工具箱,通过适当的建模和调节来实现模糊PID控制器的设计和应用。

如何进行模糊控制的Matlab实现

如何进行模糊控制的Matlab实现

如何进行模糊控制的Matlab实现模糊控制是一种基于模糊逻辑的控制方法,它能够在复杂的环境下进行精确的控制。

在现实世界中,很多问题存在不确定性和模糊性,传统的控制方法很难解决这些问题。

而模糊控制通过建立模糊规则来模拟人的思维过程,能够灵活地应对这些问题。

Matlab是一种功能强大的科学计算软件,它提供了丰富的工具箱和函数,可以帮助我们快速实现模糊控制算法。

本文将介绍如何使用Matlab进行模糊控制的实现,并结合一个实际案例进行说明。

首先,我们需要了解模糊控制的基本原理。

模糊控制是基于模糊逻辑进行推理和决策的一种方法。

它将输入和输出的模糊集合表示为隶属度函数,并通过模糊规则对模糊输入进行推理,得到模糊输出。

最后,将模糊输出通过去模糊化方法转换为具体的控制量。

在Matlab中,可以使用Fuzzy Logic Toolbox工具箱来实现模糊控制。

首先,需要定义输入和输出的模糊集合。

可以使用trimf函数来定义三角形隶属度函数,也可以使用gaussmf函数来定义高斯隶属度函数。

然后,需要定义模糊规则。

可以使用fuzarith函数来定义规则的操作,如AND、OR、NOT等。

最后,使用evalfis 函数对输入进行推理,得到模糊输出。

接下来,我们以温度控制为例,介绍如何使用Matlab进行模糊控制的实现。

假设我们要设计一个模糊控制器来控制一个房间的温度,使其尽可能接近一个设定的目标温度。

首先,定义输入的模糊集合和隶属度函数。

假设输入是当前的温度,模糊集合包括"冷"、"舒适"和"热"三个隶属度函数。

可以使用trimf函数来定义这些隶属度函数。

然后,定义输出的模糊集合和隶属度函数。

假设输出是空调的功率,模糊集合包括"低"、"中"和"高"三个隶属度函数。

同样,可以使用trimf函数来定义这些隶属度函数。

模糊控制的MATLAB实现具体过程

模糊控制的MATLAB实现具体过程

在rulelist的每一行中,前m个数字表示各输入语言 变量的语言值(隶属度函数的编号),随后的n个数字表 示输出语言变量的语言值,第n+m+1个数字是该规则的 权重,权重的值在0到1之间,一般设定为1;第n+m+2 个数字为0或1两者之一,为1表示模糊规则各输入语言 变量之间是and关系,为0则表示是or关系。
PPT学习交流
16
例:a=newfis(‘tipper’); a=addvar(a,’input’,’service’,[0 10]); a=addmf(a,’input’,1,’poor’,’guassmf’,[1.5 0]); a=addmf(a,’input’,1,’good’,’guassmf’,[1.5 5]); a=addmf(a,’input’,1,’excellent’,’guassmf’,[1.5 10]); plot(a,’input’,1)
注意:对于添加到同一个模糊推理系统的语言变量,按 先后顺序自动编号,编号从1开始,逐渐递增。对于分属 于输入与输出的不同语言变量则独立地分别编号。
例:a=newfis(‘tipper’); //创建并返回一个新的FIS系统
a=addvar(a,’input’,’service’,[0 10]);
getfis(a,’input’,1) /P/P取T学习得交流FIS的部分或全部属性
如果输入U是M*N矩阵,则系统是N输入的, 返回的Y是M*L矩阵,L是系统的输出的数目。
例:fis=readfis(‘tipper’);
PPT学习交流
11
③ 函数gaussmf 功能:建立高斯型隶属度函数。
格式:y=gaussmf(x,[sig c])
其中:参数x指定变量论域范围,参数c决定了函数的中心 点,sig决定了函数曲线的宽度σ。

MATLAB实现模糊控制

MATLAB实现模糊控制

MATLAB实现模糊控制⼀、简介MATLAB软件有提供⼀个模糊推理系统编辑器,利⽤模糊⼯具箱在matlab命令窗⼝输⼊Fuzzy命令进⼊模糊控制编辑环境⼆、主要步骤1、接受输⼊变量2、输⼊变量模糊化3、利⽤模糊规则进⾏推理得出结论4、综合步骤3利⽤结论从模糊⾪属度得到实际的输出值5、输出结果三、MATLAB运⾏结果输⼊ e 的模糊语⾔变量及其⾪属度函数:输⼊ ec 的模糊语⾔变量及其⾪属度函数:输出结果:四、总结在本次实验中设置了两个模糊输⼊变量(e和ec),⼀个模糊输出变量u 。

在规则库中建⽴了7x7=49条规则,模糊规则中第⼀个和第⼆个为输⼊,第三个数表输出,后俩个数分别是规则权重和AND OR选项。

模糊变量的⾪属函数分别设置成了“Z型”、“三⾓形”、“S型”五、代码部分%模糊控制器设计a=newfis('fuzzf'); %创建新的模糊推理系统%输⼊1f1=1;a=addvar(a,'input','e',[-6*f1,6*f1]);%添加 e 的模糊语⾔变量a=addmf(a,'input',1,'NB','zmf',[-6*f1,-2*f1]);%添加 e 的模糊语⾔变量的⾪属度函数(z型)a=addmf(a,'input',1,'NM','trimf',[-6*f1,-4*f1,-1]);%⾪属度函数为三⾓形a=addmf(a,'input',1,'NS','trimf',[-6*f1,-2*f1,1*f1]);a=addmf(a,'input',1,'Z','trimf',[-4*f1,0,4*f1]);a=addmf(a,'input',1,'PS','trimf',[-2*f1,0*f1,2*f1]);a=addmf(a,'input',1,'PM','trimf',[0,4*f1,6*f1]);a=addmf(a,'input',1,'PB','smf',[2*f1,6*f1]);%输⼊2f2=1;a=addvar(a,'input','ec',[-6*f2,6*f2]);%添加 ec 的模糊语⾔变量a=addmf(a,'input',2,'NB','zmf',[-6*f2,-2*f2]);a=addmf(a,'input',2,'NM','trimf',[-6*f2,-4*f2,-1]);a=addmf(a,'input',2,'NS','trimf',[-6*f2,-2*f2,1*f2]);a=addmf(a,'input',2,'Z','trimf',[-4*f2,0,4*f2]);a=addmf(a,'input',2,'PS','trimf',[-2*f2,0*f2,2*f2]);a=addmf(a,'input',2,'PM','trimf',[0,4*f2,6*f2]);a=addmf(a,'input',2,'PB','smf',[2*f2,6*f2]);%输出f8=1.5;a=addvar(a,'output','u',[-6*f8,6*f8]);%添加 u 的模糊语⾔变量a=addmf(a,'output',1,'NB','zmf',[-6*f8,-2*f8]);a=addmf(a,'output',1,'NM','trimf',[-6*f8,-4*f8,-1]);a=addmf(a,'output',1,'NS','trimf',[-6*f8,-2*f8,2*f8]);a=addmf(a,'output',1,'Z','trimf',[-4*f8,0,4*f8]);a=addmf(a,'output',1,'PS','trimf',[-2*f8,0*f8,6*f8]);a=addmf(a,'output',1,'PM','trimf',[1,4*f8,6*f8]);a=addmf(a,'output',1,'PB','smf',[2*f8,6*f8]);%规则库rulelist=[11111; %编辑模糊规则,后俩个数分别是规则权重和AND OR选项12111;13111;14211;15211;16311;17411;21111;22211;23211;24211;25311;26411;27511;31711;32611;33511;34411;35311;36211;37111;41711;42611;43511;44411;45311;46211;47111;51711;52611;53511;54411;55311;56211;57111;61711;62611;63511;64411;65311;66211;67111;71711;72611;73511;74411;75311;76211;77111;];a=addrule(a,rulelist); %添加模糊规则函数showrule(a) %显⽰模糊规则函数a1=setfis(a,'DefuzzMethod','centroid'); %设置解模糊⽅法writefis(a1,'fuzzf'); %保存模糊系统a2=readfis('fuzzf'); %从磁盘读出保存的模糊系统disp('fuzzy Controller table:e=[-3,+3],ec=[-3,+3]');%显⽰矩阵和数组内容%推理Ulist=zeros(7,7); %全零矩阵for i=1:7for j=1:7e(i)=-4+i;ec(j)=-4+j;Ulist(i,j)=evalfis([e(i),ec(j)],a2); %完成模糊推理计算 endend% Ulist=ceil(Ulist) %朝正⽆穷⽅向取整 Ulist %朝正⽆穷⽅向取整%画出模糊系统figure(1); plotfis(a2);figure(2);plotmf(a,'input',1);figure(3);plotmf(a,'input',2);figure(4);plotmf(a,'output',1);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例:
a=newfis(‘Simple’); a=addvar(a,’input’,’e’,[-6,6]); a=addmf(a,’input’,1,’NL’,’trapmf’,[-6,-6,-5,-3]); a=addmf(a,’input’,1,’NS’,’trapmf’,[-5,-3,-2,0]); a=addmf(a,’input’,1,’ZR’,’trapmf’,[-2,0,2])。
规则分析: 根据水箱水位控制的实际经验,可得到如下控制规则: (1) If e is negative then u is close-fast (2) If e is zero then u is no-chang (3) If e is positive then u is open-fast (4) If e is zero and ec is negative then u is open-slow (5) If e is zero and ec is positive then u is close-slow
4. ruleedit
功能: ruleedit (‘a’) ruleedit (a) 说明:利用ruleedit (‘a’)可打开规则编辑器,从中可 以查看或修改文件a.fis所对应的FIS结构中的规则。 ruleedit (a)格式可用来打开在工作空间中已存在 的名为a的FIS结构所对应的规则编辑器。
3. trimf 功能:三角形隶属度函数 格式:y = trimf(x,[a b c]) 说明:三角函数曲线由3个参数a、 b 、c确定: xa 0 参数a和c确定三角 x a a x b 形的“脚”,而 b a 参数b确定三角形 f x , a ,b , c c x b x c 的“峰” c b 0 xc
wlcontrol=addvar(wlcontrol,'input','e',[-1 1]); wlcontrol=addvar(wlcontrol,'input','ec',[-0.1 0.1]); wlcontrol=addvar(wlcontrol,'output','u',[-1 1]); wlcontrol=addmf(wlcontrol,'input',1,'negative','gaussmf',[0.45 -1]); wlcontrol=addmf(wlcontrol,'input',1,'zero','gaussmf',[0.45 0]); wlcontrol=addmf(wlcontrol,'input',1,'positive','gaussmf',[0.45 1]); wlcontrol=addmf(wlcontrol,'input',2,'negative','gaussmf',[0.045 -0.1]); wlcontrol=addmf(wlcontrol,'input',2,'zero','gaussmf',[0.045 0]); wlcontrol=addmf(wlcontrol,'input',2,'positive','gaussmf',[0.045 0.1]); wlcontrol=addmf(wlcontrol,'output',1,'close-fast','trimf',[-1.5 -1 -0.5]); wlcontrol=addmf(wlcontrol,'output',1,'close-slow','trimf',[-1 -0.5 0]); wlcontrol=addmf(wlcontrol,'output',1,'no-change','trimf',[-0.5 0 0.5]); wlcontrol=addmf(wlcontrol,'output',1,'open-slow','trimf',[0 0.5 1]); wlcontrol=addmf(wlcontrol,'output',1,'open-fast','trimf',[0.5 1 1.5]); rulelist=[1 0 1 1 1;2 0 3 1 1;3 0 5 1 1;2 1 4 1 1;2 3 2 1 1]; wlcontrol=addrule(wlcontrol,rulelist) writefis(wlcontrol); plotfis(wlcontrol)
4.2 水箱水位控制实验
水箱水位模糊推理系统(FIS)的建立 模糊推理系统的任务
对测量数据进行模糊化 建立模糊控制规则表 进行输出信息的模糊判决
建立模糊推理系统,通常采用两类方法: (1)利用Matlab命令行建立模糊推理系统 (2)利用GUI建立模糊推理系统
水位模糊控制系统 设定期望的水位,检测实际的水位,计算水位 误差,由模糊控制器计算得到阀门控制量,即阀门 开度,从而控制阀门,完成水位的控制。
2. fuzzy
功能:调用基本的FIS编辑器。 格式: fuzzy fuzzy(fismat) 说明:FIS编辑器可让用户方便地创建或修改FIS(模 糊推理系统)的高级特性。
3. mfedit 功能:隶属度函数编辑器 格式: mfedit (‘a’) mfedit (a) mfedit 说明: mfedit (‘a’)可打开隶属度函数编辑器,其中 包含文件a.fis的隶属度函数,通过编辑器可对其进行 修改。 mfedit (a)可打开保存在工作空间变量a中的FIS 结构。 mfedit可打开隶属度函数编辑器。
第4章
模糊控制的matlab实现
本实验以Mtlab6.5为开发环境,基于模糊逻辑工具 箱(Fuzzy Logic Toolbox) 通过简单直观的例子,对模 糊控制系统进行分析与研究。
4.1 认识实验
4.1.1 GUI(图形用户界面) 工具箱函数 1. anfisedit 功能:打开ANFIS编辑器的GUI 格式: anfisedit(‘a’) anfisedit(a) anfisedit 说明:利用anfisedit函数打开ANFIS编辑器的GUI, 从中可装入数据集合并训练ANFIS。 利用anfisedit(‘a’)可从磁盘中装入名为a.fis的FIS 文件,并打开ANFIS编辑器。利用anfisedit(a)可按同 样的方式打开FIS结构变量a。
5. 保存FIS结构 用writefis函数可以将Matlab工作空间中的FIS 结构变量wlcontrol保存到磁盘文件中: writefis(wlcontrol) 此文件将以.fis为缺省后缀名。 6. 可以利用下列函数对所建立的FIS进行操作 plotmf(绘制隶属度函数)、surfview(绘制系统输出曲面) plotfis(绘制FIS系统结构)、evalfis(计算FIS输出)、 getfis(获取FIS结构的属性)、showfis(显示FIS结构参数) evalmf(计算隶属度函数)
6. surfview 功能:输出曲面观测器 格式: surfview (‘a’) surfview (a) 说明:利用surfview (‘a’)可打开输出曲面观测器,从 中可查看保存在文件a.fis中的单输入或双输入FIS结 构的输出曲面。
4.1.2 隶属度函数 1. Gaussmf
功能:高斯(Gaussian)型隶属度函数 格式:y=gaussmf(x,[sig c]) 说明:对称的高斯型函数取决于2个参数σ(sig)和c:
4.2.2 利用Matlab命令行建立FIS 1. 建立新的FIS 设所建的FIS结构为wlcontrol,则命令行为:
2.量u,根据它们的论域要求,用add函数添加三 个变量。
3. 添加隶属函数
4. 设计并添加规则列表
2. sigmf 功能:Sigmoid型隶属度函数 格式:y=sigmf(x,[a c]) 说明:Sigmoid型函数由参数a和c确定:
f x, a, c 1 1 e a x c
例: x = 0:0.1:10; y = sigmf(x,[2 4]); plot(x,y); text(0.2,0.88,’sigmf’); text(0.2,0.78,’P = [2 4]’);
5. ruleview
功能:规则观测器和模糊推理框图 格式: ruleview (‘a’) ruleview (a) 说明:利用ruleview(‘a’)可打开a.fis规则状况的规则观 测器,从中可对文件a.fis所对应的FIS结构画出模糊推 理框图,并可显示整个框图。 ruleview (a)格式可用来打开在工作空间中已存在 的名为a的FIS结构所对应的规则观测器。利用可打开 ruleview规则观测器。
4.1.4 Simulink仿真模块 1. fuzblock 功能:模糊逻辑控制器仿真模块 格式: fuzblock 说明:此命令将打开Simulink系统的模糊逻辑模块库, 里面含有有关模糊逻辑器件的演示框图。 2. sffis 功能:Simulink中的模糊推理S函数 格式: output=sffis(t,x,u,flag,fismat) 说明:用此函数可得到一个由Simulink使用的MEX文件
f x, , c e

x c 2
2 2
gaussmf函数的参数以向量[sig,c]形式给出。 例: x = 0:0.1:10; y = gaussmf(x,[2 5]); plot(x,y); text(0.2,0.88,’gaussmf’); text(0.2,0.78,’P = [2 5]’);
相关文档
最新文档