Вычислите систему нечеткого вывода
[
возвращает промежуточные результаты процесса нечеткого вывода. Этот синтаксис не поддерживается при 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.