Преобразование данных в нечеткие данные
Я новичок У меня есть матрица в Matlab, и я хочу преобразовать номер матрицы в нечеткое число и использовать эти нечеткие числа для ввода моей функции. Как я могу это сделать? Правильно ли преобразовать число в двойное число между 0,1, разделив числа на 1000, как это? [256,12;3,56]--->[0.256,0.12;0.003,0.056]
а для двойного номера что мне делать?
1 ответ
Что вы подразумеваете под нечетким числом?!! Насколько я знаю, MATLAB использует нормальные числа для системы Fuzzy. После этого появляются фаззификаторы, которые меняют действительные числа на точки функций членства. И тогда нечеткая логика решает, как должно быть выбрано число, и так далее...! С другой стороны, если вы хотите изменить масштаб числа на диапазон [-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);
поэтому, если r = 5 в диапазоне [0 10], то 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:
- A, B и X - векторы одного и того же измерения.
- Оператор является одной из следующих строк: 'sum', 'sub', 'prod' и 'div'.
- Возвращенное нечеткое множество C является вектором столбца такой же длины, что и X.
И, наконец, вы можете выполнить расчет нечеткого вывода, используя функцию 'evalfis' в MATLAB. Входы и выходы этой функции также являются действительными числами:
fismat = readfis('tipper');
out = evalfis([2 1; 4 9],fismat)
Этот синтаксис генерирует ответ
out =
7.0169
19.6810