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

Лекция 5. Аналитические вычисления

..pdf
Скачиваний:
140
Добавлен:
28.03.2016
Размер:
256.15 Кб
Скачать

Лекция 5

 

Лекция 5. Аналитические вычисления.

 

1. Аналитические вычисления с помощью пакета расширений Symbolic Math Toolbox. ..............

1

1.1. Символьные переменные и функции. ..........................................................................................

1

Создание символьных переменных. .......................................................................................................

1

Упрощение, преобразование и вычисление выражений........................................................................

2

1.2. Решение задач. ..................................................................................................................................

3

Решение задач линейной алгебры. .........................................................................................................

3

Пределы, дифференцирование и интегрирование. ................................................................................

4

Вычисление сумм рядов..........................................................................................................................

6

Разложение в ряд Тейлора......................................................................................................................

6

1.3. Графическое представление функций. ........................................................................................

7

1. Аналитические вычисления с помощью пакета расширений Symbolic Math Toolbox.

Сколь широки бы ни были возможности ядра системы MATLAB по предоставлению готовых услуг в области вычислений и компьютерной графики, всегда найдутся новые частные проблемы и целые предметные области, которые остались неохваченными.

Для гибкого реагирования на такие ситуации архитектура пакета MATLAB построена таким образом, что имеется очень удобная техника встраивания в общую систему новых программных решений. Причем это встраивание происходит незаметным для пользователя образом. После инсталляции пакета расширения (Toolbox) функциональные возможности этого пакета как-бы сливаются с базовыми возможностями ядра системы MATLAB, и ими можно пользоваться абсолютно традиционными способами.

В настоящее время существуют десятки официально распространяемых пакетов расширения, среди которых существуют специальные математические пакеты для решения систем дифференциальных уравнений с частными производными (PDE Toolbox), оптимизационных задач (Optimization Toolbox), для решения задач обработки изображений и сигналов (Image Processing Toolbox; Wavelet Toolbox) и многих других задач. В рамках данного курса мы не можем рассматривать все эти расширения, тем не менее, одно исключение все же сделаем. Мы рассмотрим возможности пакета расширения Symbolic Math Toolbox, позволяющие в рамках системы MATLAB осуществлять аналитические вычисления и аналитические преобразования выражений. Этот пакет лицензирован у фирмы Waterloo Maple Software, Canada, и включен в состав дистрибутива пакета MATLAB на правах пакета расширения. Он столько гармонично дополняет и расширяет возможности ядра системы MATLAB, что пропустить рассказ об этом пакете расширения было бы неверно. Возможности пакета Symbolic Math Toolbox поистине гигантские, поэтом мы изучим лишь основные и наиболее характерные для них.

1.1. Символьные переменные и функции.

Создание символьных переменных.

Допустим, что требуется выполнить сложение (символьное, а не численное) алгебраического выражения x+y и выражения 3y. Нам совершенно очевидно, что результат (при любых допустимых числовых значениях независимых переменных x и y) должен быть равен x+4y.

Получить такой результат средствами ядра пакета MATLAB нельзя, так как там осуществляются только численные расчеты, а в сформулированной задаче вообще не заданы никакие численные значения для переменных x и y, входящих в исходное выражение.

Вот здесь на помощь и приходит Symbolic Math Toolbox.

x=sym('x'); y=sym('y'); x+y+3*y

1

Лекция 5

ans = x+4*y

Этот пакет осуществляет сложение над объектами нового типа – sym-объекты. Такие объекты получаются после вызова одноименной функции конструктора таких объектов. Над объектами типа sym производятся манипуляции в соответствии с правилами алгебры и математического анализа.

В предыдущем примере мы сначала создали две переменные типа sym. Для простоты этим переменным были присвоены имена x и y. Другой способ создания переменных типа sym, который позволяет достаточно компактно инициализировать большое количество переменных, это использование функции syms. Например, инициализацию переменных x и y из прошлого примера, можно записать в виде:

syms x, y

Можно создавать переменные типа sym, сразу инициализируя их алгебраические выражения, например:

Expr1 = sym('x+4*y');

В рамках данного пакета имеется возможность осуществлять над переменными типа sym гигантское количество операций и применять к ним множество интересных функций. Вкратце опишем лишь основные возможности.

Упрощение, преобразование и вычисление выражений.

Функция simplify (упрощать) осуществляет поэлементное упрощение символьных выражений. Если упрощение невозможно, возвращается исходное выражение. Например:

>> simplify((x^2-2*x*y+y^2)/(x-y)) ans =

x-y

Команда simplify в Symbolic не обладает в полной мере возможностями системы Maple по упрощению выражений. Дополнительные возможности обеспечивает функция simple(s), которая выполняет различные упрощения для элементов массива s и выводит как промежуточные результаты, так и самый короткий конечный результат. При обращении к функции simple в форме

[R,HOW]=simple(s)

промежуточные результаты не выводятся. Конечные результаты упрощений содержатся в векторе R, а в строковом векторе HOW указывается выполняемое преобразование. Пример:

syms x [R1,HOW1]=simple(cos(x)^2-sin(x)^2) [R2,HOW2]=simple(2*cos(x)^2-sin(x)^2)

возвращает следующие результаты:

R1 = cos(2*x) HOW1 = combine R2 =

3*cos(x)^2-1 HOW2 = simplify

Функция expand (раскрывать) призвана раскрывать алгебраические и функциональные выражения.

>> expand(sin(x+y))

2

Лекция 5

ans = sin(x)*cos(y)+cos(x)*sin(y)

Ясно, что так можно запрашивать подсказки по забытым формулам алгебры и тригонометрии. Можно просто перемножать многочлены.

>> expand((x+y)*(x-y)*(2*x-3*y)) ans = 2*x^3-3*x^2*y-2*y^2*x+3*y^3

Сразу хочу отметить, что вывод аналитических выражений, особенно сложных, имеет большой недостаток – плохая «читабельность» (вывод в одну строчку). Чтобы как-то исправить это в MATLAB имеется специальная функция, которая выводит результат в более или менее приглядном виде. Это функция pretty(Expr). Например прошлый результат будет выглядеть как:

>> pretty(ans)

3

2

2

3

2 x - 3 x y - 2 y x + 3 y

С помощью функции factor (множитель, сомножитель) можно раскладывать многочлены на простые множители:

>> factor(x^4+2*x^3-3*x^2) ans =

(x-1)*(x+3)*x^2

1.2. Решение задач.

Решение задач линейной алгебры.

Функции Symbolic Math Toolbox выполняют в символьном виде операции с матрицами и векторами. Все задачи, описанные на прошлой лекции, могут быть решены в символьной форме, причем соответствующие функции имеют те же названия, что и функции для численного решения, поскольку соответствующие методы переопределены для класса sym.

Функция det, оперирует над символьными матрицами, аналитически вычисляя детерминант (определитель) этой матрицы.

syms x y a b A=[x y; a b]; det(A)

ans = x*b-y*a

Аналитически можно найти и обратную матрицу. Для этого используется функция inv:

inv(A) ans =

[ b/(x*b-y*a), -y/(x*b-y*a)] [ -a/(x*b-y*a), x/(x*b-y*a)]

Вообще говоря, имеется большое количество функций, осуществляющих аналитические операции линейной алгебры. О них всегда можно справиться из справочной системы MATLAB.

3

Лекция 5

Пределы, дифференцирование и интегрирование.

Функция limit находит предел функции в некоторой точке, включая и плюс или минус бесконечность. Первым входным аргументом limit является символьное выражение, вторым – переменная, а третьим – точка, в которой разыскивается предел.

limit(f,a) возвращает предел в точке a символьного выражения f по независимой переменной.

limit(f) возвращает предел в точке a=0 символьного выражения f по независимой переменной.

limit(f,x,a) возвращает предел символьного выражения f в точке x=a. limit(f,x,a,'right') возвращает предел символьного выражения f в точке x=a+0

(справа).

limit(f,x,a,'left') возвращает предел символьного выражения f в точке x=a-0 (слева).

Пусть, например, требуется вычислить

 

+

1

ax

lim 1

x

 

x →∞

 

 

Для получения ответа определите a и x, как символьные переменные, и используйте inf в качестве точки предела:

syms a x

limit((1 + 1/x)^(x*a), x, Inf) ans =

exp(a)

Краткая форма вызова функции limit с одним аргументом предполагает вычисление предела при стремлении единственного аргумента к нулю..

limit(sin(x)/x) ans =

1

Особенно выигрышными с эмоциональной точки зрения кажутся многим операции символьного дифференцирования и символьного интегрирования. Первая из них выполняется функцией diff.

diff(s) – возвращает символьное значение первой производной от символьного выражения или массива символьных выражений s по независимой переменной.

diff(s,n) – возвращает символьное значение n-й производной от символьного выражения или массива символьных выражений s по независимой переменной

diff(s,'v') или diff(s,sym('v')) – возвращает символьное значение первой производной от символьного выражения или массива символьных выражений s по переменной v.

diff(s,'v',n) или diff(s,n,'v') – возвращает символьное значение n-й производной от символьного выражения или массива символьных выражений s по переменной v.

Вот соответствующие примеры:

>>y=x^2-4*x-7;

>>diff(y,x) ans =

2*x-4

4

Лекция 5

Здесь выражение diff(y,x) означает «продифференцировать» y по x. Чтобы найти производную порядка n необходимо его указать дополнительным параметром:

>>syms x t

>>y2=diff(2*x+x*t^6,t,5) y2 =

720*x*t

Для вычисления определенных и неопределенных интегралов в символьном виде служит функция int.

int(s) – возвращает символьное значение неопределенного интеграла от символьного выражения или массива символьных выражений s по переменной. Если s – константа, то вычисляется интеграл по переменной 'x'.

int(s,a,b) – возвращает символьное значение определенного интеграла на отрезке интегрирования [a,b] от символьного выражения или массива символьных выражений s по переменной. Пределы интегрирования a, b могут быть как символьными, так и числовыми.

int(s,v) – возвращает символьное значение неопределенного интеграла от символьного выражения или массива символьных выражений s по переменной v.

int(s,v,a,b) – возвращает символьное значение определенного интеграла от символьного выражения или массива символьных выражений s по переменной v с пределами интегрирования [a,b].

А теперь пример на интегрирование:

y=1/sin(x);

int(y,x) ans =

log(csc(x)-cot(x))

Примеры интегрирования по разным переменным:

>>syms x t y1 y2

>>y1=int(t*sin(x),x) y1 =

-t*cos(x)

>>y2=int(t*sin(x),t) y2 =

1/2*t^2*sin(x)

Ипример на вычисление определенного интеграла:

>>syms x y a b

>>y=cos(x);

>>int(y, x, a, b) ans = sin(b)-sin(a)

>>int(y, x, -pi/2, pi/2) ans =

2

Впервом случае пределы интегрирования являются символьными, а во втором числовыми.

5

Лекция 5

Вычисление сумм рядов.

Для аналитического вычисления суммы

s = b f (i)

i =a

где i – переменная суммирования, служит функция symsum. Параметр b может быть конечным или бесконечном (inf).

symsum(s) – возвращает символьное значение суммы бесконечного ряда по переменной суммирования, найденной автоматически.

symsum(s,a,b) – возвращает символьное значение суммы ряда по переменной суммирования, найденной автоматически, при изменении этой переменной от а до b.

symsum(s,v) – возвращает символьное значение суммы бесконечного ряда по переменной суммирования v.

symsum(s,v,a,b) – возвращает символьное значение суммы бесконечного ряда по переменной суммирования v при изменении этой переменной от а до b.

Пример:

>>syms k n

>>y1=simple(symsum(k))

>>y2=simple(symsum(k,0,n-1))

>>y3=simple(symsum(k,0,n))

>>y4=simple(symsum(k^2,0,n))

возвращает следующие результаты: y1 =

1/2*k*(k-1) y2 = 1/2*n*(n-1) y3 = 1/2*n*(n+1) y4 =

1/6*n*(n+1)*(2*n+1)

Разложение в ряд Тейлора

Представляют значительный интерес операции аналитического разложения в ряды Тейлора. Ряд Тейлора для функции f (x) имеет вид

f (x) = f (n) (a) (x a)n

n =0 n!

При a =0 этот ряд называется рядом Маклорена. Для получения разложений аналитических функций в ряд Тейлора служит функция taylor.

taylor(f) – возвращает 6 членов ряда Маклорена.

taylor(f,n) – возвращает члены ряда Маклорена до (n-1)-го порядка. taylor(f,a) – возвращает 6 членов ряда Тейлора в окрестности точки a.

taylor(f,a,n) – возвращает члены ряда Тейлора до (n-1)-го порядка в окрестности точки a. Пример использования:

y=sin(x);

taylor(y,0,6) ans =

x-1/6*x^3+1/120*x^5

6

Лекция 5

Здесь мы разложили функцию y(x) в окрестности точки x=0 до членов порядка не выше 6.

1.3. Графическое представление функций.

Визуализация символьной функции одной переменной осуществляется при помощи ezplot. Самый простой вариант использования ezplot состоит в указании символьной функции в качестве единственного входного аргумента, при этом в графическое окно выводится график функции на отрезке [-2 π, 2π].

>>f = sym('x^2*sin(x)');

>>ezplot(f);

Обратите внимание (рис.1), что автоматически создается соответствующий заголовок. По умолчанию в качестве отрезка, на котором строится график, принимается промежуток пересечения области определения функции и интервала [-2 π, 2π]. Вторым аргументом может быть задан вектор с границами отрезка, на котором требуется построить график функции ezplot(f, [-3 2])

Рис. 1. Использование функции ezplot.

Symbolic Math Toolbox предоставляет пользователю целый набор средств для визуализации символьных функций: ezmesh, ezmeshc, ezplot, ezplot3, ezpolar, ezsurf, ezsurfc.

Функция ezsurf отображает график символьной функции только для допустимых значений аргументов, остальные значения отбрасываются, что позволяет исследовать область определения функции двух переменных. С форматом вызова вышеперечисленных функций можно ознакомиться с помощью команды help.

Из представленного краткого обзора хорошо видна гигантская мощь пакета расширения Symbolic Math Toolbox, значительно увеличивающего универсальность и практическую ценность системы MATLAB в целом.

7