MATLAB
– это высокоуровневый язык технических
расчетов, интерактивная среда разработки
алгоритмов и современный инструмент
анализа данных.
MATLAB по сравнению с традиционными
языками программирования (C/C++, Java, Pascal,
FORTRAN) позволяет на порядок сократить
время решения типовых задач и значительно
упрощает разработку новых алгоритмов.
MATLAB представляет собой
основу всего семейства продуктов MathWorks
и является главным инструментом для решения
широкого спектра научных и прикладных
задач, в таких областях как: моделирование
объектов и разработка систем управления,
проектирование коммуникационных систем,
обработка сигналов и изображений, измерение
сигналов и тестирование, финансовое моделирование,
вычислительная биология и др.
Ядро MATLAB позволяет
максимально просто работать с матрицами
реальных, комплексных и аналитических
типов данных; со структурами данных и
таблицами поиска. Содержит встроенные
функции линейной алгебры (LAPACK, BLAS),
быстрого Фурье преобразования (FFTW), функции
для работы с полиномами, функции базовой
статистики и численного решения дифференциальных
уравнений; расширенные математические
библиотеки для Intel MKL. Все встроенные функции
ядра MATLAB разработаны и оптимизированы
специалистами и работают быстрее или
так же, как их эквивалент на C/C++.
Ключевые
возможности
- Платформонезависимый
высокоуровневый язык программирования
ориентированный на матричные вычисления
и разработку алгоритмов
- Интерактивная
среда для разработки кода, управления
файлами и данными
- Функции линейной
алгебры, статистики, анализ Фурье, решение
дифференциальных уравнений и др.
- Богатые средства
визуализации, 2-D и 3-D графика.
- Встроенные средства
разработки пользовательского интерфейса
для создания законченных приложений
на MATLAB
- Средства интеграции
с C/C++, наследование кода, ActiveX технологии
Fuzzy
Logic Toolbox
Fuzzy Logic Toolbox – это пакет
расширения MATLAB, содержащий инструменты
для проектирования систем нечеткой логики.
Пакет позволят создавать экспертные
системы на основе нечеткой логики, проводить
кластеризацию нечеткими алгоритмами,
а также проектировать нечеткие нейросети.
Пакет включает графический
интерфейс и для интерактивного
пошагового проектирования нечетких систем,
функции командной строки для
разработки программ, а также специальные
блоки для построения систем нечеткой
логики в Simulink.
Все функции пакета
написаны на открытом языке MATLAB, что
позволяет контролировать исполнение
алгоритмов, изменять исходный код, а также
создавать свои собственные функции и
процедуры.
Ключевые
возможности
- Графический интерфейс
для интерактивного пошагового проектирования
нечетких систем
- Функции для создания
экспертных систем на основе нечеткой
логики
- Поддержка логики
И, ИЛИ и НЕ в настраиваемых правилах
- Стандартные типы
экспертных систем нечеткой логики (Mamdani,
Sugeno)
- Функции для нейроадаптивной
и нечеткой кластеризации с обучением
- Включение нечетких
систем в Simulink-модели
- Генерация С-кода
и независимых приложений реализующих
системы нечеткой логики
Проектирование
систем управления\Fuzzy
Logic Toolbox
Структура Fuzzy Logic
Toolbox
Fuzzy Logic Toolbox содержит
следующие категории программных инструментов:
- функции;
- интерактивные
модули с графическим
пользовательским интерфейсом (с GUI);
- блоки
для пакета Simulink;
- демонстрационные
примеры;
- Си-код
мащины нечеткого логического
вывода.
Функции
Fuzzy Logic Toolbox
Первая категория
программных инструментов пакета Fuzzy
Logic Toolbox содержит функции, которые могут
быть вызваны непосредственно путем набора
имени функции в командном окне (command line)
или из собственных пользовательских
приложений. Большинство из этих функций
представляют собой матлабовские функции
в виде m-файлов. В этом случае пользователь
может посмотреть запрограммированные
в этих функциях алгоритмы а также редактировать
и корректировать эти файлы. Ниже приведены
названия функций с кратким описанием
их назначения:
- addmf - добавление функции
принадлежности в FIS
- addrule - добавление правила
в FIS
- addvar - добавление переменной
в FIS
- anfis
- обучение FIS типа Сугэно (Sugeno type)
- convertfis - преобразование FIS-матрицы
(Fuzzy Logic Toolbox v.1) в FIS-структуру (Fuzzy Logic Toolbox
v.2)
- defuzz - дефаззификация нечеткого
множества
- discfis - дискретизация функций
принадлежности всех термов, входящих
в FIS
- dsigmf - функция принадлежности
в виде разности между двумя сигмоидными
функциями
- evalfis - выполнение нечеткого
логического вывода
- evalmf - вычисление значений
произвольной функции принадлежности
- evalmmf - расчет степеней принадлежностей
для нескольких функций принадлежностей
- fcm
- поиск кластеров по алгоритму fuzzy c-means
- findrow - нахождение строки
в матрице, совпадающей с входной строкой
- fstrvcat - конкатенация матриц
различного размера
- fuzarith - нечеткий калькулятор
- gauss2mf - двухсторонняя гауссовская
функция принадлежности
- gaussmf - гауссовская функция
принадлежности
- gbellmf - обобщенная колокообразная
функция принадлежности
- genfis1 - генерирование из
данных исходной FIS типа Сугэно без использования
кластеризации
- genfis2 - генерирование из данных
исходной FIS типа Сугэно с использованием
субтрактивной кластеризации
- genparam - генерирование исходных
параметров функций принадлежности для
обучения ANFIS (Adaptive-Network-based Fuzzy Inference System)
- gensurf - генерирование поверхности
“входы-выход”, соответствующей FIS
- getfis - получение свойств
FIS
- mam2sug - преобразование FIS
типа Мамдани в FIS типа Сугэно
- mf2mf - пересчет параметров
встроенных функций принадлежности различных
типов
- newfis - создание новой FIS
- parsrule - вставка в FIS правил,
заданных в виде предложений на естественном
языке
- pimf - пи-подобная функция
принадлежности
- plotfis - вывод основных параметров
FIS в виде графической схемы
- plotmf - вывод графиков функций
принадлежности термов одной переменной
- probor - вероятностная реализация
логической операции ИЛИ
- psigmf - произведение двух
сигмоидных функций принадлежности
- readfis - загрузка FIS из файла
- rmmf - удаление функции принадлежности
терма из FIS
- rmvar - удаление переменной
из FIS
- setfis - назначение свойств
FIS
- showfis - вывод на экран в текстовом
формате данных, составляющих FIS-структуру
- showrule - вывод базы знаний
FIS
- sigmf - сигмоидная функция
принадлежности
- smf - s-подобная функция
принадлежности
- subclust - оценка количества
кластеров в субтрактивной кластеризации
- sugmax - нахождения диапазона
изменения выходной переменной в FIS типа
Сугэно
- trapmf - трапециевидная функция
принадлежности
- trimf - треугольная функция
принадлежности
- writefis - сохранение FIS на диске
- zmf - z-подобная функция
принадлежности
- distfcm - расчет расстояния
по Евклиду
- initfcm - генерирование исходной
матрицы степеней принадлежности для
нечеткой c-means кластеризации
- isfis - проверка структуры
данных системы нечеткого логического
вывода
Примечание: функции
findrow и fstrvcat не связаны с нечеткими множествами
и нечеткой логикой - они используются
для выполнения алгоритмов обработки
информации общего характера, необходимых
для других функций Fuzzy Logic Toolbox.
Интерактивные
модули с графическим
пользовательским интерфейсом
Вторая категория
программных инструментов пакета Fuzzy
Logic Toolbox содержит диалоговые модули, которые
обеспечивают доступ к большинству функций
через графический интерфейс. Кроме того,
эти модули обеспечивают удобную среду
для проектирования, исследования и внедрения
систем на основе нечеткого логического
вывода. Для запуска интерактивных модулей
достаточно напечатать имя модуля в командной
строке. Ниже приведены названия модулей
с кратким описание их назначения:
- anfisedit - модуль для генерирования
из данных FIS типа Сугэно, ее обучения с
использованием ANFIS алгоритма и тестирования
- findcluster
- модуль кластеризации данных с использованием
алгоритма fuzzy c-means и алгоритма нечеткой
субтрактивной кластеризации
- fuzzy - основной редактор
FIS. Позволяет создавать и редактировать
FIS двух типов - Мамдани и Сугэно, обеспечивает
визуализацию процедуры нечеткого логического
вывода и поверхностей “входы-выход”.
Для этого модуль fuzzy вызывает следующие
GUI-модули: mfedit, ruleedit, ruleview и surfview
- mfedit
- редактор функций принадлежностей. Позволяет
выбирать тип функции принадлежности
и устанавливать ее параметры в символьном
и в интерактивном графическом (drag) режимах
- ruleedit
- редактор базы знаний
- ruleview - модуль визуализации
процедуры нечеткого логического вывода.
Обеспечивает вывод графической диаграммы
нечеткого вывода по каждому правилу,
включая процедуры фаззификации, агрегации
и дефаззификации. Позволяет вводить значения
входных переменных в символьном и в интерактивном
графическом (drag) режимах
Блоки
для пакета Simulink
Третья категория
программных инструментов пакета Fuzzy
Logic Toolbox содержит следующие модули, которые
обеспечивают интеграцию систем нечеткого
логического вывода с пакетом Simulink:
- fuzblock - модули контроллеров
на основе нечеткого логического вывода
- sffis - функция выполнения
нечеткого логического вывода, оптимизированная
под Simulink
Демонстрационные
примеры
Четвертая категория
программных инструментов пакета Fuzzy
Logic Toolbox содержит следующие демонстрационные
примеры:
- defuzzdm - дефаззификация различными
методами
- fcmdemo - 2D-кластеризация с
использование алгоритма fuzzy c-means
- fuzdemos - список всех демонстрационных
примеров Fuzzy Logic Toolbox
- gasdemo - применение алгоритма
ANFIS и субтрактивной кластеризации для
идентификации зависимости топливной
эффективности (расход топлива на одну
милю) от шести параметров автомобиля
- invkine - инверсная кинематика
робота-манипулятора
- irisfcm - применение алгоритма
fuzzy c-means для кластеризация ирисов
- juggler - жонглирование шариком
с помощью теннисной ракетки с демонстрацией
нечеткой базы знаний
- noisedm - адаптивное подавление
шумов
- slbb - управление системой
“шарик на коромысле” (необходим пакет
Simulink)
- slcp - управление системой
“перевернутый маятник” (необходим пакет
Simulink)
- sltank - управление уровнем
воды (необходим пакет Simulink)
- sltankrule - управление уровнем
воды с демонстрацией нечеткой базы знаний
(необходим пакет Simulink)
- sltbu - парковка грузовика
(необходим пакет Simulink)
- mgtsdemo - предсказание временного
ряда Маккея-Глэсса
- trips - построение модели
прогнозирования количества автомобильных
поездок
- shower - управление душем
- slcp1 - перемещение неустойчивой
системы "перевернутый маятник переменной
длины на тележке" в заданную точку
- slcpp1 - перемещение неустойчивой
системы "два перевернутых маятника
на тележке" в заданную точку
- slcpp1 - перемещение неустойчивой
системы "два перевернутых маятника
на тележке" в заданную точку
- mfdemo - вывод на экран окна,
содержащего графики всех запрограммированных
в Fuzzy Logic Toolbox типов функций принадлежностей
- drydemo - иллюстрирация применения
технологии ANFIS для идентификации нелинейных
динамических систем на примере процесса
нагрева воздуха в фене
Си-код
машины нечеткого
логического вывода
В Fuzzy
Logic Toolbox включены два файла fismain.c и fis.c,
содержащие исходные коды на языке Си
автономной машины нечеткого логического
вывода. Эти файлы позволяют загружать
FIS-файл и файл исходных данных, а также
выполнять нечеткий логический вывод.
Кроме того, машина нечеткого логического
вывода может быть встроена во внешние
модули.
Для создания исполняемого
кода машины нечеткого логического
вывода си-файлы должны быть откомпилированы.
При вызове программы fismain
необходимо указать два входных аргумента:
- файл данных,
для которых будет выполняться нечеткий
логический вывод;
- файл, содержащий
систему нечеткого логического вывода
(fis-файл).
В качестве примера,
рассмотрим выполнение нечеткого логического
вывода для системы, заданной файлом
mam21.fis . Сначала подготовим исходные данные
для нечеткого логического вывода используя
следующие команды MatLab:
[x, y] = meshgrid (-5:5, -5:5);
input_data = [x(:), y(:)]];
save fis_in input_data –ascii
Эти команды
записывают на диск ASCII-файл fis_in, содержащий
входные данные в виде матрицы размером
121х2. Каждая строка матрицы соответствует
одному входному вектору.
Теперь выполним
нечеткий логический вывод с помощью
программы fismain . В системе UNIX, например,
для этого необходимо напечатать:
%
fismain fis_in mam21.fis > fis_out
Примечание: Символ
% набирать не следует - это знак-приглашение
операционной системы UNIX. Синтаксис
fismain подобен mex-файлу, содержащему evalfis.m ,
за исключением того, что все матрицы и
структуры заменяются на имена файлов.
В результате выполнения
программы появится файл fis_out, содержащий
результаты нечеткого логического вывода.
Файл представляют собой матрицу размером
121х1, каждая строчка которой соответствует
результату нечеткого логического вывода
для одного входного вектора.
Для сравнения
результатов нечетких логических выводов,
выполняемых матлабовским mex-файлом
и программой fismain, выполним в среде MatLab
следующий сценарий:
fis = readfis (‘mam21’);
matlab_out = evalfis( input_data, fis);
load fis_out
max(max(abs(matlab_out – fis_out)))
В результате получим
значение максимального абсолютного
отклонения между результатами нечетких
логических выводов. Значение отклонения
имеет порядок 10 -13. Оно может
отличаться в зависимости аппаратных
средств – длины разрядной сетки.