
Начальные сведения о MATLAB
..pdf
109
ans =
.28051
5.11 Функция разложения выражения в ряд Тейлора – taylor
В задачах аппроксимации и приближения функций f(x) важное место занимает их разложение в ряд Тейлора в окрестности точки a:
∞ |
|
|
f |
(n) |
(a) |
|
|
|
|||
f(x) = (x-a)n |
|
n! . |
|||
n=0 |
|
|
|
|
|
Частным случаем этого ряда при a=0 является ряд |
|||||
Маклорена: |
|
|
|
|
|
f(x) = xn f |
(n) |
(0). |
|
||
∞ |
|
|
|
|
|
n!
n=0
Для получения разложения аналитической функции f в ряд Тейлора (и Маклорена) служит функция taylor:
taylor(f) – возвращает шесть членов ряда Маклорена (ряд Тейлора в точке х=0). В общем случае, когда небходимо задать число членов разложения n, и точку a, относительно которой ищется разложение, используется функция taylor(f,n,x,a).
Примеры:
>>syms x
>>taylor(cos(x)) ans = 1-1/2*x^2+1/24*x^4
>>taylor(cos(x),5,x,2) ans =
cos(2)-sin(2)*(x-2)-1/2*cos(2)*(x-2)^2+1/6*sin(2)*(x-
2)^3+1/24*cos(2)*(x-2)^4
Получим разложение в степенной ряд по степеням x «функции ошибок», определяемой равенством
Erf(x)= 2 x e-t²dt
π 0

110
и не выражающейся в конечном виде через элементарные функции.
Решение: >> syms x t
>> Pi=sym('pi');
>> taylor(2/sqrt(Pi)*int(exp(-t^2),t,0,x)) ans =
2/pi^(1/2)*x-2/3/pi^(1/2)*x^3+1/5/pi^(1/2)*x^5 >> [m n]=simple(ans)
m = |
|
1/15*x*(30-10*x^2+3*x^4)/pi^(1/2) |
|
>> pretty(m) |
|
2 |
4 |
x (30 - 10 x + 3 x |
) |
1/15 ------------------------- |
|
1/2 |
|
pi |
|
Команда taylortool приводит к появлению окна приложения, изображенного на рис.5.1.
Рис.5.1.

111
Пользователь может вводить формулы различных функций в строке f(x)= и
исследовать приближение функции на произвольном интервале отрезком ряда Тейлора требуемой длины.
7.12 Функция вычисления сумм рядов – symsum
В математическом анализе часто приходится вычислять сумму значений функции f(i) при условии, что аргумент i этой функции принимает целочисленные значения, изменяющееся в замкнутом интервале [a;b], т.е.
b
Sum = f(i).
i=a
Такие суммы принято называть конечными. При b = ∞ можно говорить о бесконечной сумме (в смысле бесконечного числа членов ряда).
Для аналитического вычисления суммы ряда служит функция
b
symsum(f, i, a, b), возвращающая сумму ряда f(i).
i=a
Справка по функции – doc symsum.
Рассмотрим применение этой функции на примерах. Найти сумму числового ряда:
∞
n12..
n=1
Решение:
>>syms n
>>symsum(1/n^2,n,1,inf) ans =
1/6*pi^2
Таким образом,

112
∞
1 π2
n2 = 6 .
n=1
Найти сумму числового ряда:
∞
(-1)n n .
n=1
Решение:
>>syms n
>>symsum((-1)^n/n,n,1,inf) ans =
-log(2)
В результате получили
∞
(-1)n
n = -ln2.
n=1
Найти сумму числового ряда:
∞
n13..
n=1
Решение:
>>syms n
>>symsum(1/n^3,n,1,inf) ans =
zeta(3)
>>vpa(ans,8)
ans = 1.2020569
Результат выражается через дзета – функцию Римана (справка по этой функции – doc zeta) и равен

113
∞
n13 = zeta(3) ≈ 1,2020569.
n=1
Найти сумму числового ряда:
∞
cosnπ n2 .
n=1
Решение:
>>syms s n
>>symsum(cos(n*pi)/n^2,n,1,inf) ans =
-hypergeom([1, 1, 1],[2, 2],-1)
>>vpa(ans,8)
ans = -.82246703
Результат выражается через гипергеометрическую функцию (справка по этой функции – doc hypergeom) и равен
∞
cosnπ
n2 = –hypergeom([1, 1, 1], [2, 2], –1) ≈ –
n=1
0,82246703.
Если в слагаемые входит знак факториала, то в этом случае следует использовать функцию sym.
Найдем сумму функционального ряда:
∞
xk.
k!
k=0
Решение:
>>syms x k
>>symsum(x^k/sym('k!'), k, 0,inf) ans =
exp(x)
114
Таким образом,
∞
xk =ex. k!
k=0
Найдем сумму числового ряда:
∞
cosn n2 .
n=1
Решение:
>>syms n
>>symsum(cos(n)/n^2,n,1,inf) ans =
sum(cos(n)/n^2,n = 1 .. inf)
>>vpa(ans,8)
ans =
sum(cos(n)/n^2,n = 1 .. inf)
Результат свидетельствует о том, что среда MATLAB не нашла сумму ряда.
Найдем конечную сумму:
10
k2.
k=0
Решение:
>>syms k
>>symsum(k^2,k,0,10) ans =
385
Сумма равна 385.
Найдем конечную сумму с переменным верхним
пределом n:
n
k2.
k=0
Решение:
115
>> syms k n
>> symsum(k^2,k,0,n) ans =
1/3*(n+1)^3-1/2*(n+1)^2+1/6*n+1/6 >> pretty(ans)
|
3 |
2 |
|
|
|
1/3 (n + 1) - 1/2 (n + 1) |
+ 1/6 n + 1/6 |
Найдем конечную сумму с переменным верхним |
|||
пределом n: |
|
|
|
n |
|
|
|
cos |
kπ |
|
|
2 |
. |
|
k=1
Решение:
>>syms k n
>>symsum(cos(k*pi/2),k,1,n) ans =
1/2*sin(1/2*(n+1)*pi)-1/2*cos(1/2*(n+1)*pi)-1/2 simple(ans)
ans = 1/2*cos(1/2*n*pi)+1/2*sin(1/2*n*pi)-1/2
Для аналитического вычисления произведения ряда
служит функция product. Справка по функции – mhelp product.
5.13 Решение алгебраических уравнений и систем– функция solve
Для решения систем алгебраических уравнений и одиночных уравнений служит функция solve:
● solve(expr1, expr2,..., exprN, var1, var2,..., varN) –
возвращает значения переменных varI, при которых соблюдаются равенства, заданные выражениями exprI. Если в выражениях не используются знаки равенства, то полагается,
что exprI=0.
Результат может быть возвращен в следующих формах:

116
●для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек;
●при одинаковом числе уравнений и переменных решение возвращается в упорядоченном по именам переменных виде;
Функция solve позволяет найти не только вещественные, но и комплексные решения систем алгебраических уравнений и одиночных уравнений. Справка по функции – doc solve.
Рассмотрим возможности этой функции на примерах. Решим уравнение x3-1=0.
Решение:
>> syms x,y=x^3-1;S=solve(y) S =
[ |
1] |
[ -1/2+1/2*i*3^(1/2)] [ -1/2-1/2*i*3^(1/2)]
В результате получены три разных значения корня
|
|
|
|
|
x1=1, x2=-1+i |
3, x3=-1-i 3, которые хранятся соответственно в |
|||
2 |
2 |
|
|
элементах S(1), S(2), S(3) массива S.
Для проверки правильности решения подставим полученные корни в приведенном порядке вместо x в исходное
выражение y=x3-1. |
|
>> subs(y,x,S) |
|
ans = |
|
[ |
0] |
[ (-1/2+1/2*i*3^(1/2))^3-1] [ (-1/2-1/2*i*3^(1/2))^3-1] >> [m,n]=simple(ans)
m = [ 0] [ 0] [ 0]

117
Выражение y=x3-1 принимает значение 0 при
подстановке любого из корней, т.е. x1=1, x2=-1+i |
3, x3=-1-i 3, |
2 |
2 |
являются точными корнями уравнения x3-1=0.
Функция roots (см. раздел 6.1) нашла бы только приближенные значения корней уравнения x3-1=0. В общем случае полиномиальное уравнение степени выше 4 не может иметь точного решения, выраженного с помощью радикалов.
Функция solve позволяет решать уравнения, представленные в аналитическом виде.
Решим квадратное уравнение ax2+bx+c=0. Решение:
>> S=solve('a*x^2+b*x+c=0',x) S =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
Это известные выражения корней x1,2 |
= |
-b± |
b2-4ac |
|
2 |
|
|||
|
|
|
квадратного уравнения ax2+bx+c=0 (обратная теорема Виета). Точно также можно выразить с помощью радикалов решения кубического уравнения ax3+bx2+cx+d=0, хотя эти выражения достаточно сложные.
Решим трансцендентное уравнение xlnx+1 -1=0.
Решение:
>>syms x
>>S=solve('x^(log(x)+1)-1',x)
118
S =
[ exp(0)] [ exp(-1)]
Проверка:
>>subs(x^(log(x)+1)-1,x,S) ans =
[ 0]
[ 0]
В данном случае найдены точные решения x1=1, x2=e−1. Найдем решение трансцендентного уравнения lnx+3-x=0.
Решение:
>>solve('log(x)+3-x=0')
ans =
[ -lambertw(-exp(-3))] [ -lambertw(-1,-exp(-3))] >> vpa(ans,8)
ans =
[ .52469097e-1] [ 4.5052415]
Найдены приближенные решения x1=0,0524691 и x2=4,5052415, которые выражаются через функцию Ламберта.
Решения этой системы были получены в разделе 6.2 с помощью функции fzero. Но в данном случае функция solve находит оба корня одновременно, причем с любой степенью точности. При этом не требуется графически определять интервалы изоляции корней.
Решение любого трансцендентного уравнения, в том числе и тригонометрического (см. раздел 7.17), достаточно сложная и серьезная проблема. Иногда простое трансцендентное уравнение может и не решаться в MATLAB функцией solve, или она может выдать не все решения.
Решим трансцендентное уравнение: sinx+lnx+ex-1=0.
Решение:
>>syms x
>>Y=sin(x)+log(x)+exp(x)-1;