Преобразование данных в нечеткие данные

Я новичок У меня есть матрица в 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:

  1. A, B и X - векторы одного и того же измерения.
  2. Оператор является одной из следующих строк: 'sum', 'sub', 'prod' и 'div'.
  3. Возвращенное нечеткое множество C является вектором столбца такой же длины, что и X.

И, наконец, вы можете выполнить расчет нечеткого вывода, используя функцию 'evalfis' в MATLAB. Входы и выходы этой функции также являются действительными числами:

fismat = readfis('tipper');
out = evalfis([2 1; 4 9],fismat)

Этот синтаксис генерирует ответ

out =
    7.0169
    19.6810 
Другие вопросы по тегам