Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОВИ_ЛР_2012

.pdf
Скачиваний:
105
Добавлен:
02.02.2015
Размер:
4.11 Mб
Скачать

5. Внести следующие изменения в правила нечеткого вывода и объяснить, как внесенные изменения повлияют на работу всего устройства.

Следующие параметры являются общими для всех вариантов (табл. 10.2).

Таблица 10.2. Параметры функции принадлежности для переменной valve и ratre

Название

Название

 

входных

функции

Тип функции принадлежности

переменных

принадлежности

 

 

Close_fast

Trimf [-1; -0,9; -0,8]

 

Close_low

Trimf [-0,6; -0,5; -0,4]

valve

No_change

Trimf [-0,1; 0; 0,1]

 

Open_low

Trimf [0,2; 0,3; 0,4]

 

Open_fast

Trimf [0,8; 0,9; 1]

rate

Negative

Gaussmf [0,03; -0.1]

 

None

Gaussmf [0,03; 0]

 

Positive

Gaussmf [0,03; 0.1]

Индивидуальные варианты заданий для функций принадлежности переменной level приводятся в табл. 10.3. В ней используются следующие обозначения:

polymf (x, A)

exp(a

0

... a

n

xn )

;

 

 

 

 

 

 

1 exp(a

0

... a

n

xn )

 

 

 

 

 

 

 

 

A a0 , a1,...,an .

Таблица 10.3. Параметры функции принадлежности для переменной

level

High

Okay

Low

 

polymf (x,A)

polymf (x,A)

polymf (x,A)

 

 

 

 

1

2

3

4

1

[-3,5354; -2,925; 4,29]

[1,604; -1,723; -9,023]

[-2,908; 2,732; 3,2356]

2

[-2,591; -2,978; 3,049]

[2,284; 0,6978; -8,499]

[-3,724; 3,8386; 4,227]

3

[-3,252; -3,35; 3,8291]

[2,104; 0,09667; -9,36]

[-3,238; 1,977; 3,8233]

201

1

2

3

4

4

[-4,149; -2,777; 5,561]

[1,638; 0,4058; -8,782]

[-2,559; 2,687; 2,4026]

5

[-3,553; -3,939; 5,266]

[1,443; -0,218; -6,373]

[-3,323; 3,4241; 2,833]

6

[-2,916; -2,883; 2,781]

[1,736; -0,234; -6,048]

[-2,696; 3,001; 2,9796]

7

[-2,241; -2,435; 2,177]

[2,094; 0,2477; -9,948]

[-1,733; 2,522; 2,3055]

8

[-3,9789; -2,825; 4,47]

[1,941; -0,189; -8,253]

[-2,441; 2,131; 2,3544]

9

[-2,503; -2,979; 2,271]

[1,968; 1,24; -10,8512]

[-2,441; 2,131; 2,3543]

10

[-2,526; -2,787; 2,974]

[2,444; 0,9028; -15,06]

[-3,326; 3,185; 4,0171]

11

[-3,691; -3,016; 3,816]

[1,038; 0,8638; -8,122]

[-2,742; 2,483; 3,4183]

12

[-2,952; -3,167; 3,316]

[1,706; -1,023; -6,489]

[-2,764; 2,392; 2,5585]

13

[-3,124; -3,482; 3,972]

[0,941; -0,3953; -5,63]

[-3,134; 2,372; 3,4613]

14

[-3,662; -3,621; 5,183]

[1,869; -0,291; -8,634]

[-2,95; 3,132; 3,24231]

15

[-3,113; -2,659; 2,983]

[2,038; -2,138; -11,24]

[-3,407; 2,763; 3,8331]

6. Оформить отчет по лабораторной работе.

202

ЛАБОРАТОРНАЯ РАБОТА 11

СИМВОЛИЧЕСКИЕ ВЫЧИСЛЕНИЯ В ПАКЕТЕ MATLAB

11.1. Цель лабораторной работы

Получение и закрепление знаний, формирование практических

навыков работы с пакетом MATLAB при вычислениях в символическом

виде.

11.2.Краткие сведения из теории

11.2.1.Символические переменные и функции

Всостав MATLAB входит ToolBox Symbolic Math, предназначенный для вычислений в символическом виде. Преобразование выражений,

определение аналитических решений задач линейной алгебры,

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

Символические переменные и функции являются объектами класса sym object, в отличие от числовых переменных, которые содержатся в массивах double array. Символический объект создается при помощи функции syms.

Команда

» syms x a b

создает три символические переменные x, a, b. Конструирование символических функций от переменных класса sym object производится с

203

помощью обычных арифметических операций и обозначений для

встроенных математических функций, например:

» f=(sin(x)+a)^2*(cos(x)+b)^2/sqrt(abs(a+b))

f=

(sin(x)+a)^2*(cos(x)+b)^2/abs(a+b)^(1/2)

Запись формулы в одну строку не всегда удобна, более естественный

вид в виде дроби позволяет получить функция pretty:

» pretty(f)

2 2

(sin(x) + a) (cos(x) + b)

---------------------------

1/2 | a + b |

Определенная функция f также является символической, в чем не трудно убедиться при помощи команды whos.

Имеющиеся символические переменные и функции позволяют образовывать новые символические выражения:

»syms y

»g=(exp(-y)+1)/exp(y) g =

(exp(-y)+1)/exp(y)

»h=f*g h =

(sin(x)+a)^2*(cos(x)+b)^2/abs(a+b)^(1/2)*(exp(-y) +1)/exp(y)

»pretty(h)

204

2 2

(sin(x) + a) (cos(x) + b) (exp(-y) + 1)

-----------------------------------------

1/2

| a + b | exp(y)

Символическую функцию можно создать без предварительного объявления переменных при помощи функции sym, входным аргументом которой является строка с выражением, заключенным в апострофы:

»z=sym('c^2/(d+1)') z =

c^2/(d+1)

»pretty(z)

2 c

-----

d + 1

Замечание 1.

Функция sym может быть использована для объявления символических переменных. Команда syms a b с эквивалентна последовательности команд a=sym('a'), b=sym('b'), с=sym('c'):

»syms a b c

»whos a b c

Name Size

Bytes Class

a1x1 126 sym object

b1x1 126 sym object

c1x1 126 sym object

Grand total is 6 elements using 378 bytes

» a1=sym('a1'), b1=sym('b1'), c1=sym('c1') a1 =

205

a1

 

 

 

b1 =

 

 

 

b1

 

 

 

c1 =

 

 

 

c1

 

 

 

» whos

a1 b1 c1

 

 

Name

Size

Bytes Class

a1

1x1

128

sym object

b1

1x1

128

sym object

c1

1x1

128

sym object

Grand total is 9 elements using 384 bytes

При работе в области комплексных чисел следует указать, что определяемые переменные являются в общем случае комплексными.

Комплексные символические переменные задаются командой syms с

опцией unreal. Опция real означает, что переменные трактуются как вещественные.

Рассмотрим пример, где результат символических вычислений зависит от того, какие символические переменные используются вещественные или комплексные. Объявим две вещественные переменные a и b, и образуем комплексное число, считая, что a является действительной частью, а b мнимой, затем найдем сопряженное к нему число при помощи conj:

»syms a b real

»p=conj(a+i*b) p =

a-i*b

206

Произведем аналогичные действия, предварительно объявив a и b

комплексными символьными переменными:

»syms a b unreal

»q=conj(a+i*b) q =

conj(a+i*b)

Таким образом, в общем случае p q.

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

которым применимы матричные и поэлементные операции, а также встроенные функции. Рассмотрим пример ввода и умножения двух символических матриц:

»syms a b c d e f g h

»A=[a b;c d]

A =

[ a, b] [ c, d]

»B=[e f; g h] B =

[ e, f] [ g, h]

»C=A*B

C =

[ a*e+b*g, a*f+b*h] [ c*e+d*g, c*f+d*h]

207

Функция sym позволяет преобразовывать значения числовых переменных в символические. Введите числовую матрицу A и

преобразуйте ее в символическую матрицу B:

» A=[1.3 -2.1 4.9; 6.9 3.7 8.5] A =

1.3000 -2.1000 4.9000

6.9000 3.7000 8.5000

» B=sym(A)

B =

[ 13/10, -21/10, 49/10] [ 69/10, 37/10, 17/2]

При переходе от числовых выражений к символическим используется запись числа в виде рациональной дроби. Использование рациональных дробей при выполнении символических вычислений позволяет всегда получать точный результат, не содержащий погрешности округления. Убедиться в этом можно на следующем простом примере.

Установите формат long для отображения максимально возможного числа значащих цифр для значений числовых переменных и найдите сумму чисел 1010 и 10 10 .

»format long

»1.0e10+1.0e-10 ans =

1.000000000000000e+010

Теперь преобразуйте числа в символические переменные и снова вычислите сумму:

208

»large=sym(1.0e10);

»small=sym(1.0e-10);

»s=large+small

s =

100000000000000000001/10000000000

Рациональная дробь является точным значением суммы. Понятно,

что символические вычисления требуют больших временных затрат по сравнению с обычными.

Вычисление символических выражений производится с помощью функции vpa, например:

»c=sym('sqrt(2)');

»cn=vpa(c)

cn =

1.4142135623730950488016887242097

По умолчанию сохраняется тридцать две значащие цифры. Второй входной параметр функции vpa позволяет задавать вычисления с заданным числом разрядов, например, с 45 разрядами:

» cn=vpa(c,45)

cn =

1.41421356237309504880168872420969807856967187

Выходное значение функции vpa является символической

переменной, но его можно использовать в обычных вычислениях,

например:

» cn=vpa(c,45)

209

cn =

1.41421356237309504880168872420969807856967187

»cn+2 ans =

3.41421356237309504880168872420969807856967187

»cn*2

ans =

2.82842712474619009760337744841939615713934375

Результат арифметических операций в этих случаях получается в символических переменных. Для перевода символических переменных в числовые, т.е. переменные типа double array, используется функция double:

» cnd=double(cn)

cnd =

1.41421356237310

Визуализация символических функций одной переменной осуществляется при помощи ezplot. Самый простой вариант использования ezplot состоит в указании символической функции в качестве единственного входного аргумента, при этом в графическое окно выводится график функции на отрезке [2 , 2]. Например:

»f=sym('x*sin(x^2)^3');

»ezplot(f)

Обратите внимание (рис. 11.1), что автоматически создается соответствующий заголовок. Вторым аргументом может быть задан вектор с границами отрезка, на котором требуется построить график функции:

» ezplot(f,[-9 7])

210