ОВИ_ЛР_2012
.pdf
Рис.11.1. График символической функции
Функция ezplot имеет некоторые отличия от своего аналога функции fplot, применяемой к числовым функциям. В частности,
возможно указание символической функции, зависящей от двух аргументов:
»z=sym('x^2+a^3');
»ezplot(z,[-2 1 -3 4])
Пределы изменения аргументов определяются их названиями.
Первые два числа соответствуют первому по алфавиту аргументу, а
последние второму. В рассматриваемом примере a изменяется от 2 до 1,
а x изменяется от 3 до 4. В графическое окно выводится линия,
удовлетворяющая выражению x^2+a^3=0.
211
ToolBox Symbolic Math предоставляет пользователю целый набор средств для визуализации символических функций [1, 2].
11.2.2. Упрощение и преобразование выражений
Сложные алгебраические и тригонометрические выражения часто могут быть приведены к эквивалентным путем упрощения. ToolBox Symbolic Math имеет целый ряд сервисных функций, предназначенных для различных преобразований символических выражений. Операции с полиномами реализуют четыре функции: collect, expand, factor, horner.
Вычисление коэффициентов при степенях независимой переменной производится с помощью функции collect. Введите полином и отобразите его в командном окне при помощи pretty:
»p=sym('(x+a)^4+(x-1)^3-(x-a)^2-a*x+x-3');
»pretty(p)
4 |
3 |
2 |
(x + |
a) + (x - 1) - (x - a) - a x + x - 3 |
|
Затем примените к полиному функцию collect:
»pc=collect(p);
»pretty(pc)
4 |
3 |
2 |
2 |
3 |
4 |
2 |
x + (1 + 4a)x + (-4 + 6a )x + (4 + a + 4a )x + a - 4 – a
По умолчанию в качестве независимой переменной в полиноме выбирается x, однако можно считать, что a независимая переменная, а x
входит в коэффициенты полинома, зависящего от a. Второй аргумент функции collect предназначен для указания переменной, при степенях которой следует найти коэффициенты:
212
»pca=collect(p,'a');
»pretty(pca)
4 |
3 |
2 |
2 |
3 |
4 |
3 |
2 |
a + 4xa + (-1 + 6x )a + (4x + x)a + x + (x -1)- x - 3 + x
Функция expand представляет полином суммой одночленов:
»pe=expand(p);
»pretty(pe)
4 |
3 |
2 |
2 |
3 |
4 |
3 |
2 |
2 |
|
x + 4ax + 6x a + 4xa + a + x - 4x + 4x - 4 + ax - a |
|||||||||
|
Аргументом expand может быть не только полином, но и |
||||||||
символическое |
|
выражение, |
|
содержащее |
тригонометрические, |
||||
экспоненциальные и логарифмические функции:
»pk=sym('(sin(x)+cos(x))^3+(sin(x)+cos(x))^2+
(sin(x)+cos(x))') pk =
(sin(x)+cos(x))^3+(sin(x)+cos(x))^2+(sin(x)+cos(x
))
»pk2=expand(pk);
»pretty(pk2)
3 2 2 3
sin(x) + 3sin(x) cos(x) + 3sin(x)cos(x) + cos(x) + sin(x)+
22
+2sin(x)cos(x) + cos(x) + sin(x) + cos(x)
Аргументами функций expand, collect может быть не только отдельно полином или тригонометрические, или экспоненциальные, или логарифмические функции, но и их сочетания, например:
213
»p=sym('(x+a)^4+(x-1)^3+(sin(x)+cos(x))^4');
»pretty(p)
4 |
3 |
4 |
(x + |
a) + (x - 1) + (sin(x) + cos(x)) |
|
»p1=collect(p) p1 =
x^4+(1+4*a)*x^3+(-3+6*a^2)*x^2+(3+4*a^3)*x+a^4- 1+(sin(x)+cos(x))^4
»p2=expand(p1)
p2 =
x^4+x^3+4*x^3*a-3*x^2+6*x^2*a^2+3*x+4*x*a^3+a^4-
1+sin(x)^4+4*sin(x)^3*cos(x)+6*sin(x)^2*cos(x)^2+4*si
n(x)*cos(x)^3+cos(x)^4
» pretty(p2)
4 |
3 |
3 |
2 |
2 |
2 |
3 |
4 |
|
4 |
x + x + 4x a - 3x |
+ 6x a + 3x + 4xa + a - 1 + sin(x)+ |
||||||||
|
|
3 |
|
2 |
2 |
|
|
3 |
4 |
+ 4sin(x) cos(x) + |
6sin(x) cos(x) + 4sin(x)cos(x) + cos(x) |
||||||||
|
Символические полиномы разлагаются на множители функцией |
||||||||
factor, |
если |
|
получающиеся |
|
множители имеют рациональные |
||||
коэффициенты:
»p=sym('7*x^5-56*x^4+105*x^3+140*x^2-532*x+336');
»p1=factor(p)
p1 =
7*(x-2)*(x-3)*(x-4)*(x+2)*(x-1)
Функция factor может также представлять числа в виде произведения
простых чисел
»syms a
»a=sym('2738470');
214
» a1=factor(a) a1 =
(2)*(5)*(7)*(19)*(29)*(71)
Обратите внимание, что обращение
» a2=factor(2738470) a2 =
2 5 7 19 29 71
выводит в командное окно аналогичный результат, однако переменная a1
является символьной, а переменная a2 вещественной, в чем несложно убедиться при помощи whos:
» whos a1 a2 |
|
|
Name |
Size |
Bytes Class |
a1 |
1x1 |
176 sym object |
a2 |
1x6 |
48 double array |
Grand total is 33 elements using 224 bytes
MATLAB является объектно-ориентированной средой, числовые переменные double array образуют класс со своей функцией factor, а
функция factor для символических переменных реализована в другой файл-
функции. MATLAB определяет по типу аргумента соответствующий класс,
а затем и необходимую функцию.
Функция horner позволяет представить полином по схеме Горнера
(Horner polynomial representation):
» horner(p1)
ans =
215
336+(-532+(140+(105+(-56+7*x)*x)*x)*x)*x
Упрощение выражений общего вида производится при помощи функций simple, simplify, которые основаны на разных подходах. Функция simplify реализует мощный алгоритм упрощения выражений, содержащих как тригонометрические, экспоненциальную и логарифмическую функцию, так и специальные функции. Кроме того, функция simplify
способна преобразовывать выражения, содержащие символическое возведение в степень, суммирование и интегрирование. Алгоритм,
заложенный в simple, пытается получить выражение, которое представляется меньшим числом символов, чем исходное,
последовательно применяя все функции упрощения ToolBox. При упрощении сложных выражений желательно применять обе функции,
поскольку любая из них может дать лучший результат, чем другая.
Рассмотрим следующий пример:
»v=sym('(((2+sqrt(3))/(sqrt(2)+sqrt(2+sqrt(3))))+(2- sqrt(3))/(sqrt(2)-sqrt(2-sqrt(3))))^2')
»pretty(v)
/ |
1/2 |
1/2 |
\2 |
|
| |
2 + |
3 |
2 - 3 |
| |
|------------------- |
|
|
+ ------------------- |
| |
| |
1/2 |
1/2 |
1/2 |
1/2| |
\3/2 2 |
+ 1/2 6 |
3/2 2 |
- 1/2 6 / |
|
»v2=simplify(v)
»pretty(v2)
72
------------------------
1/2 |
2 |
1/2 |
2 |
|
(3 + 3 |
|
) (-3 + |
3 |
) |
» v1=simple(v)
v1 =
2
216
Таким образом, в этом примере лучший результат получен с помощью функции simple.
Функция subs позволяет произвести подстановку одного выражения в другое. В общем случае функция вызывается с тремя входными аргументами: именем символической функции, переменной подлежащей замене, и выражением, которое следует подставить в выражение. Функция subs, в частности, облегчает ввод громоздких символических выражений.
Например:
»f=sym('((N^2-x^2)/(N+x)^2)+(sin(2*x)/A)*(sqrt(B*C)) +(A/B)^2+(cos(x)/C)^2')
»pretty(f)
2 |
2 |
|
1/2 |
2 |
2 |
|
N - x |
sin(2 x) (B C) |
A |
cos(x) |
|||
-------- |
|
+ |
----------------- |
|
|
+ ---- + ------- |
2 |
A |
2 |
2 |
|
|
|
(N |
+ x) |
|
|
B |
C |
|
»f=subs(f,'A','sin(x)');
»f=subs(f,'B','tan(x)');
»f=subs(f,'C','cot(x)');
»pretty(f)
2 |
2 |
1/2 |
2 |
2 |
|
N |
- x |
sin(2 x) (tan(x) cot(x)) |
sin(x) |
cos(x) |
|
-------- |
|
+ -------------------------- |
|
+ ------- |
+ ------- |
|
2 |
sin(x) |
2 |
2 |
|
(N |
+ x) |
|
tan(x) cot(x) |
|
|
Упростим полученное выражение с помощью функции simple:
» f2=simple(f) f2 =
(2*sin(x)*N+sin(2*x)*N+sin(2*x)*x)/(N+x)/sin(x)
217
» pretty(f2)
2 sin(x) N + sin(2 x) N + sin(2 x) x
------------------------------------
(N + x) sin(x)
Подстановка вместо переменной ее численного значения приводит к
вычислению символической функции от значения аргумента, например:
»f=sym('((N^2-x^2)/(N+x)^2)+(sin(2*x)/A)*(sqrt(B*C)) +(A/B)^2+(cos(x)/C)^2')
»pretty(f)
2 |
2 |
|
1/2 |
2 |
2 |
|
N - x sin(2 x) (B C) |
A cos(x) |
|||
|
-------- |
|
+ ----------------- |
|
+ ---- + ------- |
|
2 |
A |
2 |
2 |
|
|
(N + x) |
|
B |
C |
|
»q=subs(f,'x',0) q =
1+A^2/B^2+1/C^2
»f3=sym('sin(x)+exp(x)+tan(x)');
»q1=subs(f3,'x',0)
q1 =
1
11.2.3. Разложение в ряд Тейлора и определение символических
выражений для сумм
Разложение математических функций в ряд Тейлора позволяет производить функция taylor, например:
218
»f=sym('sin(x)');
»tf=taylor(f);
»pretty(tf)
35
x- 1/6 x + 1/120 x
По умолчанию выводится шесть членов ряда разложения в окрестности точки ноль. Число членов разложения можно задать во втором дополнительном параметре функции taylor. Третий параметр указывает, по какой из переменных следует производить разложение, в том случае, когда символическая функция определена от нескольких переменных. Точка, в
окрестности которой проводится разложение, указывается в четвертом входном аргументе функции taylor, например:
»syms x;
»f=sym('sin(x)');
»tf=taylor(f, 5, x, pi/4);
»pretty(tf)
1/2 |
|
1/2 |
|
|
1/2 |
2 |
|
|
1/2 2 |
+ 1/2 2 |
(x |
- 1/4 |
pi) - 1/4 |
2 (x - 1/4 pi) |
|||
1/2 |
|
|
|
3 |
1/2 |
4 |
|
|
- 1/12 2 |
(x |
- |
1/4 |
pi) + |
1/48 2 |
(x - 1/4 pi) |
||
Нахождение символических выражений для сумм, в том числе и бесконечных, позволяет осуществить функция symsum. Обращение к symsum в общем случае предполагает задание четырех аргументов:
слагаемого в символической форме, зависящего от индекса, самого индекса и верхнего и нижнего предела суммы. Если в слагаемые входит факториал, то следует применить к выражению для факториала функцию sym. Найдите значение бесконечной суммы, являющейся разложением в ряд функции sin(x)
219
|
x2k 1 |
|
s ( 1)k |
|
. |
|
||
k 0 |
(2k 1)! |
|
»syms k x
»s=symsum((-1)^(k)*x^(2*k+1)/sym('(2*k+1)!'), k,0,inf)
s =
sin(x)
11.2.4. Определение пределов, дифференцирование и интегрирование
Функция limit находит предел функции в некоторой точке, включая плюс или минус бесконечность. Первым входным аргументом limit
является символическое выражение, вторым переменная, а третьим точка, в которой определяется предел. Пусть, например, требуется вичислить
lim (1 1 )ax.
x x
»syms a x
»limit((1+1/x)^(x*a),x,Inf) ans =
exp(a)
Функция limit позволяет находить односторонние пределы. Для нахождения предела справа следует указать четвертый дополнительный аргумент 'right', а слева 'left'. Найдите решение следующих двух задач
lim (10 x)1/ x ; |
lim (10 x)1/ x . |
x 0 |
x 0 |
220
