Шаг 1
Шаг 1
Шаг 1
Для выявления характера функции воспользуемся функцией convert и создадим объект g в виде кусочной функции:
Шаг 1
а также отдельная переменная х и константа. Большое достоинство полиномов состоит в том, что они дают единообразное представление многих зависимостей и для своего вычисления требуют только арифметических операций (их число значительно сокращается при использовании хорошо известной схемы Горнера). Производные от полиномов и интегралы с подынтегральными функциями-полиномами легко вычисляются и имеют простой вид. Есть и достаточно простые алгоритмы для вычисления всех (в том числе комплексных) корней полиномов на заданном промежутке.
Шаг 1
ПРИМЕЧАНИЕ
Следует обратить внимание на то, что при выполнении операции collect в прежних версиях Maple довольно часто возникала фатальная ошибка. Как видно из приведенных примеров, в Maple 7 такой ошибки уже не возникает.
Шаг 1
Шаг 1
Шаг 1
Шаг 1
Нетрудно заметить, что разложение полинома на множители позволяет оценить наличие у него корней. Однако для этого удобнее воспользоваться специальными функциями, рассмотренными ниже.
Шаг 1
Шаг 1
Шаг 1
Нетрудно показать, что с ним можно выполнять различные операции:
Шаг 1
Приведем подобные примеры и для функции поиска максимума — maximize:
Шаг 1
На Рисунок 9. 4 представлен пример полиномиальной аппроксимации хорошо известной статистической функции erfc(x). Для полинома задана максимальная степень 12, но ввиду отсутствия в разложении четных степеней максимальная степень результата оказывается равна 11.
Шаг 1
Шаг 1
Рисунок 9.6. Задание сплайновой аппроксимации и построение графиков полученных функций
Как видно из Рисунок 9.6, сплайновая функция представляет собой кусочную функцию, определяемую на каждом отдельном интервале. При этом на каждом участке такая функция описывается отдельным полиномом соответствующей степени. Функция plot «понимает» такие функции и позволяет без преобразования типов данных строить их графики. Для работы с кусочными функциями можно использовать функции convert и piecewise.
Шаг 1
Родственные Z- преобразованиям интегральные преобразования Лапласа и Фурье реализуются с помощью пакета inttrans (интегральные преобразования).
Шаг 1
Шаг 1
Шаг 1
Шаг 1
Рисунок 9.3. Пример задания и применения функции, составленной из отдельных кусков
Важно отметить, что созданная с помощью функции piecewise зависимость может участвовать в различных преобразованиях. Например, на Рисунок 9.3 показано, что она легко дифференцируется и можно построить график производной этой функции. При этом каждая часть функции обрабатывается отдельно.
Шаг 2
Как видно из приведенных примеров, функция extrema возвращает как значения экстремумов, так и значения аргументов, при которых экстремумы наблюдаются.
Для проверки оптимизационных алгоритмов существует ряд тестовых функций. Одна из таких функций — функция двух переменных Розенброка. В представленном ниже примере она задана как rf(x.y):
Шаг 2
Выполним дифференцирование и интегрирование функции:
Шаг 2
Обратите внимание на то, что для использования некоторых из приведенных функций необходим вызов их из стандартной библиотеки. Для функции randpoly приведенные результаты случайны, так что, скорее всего, их повторение невозможно.
С полиномами можно выполнять обычные операции, используя для этого соответствующие операторы:
Шаг 2
Примечание 1
Примечание 1
Maple 7 не накладывает ограничений на применение степенных многочленов (полиномов) с отрицательными степенями. Однако свойства таких полиномов заметно отличаются от свойств полиномов с положительными степенями, поэтому при применении первых надо проявлять известную осторожность.
Шаг 2
Обратите внимание на то, что в предпоследнем примере Maple 7 явно «оскандалилась» и вместо максимума функции sin(x)/x, равного 1 при х=0, выдал результат в виде бесконечности. Другими словами, система обнаружила, что в данном случае ей незнакомо понятие предела sin(x)/x при х—>0. Эта ситуация кажется более чем странной, если учесть, что в этом примере Maple 6 давал правильный результат.
Применим функцию minimize для поиска минимума функции Розенброка. Рисунок 9.1 показывает, что minimize прекрасно справляется с данной задачей. На Рисунок 9.1 представлено также построение функции Розенброка, хорошо иллюстрирующее ее особенности.
Шаг 2
Рисунок 9.4. Пример полиномиальной аппроксимации функции erfc(x)
Как видно из приведенного рисунка, в интервале изменениях от -1,5 до 1,5 аппроксимирующее выражение почти повторяет исходную зависимость. Однако затем график аппроксимирующей функции быстро отходит от графика исходной зависимости. При этом он ведет себя иначе даже качественно, никоим образом не показывая асимптотическое поведение, характерное для исходной зависимости.
Шаг 2
Рисунок 9.5. Пример осуществления полиномиальной аппроксимации
Шаг 2
Шаг 2
a
Шаг 3
Как нетрудно заметить, минимум этой функции при значениях х =у = 1, равный О, функцией extrema не обнаружен. Однако это не недостаток данной функции, а просто неудачное ее применение. Функция Розенброка имеет минимум значения, и для его обнаружения надо использовать функцию minimize, описанную ниже.
Примечание 1
Примечание 1
Функция extrema дает неплохие результаты при поиске экстремумов простых аналитических функций, не имеющих особенностей. Однако при анализе сложных функций, содержащих функции со сравнением аргумента (например, abs(x), signum(x) и др.), функция extrema часто отказывается работать и просто повторяет запись обращения к ней.
Шаг 3
Как нетрудно заметить, результаты получены также в виде кусочных функций. Можно продолжить работу с функцией f и выполнить ее разложение в степенной ряд:
> series(f, х);
-1+.Х + О(x6)
Чтобы убрать член с остаточной погрешностью, можно выполнить эту операцию следующим образом:
> series(g, x);
-1 + х
Обратите внимание на то, что поскольку разложение в ряд ищется (по умолчанию) в окрестности точки х=0, то при этом используется тот кусок функции, в котором расположена эта точка. Читатель может продолжить работу с кусочными функциями и далее.
Шаг 3
В целом надо отметить, что аппарат действий с полиномами в Maple 7 хорошо развит и позволяет выполнять с ними практически любые математические операции. В частности, можно вычислять производные от полиномов и интегралы, у которых полиномы являются подынтегральными функциями:
Шаг 3
Рисунок 9.1. Поиск минимума функции Розенброка и построение ее графика
Трудность поиска минимума функции Розенброка связана с ее характерными особенностями. Из Рисунок 9.1 видно, что эта функция представляет собой поверхность типа «глубокого оврага с почти плоским дном», в котором и расположена точка минимума. Такая особенность этой функции существенно затрудняет поиск минимума. То, что система Maple 7 справляется с данной тестовой функцией, вовсе не означает, что трудности в поиске минимума или максимума других функций остаются позади.
Шаг 3
б
Шаг 4
Шаг 4
в
Рисунок 9.2. Задание функции F(x) и построение графиков функции и ее производной
Этот анализ не выявляет у заданной функции каких- либо особенностей. Однако это не является поводом для благодушия — попытка найти экстремумы F(x) с помощью функции extrema и минимумы с помощью функции minimize завершаются полным крахом:
Неудачный поиск экстремумов и минимумов функции
>extrema(F(x).{},x, 's');s;
>minimize(F(x),x=-.l...l);
minimize (.05x + xe (-|x|) * sm(2x),x = -.1 .. 1)
>minimize(F(x),x=-2.5..:2);S
minimize (.05x + xe(-|x|) sin(2*),*'=-2.5 ..-2)
Приходится признать, что в данном случае система Maple 7 ведет себя далеко не самым лучшим образом. Чтобы довести анализ F(x) до конца, придется вспомнить, что у функции без особенностей максимумы и минимумы наблюдаются в точках, где производная меняет знак и проходит Через нулевое значение. Таким образом, мы можем найти минимумы и максимумы по критерию равенства производной нулю. В данном случае это приводит к успеху:
Поиск минимумов по критерию равенства нулю производной
> fso1ve(d1ff(F(x),x)=0,x,-.5...5);
-.01274428224
>xm:=%;
хт:= -.0003165288799
>[F(xm),F(xnn-.001),F(xm-.001)]:
[-.00001562612637, .00003510718293, -.00006236451216]
>fsolve(diff(F(x),x)-0.x,-2.5..-2);
-2.271212360 '
>fso1ve(diff(F(x),x)=0,x.2..2.5):
2.175344371
Неудачный поиск максимума
>maximize(F(x) ,x--l.. - .5);
maximize(.05х + хе (-|x|) * sin(2x),x = -l .. -.5)
Поиск максимумов по критерию равенства нулю производной
>fso1ve(diff(F(x).x),x,-l..-.5);
-.8094838517
>fso1ve(diff(F(x),x),x..5..2):
.8602002115
>fsolve(diff(F(x),x),x.-4..-3);
-3.629879137
>fsolve(diff(F(x),x).x,3..4);
3.899664536
Итак, все основные особые точки данной функции (нули, минимумы и максимумы) найдены, хотя и не без трудностей и не всегда с применением специально предназначенных для такого поиска функций. В уроке 12 будет описана процедура, которая автоматизирует процесс анализа не очень сложных функций и обеспечивает его наглядную визуализацию.
Содержание раздела