Лекция 5. Аналитические вычисления
..pdfЛекция 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