Вычислите систему нечеткого вывода
[ возвращает промежуточные результаты процесса нечеткого вывода. Этот синтаксис не поддерживается при output,fuzzifiedIn,ruleOut,aggregatedOut,ruleFiring] = evalfis(___)fis является fistree объект.
Загрузка FIS.
fis = readfis('tipper');Оцените FIS, когда первый вход 2 и второй вход 1.
output = evalfis(fis,[2 1])
output = 7.0169
Загрузка FIS.
fis = readfis('tipper');Задайте входные комбинации для вычисления с помощью массива с одной строкой на входную комбинацию.
input = [2 1;
4 5;
7 8];Оцените FIS для заданных входных комбинаций.
output = evalfis(fis,input)
output = 3×1
7.0169
14.4585
20.3414
Каждая строка output - дефузорированное выходное значение для соответствующей строки input.
Загрузка FIS.
fis = readfis('tipper');Создайте evalfisOptions набор опций, задающий количество выборок в выход нечетких наборах.
options = evalfisOptions('NumSamplePoints',50);Оцените FIS с помощью этого набора опций.
output = evalfis(fis,[2 1],options);
Создайте пару систем нечеткого вывода Мамдани.
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1); fis2 = mamfis('Name','fis2','NumInputs',2,'NumOutputs',1);
Определите соединение между ними.
con = ["fis1/output1" "fis2/input1"];
Создайте дерево систем нечеткого вывода.
tree = fistree([fis1 fis2],con);
Создайте evalfisOptions набор опций, задающий количество выборок в выход нечетких наборах.
options = evalfisOptions('NumSamplePoints',50);Оцените fistree объект с использованием заданной входной комбинации и этого набора опций.
y = evalfis(tree,[0.5 0.2 0.7],options)
y = 0.1553
Загрузка FIS.
fis = readfis('tipper');Оцените FIS и верните промежуточные результаты вывода.
[output,fuzzifiedIn,ruleOut,aggregatedOut,ruleFiring] = evalfis(fis,[2 1]);
Можно изучить промежуточные результаты, чтобы понять или визуализировать процесс нечеткого вывода. Для примера просмотрите агрегированный выходом нечеткий набор, который является нечетким множеством, которое evalfis выполняет дефузификацию, чтобы найти выход значение. Кроме того, постройте график дефузифицированного выходного значения.
outputRange = linspace(fis.output.range(1),fis.output.range(2),length(aggregatedOut))'; plot(outputRange,aggregatedOut,[output output],[0 1]) xlabel('Tip') ylabel('Output Membership') legend('Aggregated output fuzzy set','Defuzzified output')

Длина aggregatedOutput соответствует количеству точек выборки, используемых для дискретизации выхода нечетких множеств.
Создайте систему нечеткого вывода Mamdani type-2.
fis = mamfistype2('NumInputs',2,'NumOutputs',1);
Оцените FIS, когда первый вход 0.4 и второй вход 0.72.
output = evalfis(fis,[0.4 0.72])
output = 0.1509
Выходы FIS типа 2 являются четким значением.
Когда вы получаете промежуточные результаты нечеткого вывода для FIS типа 2, вы получаете промежуточные результаты, сгенерированные с использованием как верхних, так и более низких значений MF. Для примера получите промежуточные значения нечеткого входа.
[output,fuzzifiedInput] = evalfis(fis,[0.5 0.75]);
Просмотрите нечеткие входные значения.
fuzzifiedInput
fuzzifiedInput = 9×4
0 0 0 0
1.0000 0 1.0000 0
0 0 0 0
0 0.4000 0 0.2500
1.0000 0.4000 1.0000 0.2500
0 0.4000 0 0.2500
0 0.4000 0 0.2500
1.0000 0.4000 1.0000 0.2500
0 0.4000 0 0.2500
Первые два столбца содержат нечеткие значения первого и второго входов, основанные на верхней MF для каждого входа. Вторые два столбца содержат нечеткие значения на основе нижнего МФ для каждого входа.
fis - Система нечеткого выводаmamfis | объекта sugfis | объекта mamfistype2 | объекта sugfistype2 | объекта fistree объектСистема нечеткого вывода, которая будет оценена, задается как одно из следующего:
mamfis объект - система нечеткого вывода Mamdani
sugfis объект - система нечеткого вывода Sugeno
mamfistype2 объект - Type-2 системы нечеткого вывода Мамдани
sugfistype2 объект - Type-2 системы нечеткого вывода Sugeno
fistree объект - Дерево взаимосвязанных систем нечеткого вывода
Однородная структура, созданная с помощью getFISCodeGenerationData. Для получения примера смотрите Сгенерировать код для нечеткой системы, использующей MATLAB Coder.
input - Входные значенияВходные значения, заданные как M -by - NU массив, где NU - количество входных переменных в fis и M количество входа комбинаций для оценки.
evalfis Поддержек значения входа двойной точности или одинарной точности.
options - опции оценкиevalfisOptions объектОпции оценки, заданные как evalfisOptions объект.
fuzzifiedIn - Нечеткие входные значенияНечеткие входные значения, возвращенные как массив.
Когда fis является системой нечеткого вывода типа 1, fuzzifiedIn является NR -by NU массивом, где NR - количество правил в fis. Элемент (i, j) fuzzifiedIn - значение входной функции членства для j-го входа в i-м правиле.
Когда fis является системой нечеткого вывода типа 2, fuzzifiedIn является NR массивом -by- (2 * NU). Первые столбцы NU содержат нечеткие значения верхней функции принадлежности для каждого правила, а последние NU столбцы - нечеткие значения из нижних функций принадлежности.
Если input задает несколько входных комбинаций, затем fuzzifiedIn соответствует комбинации в последней строке input.
Для получения дополнительной информации о нечеткости входных значений смотрите Fuzzify Inputs.
Этот выходной аргумент не поддерживается при fis является fistree объект.
ruleOut - выходы правилаВыходы правила, возвращенные как массив. Чтобы получить выход для каждого правила, evalfis применяет силу запуска от председента правила к функции выхода членства с помощью метода implication, заданного в fis.
Когда fis является системой Мамдани типа 1, ruleOut - NS массив NR (NY NR), где NY - количество правил, NS - количество выходов, а точек выборки - количество областей значений, используемых для оценки выходных переменных. Каждый столбец ruleOut содержит выход нечеткий набор для одного правила. Первые столбцы NR содержат выходы правила для первой выходной переменной, следующие столбцы NR соответствуют второй выходной переменной и так далее.
Когда fis является системой Мамдани типа 2, ruleOut является NS массивом -by- (2 * NR * NY). Первые столбцы NR * NY содержат выходы правила, сгенерированные с помощью функций верхнего уровня, а последние столбцы NR * NY - выходы правила, сгенерированные с помощью функций нижнего уровня.
Когда fis является системой Sugeno типа-1, каждый выход правил является скалярным значением. В этом случае ruleOut является NR -by - NY массивом. Элемент (j, k) ruleOut - значение k-й выходной переменной для j-го правила.
Когда fis является системой Sugeno типа 2, ruleOut является NR массивом -by- (3 * NY). Первые столбцы NY содержат выходные уровни правил. Следующие NY столбцы содержат соответствующие сильные стороны запуска правил, сгенерированные с помощью функций верхнего уровня. Последние NY столбцы содержат сильные стороны запуска правил, сгенерированные с помощью функций более низкого уровня принадлежности. Для примера в трехкомпонентной системе столбцы 4 и 7 содержат интенсивность стрельбы для уровней выхода в колонке 1.
Если input задает несколько входных комбинаций, затем ruleOut соответствует комбинации в последней строке input.
Для получения дополнительной информации о нечетком подразумевении, смотрите Применить Метод Импликации.
Этот выходной аргумент не поддерживается при fis является fistree объект.
aggregatedOut - Агрегированный выходАгрегированный выход для каждой выходной переменной, возвращенный как массив.
NS -by - NY массив или вектор-строка с NY длины. Для каждой выходной переменной,evalfis объединяет соответствующие выходы из всех правил с помощью метода агрегации, заданного в fis.
Для системы Мамдани типа 1 совокупный результат для каждой выходной переменной является нечетким множеством. В этом случае aggregatedOut is как NS -by - NY массив, где NY - количество выходов, а NS - количество выборочных точек, используемых для оценки выходных областей значений переменных. Каждый столбец aggregatedOut содержит совокупный нечеткий набор для одной выходной переменной.
Для системы Мамдани типа 2 совокупный результат для каждой выходной переменной является нечетким множеством. В этом случае aggregatedOut is как NS массив -by- (2 * NY). Первые столбцы NY содержат агрегированные выходы, сгенерированные с помощью функций верхнего уровня, а последние NY столбцы - агрегированные выходы, сгенерированные с помощью функций нижнего уровня.
Когда fis является системой Sugeno типа 1, совокупный результат для каждой выходной переменной является скалярным значением. В этом случае aggregatedOut - вектор-строка длины NY, где k элемента - это сумма выходов правила для k-й выходной переменной.
Когда fis является системой Sugeno типа 2, aggregatedOut является NR массивом -by- (3 * NY). aggregatedOut содержит те же данные, что и ruleOut столбцы, отсортированные по уровням выхода. Для примера, в системе с тремя выходами, когда уровни выходных параметров в столбце 1 сортируются, соответствующие степени срабатывания в столбцах 4 и 7 корректируются соответственно.
Если input задает несколько входных комбинаций, затем aggregatedOut соответствует комбинации в последней строке input.
Для получения дополнительной информации о нечеткой агрегации см. Раздел «Агрегирование всех выходов».
Этот выходной аргумент не поддерживается при fis является fistree объект.
ruleFiring - Правила включения сильных сторонПравила силы стрельбы, возвращенные как вектор-столбец или массив. Чтобы получить силу стрельбы для каждого правила, evalfis оценивает председенты правила; то есть он применяет нечеткий оператор к значениям нечетких входов.
Для нечеткой системы типа 1, ruleFiring - вектор-столбец длины NR, где NR - количество правил, а i элемента - сила стрельбы i-го правила.
Для нечеткой системы типа 2 ruleFiring - массив NR -by-2. Первый столбец содержит сильные стороны запуска правил, сгенерированные с помощью функций верхнего уровня, а второй - сильные стороны запуска правил, сгенерированные с помощью функций нижнего уровня.
Если input задает несколько входных комбинаций, затем ruleFiring соответствует комбинации в последней строке input.
Для получения дополнительной информации о применении нечеткого оператора смотрите Apply Fuzzy Operator.
Этот выходной аргумент не поддерживается при fis является fistree объект.
Можно оценить системы нечеткого вывода типа 1 с помощью Rule Viewer в приложении Fuzzy Logic Designer.
Можно вычислить системы нечеткого вывода с помощью блока Fuzzy Logic Controller. Для получения дополнительной информации о отображении аргументов evalfis для блока Fuzzy Logic Controller см. Моделирование систем нечеткого вывода в Simulink.
evalfis входной параметр изменилсяПоведение изменено в R2018b
Порядок входных параметров для evalfis изменился, что требует обновления вашего кода.
Ранее, чтобы вычислить систему нечеткого вывода, fis, вы задали входные значения переменных, input, как первый входной параметр. Для примера:
output = evalfis(input,fis); output = evalfis(input,fis,options);
Обновите код, чтобы задать систему нечеткого вывода в качестве первого входного параметра. Для примера:
output = evalfis(fis,input); output = evalfis(fis,input,options);
evalfisOptions объектПоведение изменено в R2018a
Чтобы задать количество точек выборки для выхода нечетких множеств, вы теперь являетесь evalfisOptions объект, который требует обновления вашего кода.
Ранее, чтобы задать количество точек выборки, numPts, для использования при оценке выходных нечетких наборов системы нечеткого вывода fis, вы использовали входной параметр. Для примера:
output = evalfis(input,fis,numPts);
Обновите код, чтобы указать количество точек выборки, используя evalfisOptions объект. Для примера:
opt = evalfisOptions('NumSamplePoints',numPts);
output = evalfis(input,fis,opt);evalfis изменилось поведение диагностических сообщенийПоведение изменено в R2018a
Поведение диагностического сообщения evalfis функция изменилась. Ранее, evalfis функция имела следующее поведение для диагностических условий.
| Диагностическое условие | Предыдущее поведение |
|---|---|
| Вход значения за пределами заданных переменных областей значений | MATLAB® предупреждение |
| Никаких правил для заданного выхода при текущих входных значениях | Сообщение Командного окна MATLAB |
| Пустые выходные нечеткие наборы | Сообщение Командного окна MATLAB |
Начиная с R2018a, эти диагностические условия по умолчанию сообщаются как предупреждения MATLAB. Можно изменить это поведение, задав соответствующие опции в evalfisOptions объект.
Чтобы отключить предупреждающие сообщения по умолчанию, обновите код, чтобы использовать evalfisOptions Объект и задайте опции диагностического сообщения. Для примера отключите пустой выход нечеткое сообщение о наборе.
opt = evalfisOptions('EmptyOutputFuzzySetMessage',"none"); output = evalfis(input,fis,opt);
Поведение изменено в R2018a
При оценке системы Sugeno с использованием следующего синтаксиса промежуточные результаты нечеткого вывода теперь аналогичны промежуточным результатам для систем Мамдани.
[output,fuzzifiedInputs,ruleOutputs,aggregatedOutput] = evalfis(input,fis);
Для системы Sugeno:
ruleOutputs теперь возвращает массив, который содержит скалярное выходное значение для каждого правила; то есть продукт силы срабатывания правила и выходного уровня правила.
aggregatedOutput теперь возвращает сумму всех выходных значений правил для каждой выходной переменной.
Ранее для нечеткой системы Sugeno:
ruleOutputs возвращен массив, содержащий уровень выхода для каждого правила.
aggregatedOutput возвращен массив, который содержал силу срабатывания для каждого правила.
Начиная с R2018a, если ваш код возвращает промежуточные результаты нечеткого вывода при оценке системы Sugeno, используя evalfis, измените код, чтобы использовать новые ruleOutputs и aggregatedOutput результаты.
Указания и ограничения по применению:
Все evalfis для генерации кода поддерживаются синтаксисы. Однако, mamfis, sugfis, и fistree объекты не поддерживаются. Использовать evalfis для генерации кода необходимо преобразовать объекты FIS в однородные структуры с помощью getFISCodeGenerationData.
В отличие от блока Fuzzy Logic Controller, evalfis не поддерживает данные с фиксированной точкой для симуляции или генерации кода.
При оценке системы нечеткого вывода в Simulink®, рекомендуется не использовать evalfis или evalfisOptions внутри блока MATLAB Function. Вместо этого вычислите систему нечеткого вывода с помощью блока Fuzzy Logic Controller.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.