Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТ Компьютерный практикум.doc
Скачиваний:
489
Добавлен:
20.03.2016
Размер:
3.35 Mб
Скачать
    1. Программирование нечеткой системы в среде matlab с использованием встроенных функций

Цель выполнения лабораторной работы: Освоить основы программирования нечетких систем с помощью встроенных функций пакета нечеткой логики программной среды MATLAB.

Задание: Необходимо запрограммировать нечеткую систему, необходимую для аппроксимации табличной функции ,. Варианты задания представлены в табл. 4.1.

Пример выполнения:

Задача. В данной лабораторной работе необходимо запрограммировать нечеткую систему для аппроксимации таблично заданной функции. Для примера возьмем таблично заданную функцию из примера к лабораторной работе 1 (табл. 4.2).

Пакет Fuzzy Logic Toolbox наделен множеством функций для создания нечетких систем (Приложение 1).

Для программирования нечеткой системы для аппроксимации таблично заданной функции из примера к лабораторной работе № 1 достаточно написать следующий программный код:

a=newfis('approxim','sugeno'); % создание нечеткой системы типа Сугено

a=addvar(a,'input','x',[0 1]); % добавляем входную переменную х с диапазоном изменений от 0 до 1

a=addvar(a,'output','y',[0 3]); % добавляем выходную переменную у с диапазоном изменений от 0 до 3

a=rmmf(a,'input',1,'mf',1);%удаление функций принадлежности входной и выходной переменных создаваемых по умолчанию при создании нечеткой системы (необходимо для версии MATLAB ниже версии 7.5)

a=rmmf(a,'input',1,'mf',2);

a=rmmf(a,'input',1,'mf',1);

a=rmmf(a,'output',1,'mf',1);

a=rmmf(a,'output',1,'mf',2);

a=rmmf(a,'output',1,'mf',1);

a=addmf(a,'input',1,'mf1','gaussmf',[0.05 0.1]); % добавляем функцию принадлежности mf1 гауссовского типа для входной переменной с диапазоном изменений от 0,05 до 0,1

a=addmf(a,'input',1,'mf2','gaussmf',[0.05 0.2]);

a=addmf(a,'input',1,'mf3','gaussmf',[0.05 0.3]);

a=addmf(a,'input',1,'mf4','gaussmf',[0.05 0.4]);

a=addmf(a,'input',1,'mf5','gaussmf',[0.05 0.5]);

a=addmf(a,'input',1,'mf6','gaussmf',[0.05 0.6]);

a=addmf(a,'input',1,'mf7','gaussmf',[0.05 0.7]);

a=addmf(a,'input',1,'mf8','gaussmf',[0.05 0.8]);

a=addmf(a,'input',1,'mf9','gaussmf',[0.05 0.9]);

a=addmf(a,'input',1,'mf10','gaussmf',[0.05 1]);

a=addmf(a,'output',1,'mf1','constant',[2.05]); % добавляем функцию принадлежности mf1 для выходной переменной, которая является константой равной 2,05

a=addmf(a,'output',1,'mf2','constant',[1.94]);

a=addmf(a,'output',1,'mf3','constant',[1.92]);

a=addmf(a,'output',1,'mf4','constant',[1.87]);

a=addmf(a,'output',1,'mf5','constant',[1.77]);

a=addmf(a,'output',1,'mf6','constant',[1.74]);

a=addmf(a,'output',1,'mf7','constant',[1.71]);

a=addmf(a,'output',1,'mf8','constant',[1.6]);

a=addmf(a,'output',1,'mf9','constant',[1.56]);

a=addmf(a,'output',1,'mf10','constant',[1.4]);

rulelist=[...

1 1 1 1

2 2 1 1

3 3 1 1

4 4 1 1

5 5 1 1

6 6 1 1

7 7 1 1

8 8 1 1

9 9 1 1

10 10 1 1]; % формируем базу знаний

a=addrule(a,rulelist) % добавляем набор правил в нечеткую систему

tip=evalfis([0.3],a) % в режиме командой строки узнаем ответ системы на вход равный 0,3

Fuzzy(a) % вызываем FIS-редактор для отображения созданной нечеткой системы вывода

Поясним, как формируется база знаний. При программировании база знаний представляет собой матрицу, каждая строка которой представляет собой правило. Матрица правил состоит из m+n+2 столбцов, где m-количество входных переменных, n – количество выходных переменных. Первые m столбцов отражают входы системы. Каждый из этих столбцов отражают индекс функции принадлежности соответствующей входной переменной. Следующие n столбцов отражают выходы системы. Каждый из этих столбцов отражают индекс функции принадлежности соответствующей выходной переменной. m+n+1 столбец отражает вес правила в базе знаний. Вес представляет собой число от 0 до 1. m+n+2 столбец показывает связку между входными переменными в правиле. Если значение равно 1, то между входами ставится знак И (AND). Если значение равно 2, то между входами ставится знак ИЛИ (OR). Таким образом MATLAB интерпретирует, например, первую строку нашей базы знаний следующим образом:

If (x is mf1) then (y is mf1)

В результате работе нашей программы была построена следующая нечеткая системы (рис. 4.17–4.22):

Рис. 4.17. Окно редактора функции

Рис. 4.18. Окно функций принадлежности входной переменной

Рис.4.19. Окно функций принадлежности выходной переменной

Рис. 4.20. Окно редактора правил

Рис.4.21. Окно просмотра правил

Рис. 4.22. График функции

Выводы (пример):

В результате выполнения лабораторной работы мною были освоены навыки программирования нечетких систем в математической среде MATLAB с использованием встроенных функций. С помощью этих функций мною была построена нечеткая система для аппроксимации таблично заданной функции.

Контрольные вопросы:

  1. Какая команда используется для добавления переменной? Опишите параметры функции.

  2. Каким образом задаются и добавляются правила в программном коде?

  3. Опишите команду вывода функций принадлежности.

  4. Каким образом задаются типы функций принадлежности?