基于matlab产生一组数据,然后利用模糊系统辨识方法,建立相应的模糊系统模型,并比较在相同输入下,实际系统输出与模糊系统模型输出的差异。其中: x 为系统输入,输入范围为【-2pi,2pi】,y 为系统输出,z 为系统输出的测量值; 𝐹(𝑥) = 3 ∗ sin(x) + 2 ∗ cos(x^2); v(t)为测量噪声,是二个白噪声之和,其一为标准差为 Q*y(t)、均值为 0 的白噪声,其二为 标准差为 R、均值为 0 的白噪声。Q 与 R 的值自行选取,Q 不小于 5%,R 不小于 0.5
时间: 2024-02-06 09:08:56 浏览: 143
基于Matlab软件的伺服系统设计方法.pdf
首先,我们可以使用MATLAB生成一组输入输出数据:
```matlab
x = linspace(-2*pi, 2*pi, 1000);
y = 3*sin(x) + 2*cos(x.^2);
z = y + 0.05*y.*randn(size(y)) + 0.5*randn(size(y));
```
其中,`x`为输入数据,`y`为实际输出数据,`z`为带有噪声的输出数据。
接下来,我们可以使用MATLAB中的Fuzzy Logic Toolbox来建立模糊系统模型。以下是具体步骤:
1. 创建模糊逻辑系统对象
```matlab
fis = newfis('fis');
```
2. 添加输入变量和隶属函数
```matlab
fis = addvar(fis, 'input', 'x', [-2*pi 2*pi]);
fis = addmf(fis, 'input', 1, 'mf1', 'gaussmf', [0.5*(2*pi)/(2*pi) -2*pi]);
fis = addmf(fis, 'input', 1, 'mf2', 'gaussmf', [0.5*(2*pi)/(2*pi) 0]);
fis = addmf(fis, 'input', 1, 'mf3', 'gaussmf', [0.5*(2*pi)/(2*pi) 2*pi]);
```
这里我们添加了一个输入变量`x`,并为其定义了三个隶属函数,分别为`mf1`、`mf2`和`mf3`,采用高斯隶属函数。
3. 添加输出变量和隶属函数
```matlab
fis = addvar(fis, 'output', 'y', [-10 10]);
fis = addmf(fis, 'output', 1, 'mf1', 'gaussmf', [2 -10]);
fis = addmf(fis, 'output', 1, 'mf2', 'gaussmf', [2 0]);
fis = addmf(fis, 'output', 1, 'mf3', 'gaussmf', [2 10]);
```
这里我们添加了一个输出变量`y`,并为其定义了三个隶属函数,同样采用高斯隶属函数。
4. 添加模糊规则
```matlab
rule1 = [1 1 1 1];
rule2 = [2 2 2 1];
rule3 = [3 3 3 1];
fis = addrule(fis, [rule1; rule2; rule3]);
```
这里我们添加了三条模糊规则,规则的意义是:当`x`处于`mf1`时,`y`处于`mf1`;当`x`处于`mf2`时,`y`处于`mf2`;当`x`处于`mf3`时,`y`处于`mf3`。
5. 评估模糊系统模型
```matlab
y_fis = evalfis(x, fis);
```
这里我们使用`evalfis`函数来评估模糊系统模型的输出,输入为生成的输入数据`x`。
6. 比较实际系统输出与模糊系统模型输出的差异
```matlab
plot(x, y, 'r', x, y_fis, 'b');
legend('Actual Output', 'Fuzzy System Output');
```
这里我们将实际输出和模糊系统模型输出进行比较,绘制在同一张图中。
完整代码如下:
```matlab
x = linspace(-2*pi, 2*pi, 1000);
y = 3*sin(x) + 2*cos(x.^2);
z = y + 0.05*y.*randn(size(y)) + 0.5*randn(size(y));
fis = newfis('fis');
fis = addvar(fis, 'input', 'x', [-2*pi 2*pi]);
fis = addmf(fis, 'input', 1, 'mf1', 'gaussmf', [0.5*(2*pi)/(2*pi) -2*pi]);
fis = addmf(fis, 'input', 1, 'mf2', 'gaussmf', [0.5*(2*pi)/(2*pi) 0]);
fis = addmf(fis, 'input', 1, 'mf3', 'gaussmf', [0.5*(2*pi)/(2*pi) 2*pi]);
fis = addvar(fis, 'output', 'y', [-10 10]);
fis = addmf(fis, 'output', 1, 'mf1', 'gaussmf', [2 -10]);
fis = addmf(fis, 'output', 1, 'mf2', 'gaussmf', [2 0]);
fis = addmf(fis, 'output', 1, 'mf3', 'gaussmf', [2 10]);
rule1 = [1 1 1 1];
rule2 = [2 2 2 1];
rule3 = [3 3 3 1];
fis = addrule(fis, [rule1; rule2; rule3]);
y_fis = evalfis(x, fis);
plot(x, y, 'r', x, y_fis, 'b');
legend('Actual Output', 'Fuzzy System Output');
```
阅读全文