Тестові приклади та методичні вказівки до виконання лабораторної роботи

Лабораторний практикум

1. Розв¢язок задач нечіткої математики

Нечіткі висновки

3. Середовище NNTOOL і його використання для розв¢язку прикладних задач засобами нейромереж

4. Розв¢язок задач апроксимації, прогнозування, класифікації та розпізнавання образів.

1. Засоби MatLab для реалізації операцій нечіткої математики

Мета роботи

1. Опанувати техніку виконання операцій нечіткої математики в середовищі Матлаб.

2. Визначити місце і роль нечіткої математики в загальному контексті штучного інтелекту та інтелектуальних систем.

Порядок виконання роботи

1. Ознайомитись з теоретичним матеріалом з відповідного розділу конспекта лек-цій та методичними вказівками до виконання лабораторної роботи.

2. Підготувати задачу відповідно до варіанта до рівня, доступного для розв¢язання в обраному середовищі (визначити всі потрібні функції, скласти програму).

3. Виконати тестові приклади та визначити особливості власної задачі, зокрема, вплив функції належності та методу дефадзифікації на отриманий результат.

4. Виконати складену в п.20 задачу, дати інтерпретацію отриманим результатам.

Склад звіту

1. Постановка задачі.

2. Програмна документація, підготовлена відповідно до вимог держстандартів України або ЄСПД.

 

 

Тестові приклади та методичні вказівки до виконання лабораторної роботи

Визначення 1. Нечітке число (НЧ) або нечітка змінна (НЗ) на дійсній прямій – це набір, що характеризується функцією належності (ФН) . НЧ(НЗ) можуть бути уявленими у вигляді òmА(x)/x, дезнак ò вживається як знак об”єднання по всім x є R, mА(x) є[0,1]- ступінь належності x є R множині .

Визначення 2. Принцип узагальнення. Хай та - НЧ на дійсній прямій R. Тоді арифметичну операцію *f є (+, -, ´, /) можна представити так:

*f = òmin(mА(x), mB(у))/(x *f у)

Приклад: арифметичну операцію <приблизно 2> +f <приблизно 6> згідно до принципа узагальнення можна уявити у такий спосіб

0/0 1/0.5 2/1 3/0.5 4/0    
             
4/0 5/0.0.25 7/0.25 8/0.25 9/0.25   4/0.25
5/0 6/0.5 7/0.5 8/0.5 9/0   5/0.5
6/0 7/0.5 8/1 9/0.5 10/0   6/1
7/0 8/0.5 9/0.5 10/0.5 11/0   7/0.5
8/0 9/0 10/0 11/0 12/0   8/0

 

Результат = {6/0, 7/0.5, 8/1, 9/0.5, 10/0}. Графічне відтворення результату операції наведено нижче.

 

 

Рис. Функції належності, сформовані за допомогою

стандартних засобів MatLab – функія trimf.m

Виклик - TRIMF(X, PARAMS), PARAMS = [A B C] – триелементний вектор A <= B <= C.

Результат арифметичної операції приблизно 2 + приблизно 6, отриманий за допомогою засобів MatLab

Функція MatLab, призначена для реалізації операцій нечіткої математики, наведена нижче

function out = fuzarith(x, A, B, operator)

%FUZARITH Fuzzy arithmetics.

% C = FUZARITH(X, A, B, OPERATOR) returns a fuzzy set C as the result

% of applying OPERATOR on fuzzy sets A and B of universe X. A, B, and X

% should be vectors of the same dimension. OPERATOR should be one of the

% following strings: 'sum', 'sub', 'prod', and 'div'. The returned fuzzy

% set C is a column vector with the same length as A and B. Note that

% This function uses interval arithmetics and it assumes

% 1. A and B are convex fuzzy sets;

% 2. Membership grades of A and B outside of X are zero.

%

% Fuzzy addition could generates "divide by zero" message, but it will

% not affect the correctness of this function. (However, this may cause

% problems on machines without IEEE arithmetic, such as VAX and Cray.)

%

% For example:

x = (0:0.2:14);

A = trimf(x, [0 2 4 ]);

B = trimf(x, [4 6 8]);

C1 = fuzarith(x, A, B, 'sum');

subplot(2,2,1);

plot(x, A, x, B, x, C1);

title('fuzzy addition A+B');

Grid on

C2 = fuzarith(x, B, A, 'sub');

subplot(2,2,2);

plot(x, A, x, B, x, C2);

title('fuzzy subtraction A-B');

Grid on

C3 = fuzarith(x, A, B, 'prod');

subplot(2,2,3);

plot(x, A, x, B, x, C3);

title('fuzzy multiplication A*B');

Grid on

C4 = fuzarith(x, B, A, 'div');

subplot(2,2,4);

plot(x, A,x, B, x, C4);

title('fuzzy division A/B');

Grid on

%Roger Jang, 6-23-95

% Copyright (c) 1994-98 by The MathWorks, Inc.

% $Revision: 1.4 $

%Текст програми

x = x(:); A = A(:); B = B(:);

orig_x = x;

% augment x, A, and B for easy interpolation

A = [0; A; 0];

B = [0; B; 0];

x = [min(x)-(max(x)-min(x))/100; x; max(x)+(max(x)-min(x))/100];

tmp = find(diff(A)>0);

index1A = min(tmp):max(tmp)+1; % index for left shoulder

tmp = find(diff(A)<0);

index2A = min(tmp):max(tmp)+1; % index for right shoulder

tmp = find(diff(B)>0);

index1B = min(tmp):max(tmp)+1; % index for left shoulder

tmp = find(diff(B)<0);

index2B = min(tmp):max(tmp)+1; % index for right shoulder

height = linspace(0, 1, 101)';

index1 = find(height > max(A(index1A)));

index2 = find(height > max(A(index2A)));

index3 = find(height > max(B(index1B)));

index4 = find(height > max(B(index2B)));

height([index1; index2; index3; index4]) = [];

leftA = interp1(A(index1A), x(index1A), height, 'linear');

rightA = interp1(A(index2A), x(index2A), height, 'linear');

leftB = interp1(B(index1B), x(index1B), height, 'linear');

rightB = interp1(B(index2B), x(index2B), height, 'linear');

intervalA = [leftA rightA];

intervalB = [leftB rightB];


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: