ОВИ_ЛР_2012
.pdf5. Внести следующие изменения в правила нечеткого вывода и объяснить, как внесенные изменения повлияют на работу всего устройства.
Следующие параметры являются общими для всех вариантов (табл. 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
