Лаб_практикум_ОВИ_03_06_13
.pdfp2 =
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 |
2 |
2 |
|
3 |
4 |
3 |
|
2 |
a + 4 a x + 6 a x + 4 a x |
|
+ x + x - 3 x + 3 x + |
|||||||
4 |
|
3 |
|
|
|
2 |
|
2 |
|
+ cos(x) |
|
+ 4 cos(x) |
|
sin(x) + |
|
6 cos(x) |
|
sin(x) |
+ 4* |
34
*cos(x) sin(x) + sin(x) - 1
Символические полиномы разлагаются на множители функцией
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');
»a1=factor(a)
a1 = (2)*(5)*(7)*(19)*(29)*(71)
Обратите внимание, что обращение
» a2=factor(2738470)
a2 = 2 5 7 19 29 71
201
выводит в командное окно аналогичный результат, однако переменная 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 =
336 +(-532+(140+(105+(-56+7*x)*x)*x)*x)*x
Упрощение выражений общего вида производится при помощи функций simple, simplify, которые основаны на разных подходах. Функция simplify реализует мощный алгоритм упрощения выражений, содержащих как тригонометрические, экспоненциальную и логарифмическую функцию, так и специальные функции. Кроме того, функция simplify
способна преобразовывать выражения, содержащие символическое возведение в степень, суммирование и интегрирование. Алгоритм,
заложенный в simple, пытается получить выражение, которое
202
представляется меньшим числом символов, чем исходное,
последовательно применяя все функции упрощения ToolBox. При упрощении сложных выражений желательно применять обе функции,
поскольку любая из них может дать лучший результат, чем другая.
Рассмотрим следующий пример
»v=sym('(((2+sqrt(3))/(sqrt(2)+sqrt(2+sqrt(3))))+(2- sqrt(3))/(sqrt(2)-sqrt(2-sqrt(3))))^2')
v =
((3^(1/2) - 2)/(2^(1/2) - (2 - 3^(1/2))^(1/2)) - -(3^(1/2) + 2)/((3^(1/2) + 2)^(1/2) + 2^(1/2)))^2
»pretty(v)
/ |
|
|
1/2 |
|
1/2 |
|
|
\2 |
| |
|
3 |
- 2 |
|
3 |
+ 2 |
|
| |
| -------------------- |
|
|
|
- -------------------- |
| |
|||
| |
1/2 |
|
1/2 1/2 |
|
1/2 |
1/2 |
1/2 |
| |
\ 2 |
|
- (2 - 3 ) |
(3 |
+ 2) |
|
+ 2 |
/ |
|
»v2=simplify(v)
»pretty(v2)
/ |
|
|
1/2 |
|
1/2 |
|
|
\2 |
| |
|
3 |
- 2 |
|
3 |
+ 2 |
|
| |
| -------------------- |
|
|
|
- -------------------- |
| |
|||
| |
1/2 |
|
1/2 1/2 |
|
1/2 |
1/2 |
1/2 |
| |
\ 2 |
|
- (2 - 3 ) |
(3 |
+ 2) |
|
+ 2 |
/ |
|
» v1=simple(v)
v1 = 2
Таким образом, в этом примере лучший результат получен с помощью функции simple.
Функция subs позволяет произвести подстановку одного выражения в другое. В общем случае функция вызывается с тремя входными
203
аргументами: именем символической функции, переменной, подлежащей замене, и выражением, которое следует подставить в выражение. Функция 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 |
|
2 |
2 |
1/2 |
N |
- |
x |
cos(x) |
|
A |
sin(2 x) (B C) |
-------- |
|
|
+ ------- |
|
+ -- + |
----------------- |
|
|
2 |
2 |
|
2 |
A |
(N + |
x) |
C |
|
B |
|
|
»f=subs(f,'A','sin(x)');
»f=subs(f,'B','tan(x)');
»f=subs(f,'C','cot(x)');
»pretty(f)
2 |
2 |
2 |
2 |
1/2 |
N |
- x |
cos(x) |
sin(x) |
sin(2 x) (cot(x) tan(x)) |
-------- |
+ |
------- + |
------- |
+ --------------------------- |
|
2 |
2 |
2 |
sin(x) |
(N |
+ x) |
cot(x) |
tan(x) |
|
Упростим полученное выражение с помощью функции simple:
»f2=simple(f) f2 =
(2*sin(x)*N+sin(2*x)*N+sin(2*x)*x)/(N+x)/sin(x)
»pretty(f2)
2 sin(x) N + sin(2 x) N + sin(2 x) x
------------------------------------
(N + x) sin(x)
204
Подстановка вместо переменной ее числового значения приводит к
вычислению символической функции от значения аргумента, например
»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 |
|
2 |
2 |
1/2 |
N |
- |
x |
cos(x) |
|
A |
sin(2 x) (B C) |
-------- |
|
|
+ ------- |
|
+ -- + |
----------------- |
|
|
2 |
2 |
|
2 |
A |
(N + |
x) |
C |
|
B |
|
|
»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.1.3. Разложение в ряд Тейлора и определение символических выражений для сумм
Разложение математических функций в ряд Тейлора позволяет производить функция taylor, например:
»f=sym('sin(x)');
»tf=taylor(f);
»pretty(tf)
53
xx
--- - -- + x 120 6
205
По умолчанию выводится шесть членов ряда разложения в окрестности точки нуль. Число членов разложения можно задать во втором дополнительном параметре функции taylor. Третий параметр указывает, по какой из переменных следует производить разложение в том случае, когда символическая функция определена от нескольких переменных. Точка, в
окрестности которой проводится разложение, указывается в четвертом входном аргументе функции taylor, например
»syms x;
»f=sym('sin(x)');
»tf=taylor(f, 5, x, pi/4);
»pretty(tf)
|
1/2 / |
pi |
\3 |
1/2 / pi |
\2 |
|
2 |
| -- - x | |
2 |
| -- - x | |
|||
|
\ |
4 |
/ |
|
\ 4 |
/ |
2 |
|
|
\ 4 |
/ |
|
|
---------------- - ---------------- + |
||||||
|
|
12 |
|
|
4 |
|
|
|
|
1/2 / pi |
\ |
|
|
|
1/2 |
2 |
| -- - x | |
|
|
|
2 |
|
|
\ 4 |
/ |
|
|
+ ---- - |
--------------- |
|
|
|||
2 |
|
|
2 |
|
|
|
1/2 / pi |
\4 |
2| -- - x | \ 4 /
---------------- + 48
Нахождение символических выражений для сумм, в том числе и бесконечных, позволяет осуществить функция symsum. Обращение к symsum в общем случае предполагает задание четырех аргументов:
слагаемого в символической форме, зависящего от индекса, самого индекса и верхнего и нижнего предела суммы. Если в слагаемые входит факториал, то следует применить к выражению для факториала функцию sym. Найдите значение бесконечной суммы, являющейся разложением в ряд функции sin(x)
|
x |
2k 1 |
||
s ( 1)k |
|
|
||
|
|
|
||
(2k 1)! |
||||
k 0 |
||||
206
»syms k x
»s=symsum((-1)^(k)*x^(2*k+1)/sym('(2*k+1)!'), k,0,inf)
s =
sin(x)
11.1.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 . |
x0 |
x0 |
»syms x
»limit((10+x)^(1/x),x,0, 'left') ans = 0
»limit((10+x)^(1/x),x,0, 'right') ans = inf
207
Обратите внимание, что обычный предел в точке нуль не
существует:
» limit((10+x)^(1/x),x,0)
ans =
NaN
Определение производной через предел позволяет применять limit
для дифференцирования функций. Например, найдем первую производную функции arctg(x) , используя равенство
d |
arctg(x) lim |
arctg(x h) arctg(x) |
|
dx |
h |
||
h0 |
» syms h x
» L=limit((atan(x+h)-atan(x))/h, h, 0);
» pretty(L)
1
------
2
1 + x
Вычисление производных любого порядка проще производить при помощи функции diff. Символическая запись функции указывается в первом входном аргументе, переменная, по которой производится дифференцирование во втором, а порядок производной в третьем.
Применим diff для вычисления первой и второй производных функции arctg (x) :
»P=diff('atan(x)',x,1);
»pretty(P)
208
1
------
2
x + 1
»P=diff('atan(x)',x,2);
»pretty(P)
2x
----------
2 |
2 |
(x |
+ 1) |
Символическое интегрирование является значительно более сложной задачей, чем дифференцирование. ToolBox Symbolic Math позволяет работать как с неопределенными интегралами, так и с определенными.
Неопределенные интегралы от символических функций вычисляются при помощи функции int. В качестве входных аргументов указываются символическая функция и переменная, по которой производится интегрирование, например, пусть необходимо вычислить неопределенный интеграл f exp(2x)dx , тогда получим:
»syms x
»f=sym('exp(2*x)');
»I=int(f,x)
»pretty(I)
1/2 exp(2 x)
Разумеется, что функция іnt не позволяет получить неопределенный интеграл от произвольной функции.
Для нахождения определенного интеграла в символическом виде следует задать нижний и верхний пределы интегрирования,
соответственно, в третьем и четвертом аргументах int
209
»syms x a b
»f=sym('exp(2*x)');
»I=int(f,x,a,b);
»pretty(I)
1/2 exp(2 b) - 1/2 exp(2 a)
Двойные интегралы вычисляются двукратным применением функции int. Пусть, например, необходимо вычислить интеграл
d b
ysin( x)dxdy , тогда для его определения необходимо задать
c a
символические переменные a, b, c, d, x, y, подынтегральную функцию f от x
и y и проинтегрировать сначала по одной переменной, а затем по другой
»syms a b c d x y
»f=sym('y*sin(x)');
»Ix=int(f,x,a,b) Ix =
-y*cos(b)+y*cos(a)
»Iy=int(Ix,y,c,d)
Iy =
1/2*(-cos(b)+cos(a))*(d^2-c^2)
» pretty(Iy)
2 |
2 |
(c |
- d ) (cos(a) - cos(b)) |
- ---------------------------
2
Аналогичным образом вычисляются любые кратные интегралы в символическом виде.
210
