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

Начальные сведения о MATLAB

..pdf
Скачиваний:
17
Добавлен:
05.02.2023
Размер:
1.54 Mб
Скачать

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

 

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;