用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-09 20:07:54 浏览: 214
基于matlab-模糊系统分析
以下是一种可能的解法,供参考:
首先,生成一组输入输出数据:
```
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');
```
阅读全文