我是初学者。我在matlab中有一个矩阵,我想将转换矩阵的数字转换为模糊数,并将这些模糊数用于我的函数输入。我可以这样做吗? 将数字转换为0,1之间的双数,是否正确将数字除以1000? [256,12; 3,56] ---> [0.256,0.12; 0.003,0.056]
但对于双号,我该怎么办?
答案 0 :(得分:1)
模糊数是什么意思?!!据我所知,MATLAB使用模糊系统的正常数字。之后会有模糊器将实数更改为隶属函数上的点。然后模糊逻辑决定如何选择数字,等等......! 另一方面,如果要将数字的比例更改为[-1 1]或[0 1]范围,则它与模糊无关。
并从范围[0 1]更改为[a b]使用以下代码行:
r = a + (b-a)*z;
其中z在[0 1]范围内,r在[a b]
范围内例如,将z = 0.5从[0 1]更改为[0 10]范围,r变为:
r = 0 + (10-0)*0.5 = 5
从[a b]更改为[0 1]也可以这样做:
z = (r - a)/(b-a);
所以如果在[0 10]范围内r = 5,则z = 0.5,范围为[0 1];
此外,对于真正的模糊操作,请尝试以下方法:
point_n = 101; % Determines MF's resolution
min_x = -20; max_x = 20; % Universe is [min_x, max_x]
x = linspace(min_x, max_x, point_n)';
A = trapmf(x, [-10 -2 1 3]); % Trapezoidal fuzzy set A
B = gaussmf(x, [2 5]); % Gaussian fuzzy set B
C1 = fuzarith(x, A, B, 'sum');
subplot(2,1,1);
plot(x, A, 'b--', x, B, 'm:', x, C1, 'c');
title('fuzzy addition A+B');
C2 = fuzarith(x, A, B, 'sub');
subplot(2,1,2);
plot(x, A, 'b--', x, B, 'm:', x, C2, 'c');
title('fuzzy subtraction A-B');
C3 = fuzarith(x, A, B, 'prod');
这就是你执行模糊算术的方法。根据MathWorks:
使用区间运算,C = fuzarith(X,A,B,运算符)返回模糊集C作为应用由字符串运算符表示的函数的结果,运算符对采样的凸模糊集A执行二元运算和B.A和B的元素来自采样宇宙的凸函数,X:
最后,您可以使用MATLAB中的'evalfis'函数执行模糊推理计算。此函数的输入和输出也是实数:
fismat = readfis('tipper');
out = evalfis([2 1; 4 9],fismat)
此语法生成响应
out =
7.0169
19.6810