基于matlab产生一组数据,然后利用模糊系统辨识方法,建立相应的模糊系统模型,并比较在相同输入下,实际系统输出与模糊系统模型输出的差异。其中: x 为系统输入,输入范围为【-2,2】,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 11:08:49 浏览: 17
步骤如下:
1. 生成数据:
```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));
```
2. 建立模糊系统模型:
```matlab
fis = genfis1([x', z'], 3, 'gbellmf', 'linear');
fis = anfis([x', z'], y, fis);
```
3. 比较输出差异:
```matlab
y_pred = evalfis([x', z'], fis);
figure;
plot(x, y, 'b', x, y_pred, 'r--');
legend('Actual output', 'Fuzzy system output');
xlabel('Input');
ylabel('Output');
```
其中,Q 可以取 0.05,R 可以取 0.5。在建立模糊系统模型时,我们使用了 genfis1 函数生成初始模型,然后使用 anfis 函数对其进行训练。最后,我们将实际输出和模糊系统输出进行比较,可以看到它们非常接近。
相关问题
基于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
首先,我们可以使用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');
```
用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
以下是一种可能的解法,供参考:
首先,生成一组输入输出数据:
```
Q = 0.05;
R = 0.5;
t = linspace(-2*pi, 2*pi, 100);
F = 3*sin(t) + 2*cos(t.^2);
v = Q*F.*(rand(size(F))-0.5) + R*randn(size(F));
y = F + v;
```
然后,利用Fuzzy Logic Toolbox工具箱建立模糊系统模型。首先定义输入输出变量:
```
input = [-2*pi, 2*pi];
output = [-10, 10];
```
然后,设计模糊规则:
```
ruleList = [1 1 1 1; 1 2 2 1];
```
其中,ruleList的每一行表示一条规则,第一列和第二列分别表示输入变量x和输出变量y所属的模糊集的编号,第三列和第四列分别表示该规则的前提和结论的置信度,此处取值为1表示完全置信。
接着,定义模糊集:
```
inputMF(1) = fuzzyset('trimf', [-2*pi -2*pi -pi]);
inputMF(2) = fuzzyset('trimf', [-2*pi -pi 0]);
inputMF(3) = fuzzyset('trimf', [-pi 0 pi]);
inputMF(4) = fuzzyset('trimf', [0 pi 2*pi]);
inputMF(5) = fuzzyset('trimf', [pi 2*pi 2*pi]);
outputMF(1) = fuzzyset('trimf', [-10 -10 -5]);
outputMF(2) = fuzzyset('trimf', [-7.5 -5 -2.5]);
outputMF(3) = fuzzyset('trimf', [-3 0 3]);
outputMF(4) = fuzzyset('trimf', [2.5 5 7.5]);
outputMF(5) = fuzzyset('trimf', [5 10 10]);
```
其中,inputMF表示输入变量x所属的5个模糊集,outputMF表示输出变量y所属的5个模糊集。这里使用的是三角形隶属度函数。
最后,利用Fuzzy Logic Toolbox提供的fuzzy系统命令建立模糊系统:
```
fis = fuzzy(input, output, 'min', 'max', 'centroid');
fis = addInput(fis, inputMF, 'Name', 'x');
fis = addOutput(fis, outputMF, 'Name', 'y');
fis = addRule(fis, ruleList);
```
其中,fis是建立的模糊系统对象,'min'和'max'分别表示使用min-max合成法和max-min解析法进行模糊推理,'centroid'表示使用重心法进行模糊输出的解模糊。
最后,比较实际系统输出和模糊系统模型输出的差异:
```
yf = evalfis(fis, t);
plot(t, y, t, yf);
legend('Actual output', 'Fuzzy system output');
```
其中,evalfis命令可以用来计算模糊系统在给定输入下的输出值。plot命令用来绘制实际输出和模糊系统输出的曲线,以便比较它们之间的差异。
完整代码如下:
```
Q = 0.05;
R = 0.5;
t = linspace(-2*pi, 2*pi, 100);
F = 3*sin(t) + 2*cos(t.^2);
v = Q*F.*(rand(size(F))-0.5) + R*randn(size(F));
y = F + v;
input = [-2*pi, 2*pi];
output = [-10, 10];
ruleList = [1 1 1 1; 1 2 2 1];
inputMF(1) = fuzzyset('trimf', [-2*pi -2*pi -pi]);
inputMF(2) = fuzzyset('trimf', [-2*pi -pi 0]);
inputMF(3) = fuzzyset('trimf', [-pi 0 pi]);
inputMF(4) = fuzzyset('trimf', [0 pi 2*pi]);
inputMF(5) = fuzzyset('trimf', [pi 2*pi 2*pi]);
outputMF(1) = fuzzyset('trimf', [-10 -10 -5]);
outputMF(2) = fuzzyset('trimf', [-7.5 -5 -2.5]);
outputMF(3) = fuzzyset('trimf', [-3 0 3]);
outputMF(4) = fuzzyset('trimf', [2.5 5 7.5]);
outputMF(5) = fuzzyset('trimf', [5 10 10]);
fis = fuzzy(input, output, 'min', 'max', 'centroid');
fis = addInput(fis, inputMF, 'Name', 'x');
fis = addOutput(fis, outputMF, 'Name', 'y');
fis = addRule(fis, ruleList);
yf = evalfis(fis, t);
plot(t, y, t, yf);
legend('Actual output', 'Fuzzy system output');
```