MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Проектирование систем управления\Fuzzy Logic Toolbox

     Структура Fuzzy Logic Toolbox

Си-код машины нечеткого логического вывода

В 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. Оно может отличаться в зависимости аппаратных средств – длины разрядной сетки.

При использовании Си-кода машины нечеткого логического вывода необходимо помнить, что:

  • Си-код совместим с ANSI- и K&R- (Керниган и Ричи) стандартами на язык Си;
  • Си-код не поддерживает определяемые пользователем функции принадлежности и реализации логических операций И, ИЛИ, импликации и аггреатирования. Таким образом, доступными являются только запрограммированные реализации этих операций и 11 типовых функций принадлежности;
  • fismain.c содержит только одну функцию – main(). Она довольно плохо документирована, поэтому ее легкая адаптация для других приложений проблематична;
  • для добавления нового типа функций принадлежности или для изменения механизма вывода необходимо внести изменения в файл fis.c, который содержит все необходимые функции для выполнения нечеткого логического вывода;
  • для компьютеров Macintosh программа fismain по умолчанию будет использовать следующие файлы: fismain.in – для исходных данных; fismain.fis – для системы нечеткого логического вывода; fismain.out – для результатов нечеткого логического вывода. Имена этих файлов заданы в файле fismain.c; они могут быть изменены по необходимости.

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика