Иллюстрированный самоучитель по Maple 9

Экстремум функции

В первую очередь в процедуре определяются точки предполагаемого экстремума. Для этого находятся точки, в которых производная равна нулю (solve(diff (f (x),x)=0,x); здесь результатом операции является последовательность решений), а результат этого вычисления, заключенный в квадратные скобки (это уже список), присваивается в качестве значения переменной ListOf Points. Таким образом, все точки, исследуемые на экстремум, являются элементами списка ListOf Points.

На следующем шаге инициализируется переменная ResultList (в качестве начального значения ей присваивается пустой список). Далее идет один большой оператор цикла (начинается с for… do и заканчивается end do). В рамках этого оператора перебираются все значения s из списка ListOfPoints (for s in ListOfPoints), т.е. с помощью переменной s пересматриваются точки, в которых производная функции равна нулю. Для каждой из этих точек сначала вычисляется вторая производная (в виде общей зависимости от х), затем переменной х присваивается значение исследуемой на экстремум точки, переменной А – значение второй производной в этой точке, а переменной В присваивается это же значение, но в формате числа с плавающей точкой – для этого используется процедура evalf(), которая преобразует указанное в качестве ее аргумента выражение в формат числа с плавающей точкой. Переменная В будет использоваться в условных операторах (if) при проверке знака второй производной в данной точке.

На заметку
Дело в том, что Maple пытается получить решение уравнения, в котором производная приравнена к нулю, в аналитическом виде. Но если такое аналитическое выражение в дальнейшем нужно исследовать на предмет того, больше оно нуля или нет, исследование это будет проводиться согласно правилам преобразования алгебраических выражений, т.е. тоже аналитически. Может оказаться, что Maple будет не в состоянии преобразовать выражение настолько, чтобы стало очевидно, больше оно нуля или нет. Кроме того, на такие преобразования может уйти много времени. Поэтому и используется переменная В; при сравнении чисел в форме с плавающей точкой используются другие алгоритмы, которые работают быстрее
.

Далее следует структура из вложенных условных операторов (структура if…fi).

На заметку
Вместо структуры окончания условного оператора if можно использовать конструкцию end if. Так, безусловно, длиннее, зато понятнее!

Если вторая производная в точке меньше нуля (В<0), в список результатов вводится запись с указанием точки и того, что это точка максимума, а в случае В>0 – что это точка минимума. Если же В=0, вносится запись о том, что необходимо дополнительное исследование. (В этих случаях необходимо осуществлять поиск производных более высоких порядков.) Объединение строк при этом выполняется с помощью процедуры cat(). Данная процедура используется для объединения строк и названий и формирует результат в виде строки (названия), в которой объединены все ее аргументы в порядке следования.

Например, рассмотрим команду cat ("в точке х=", convert (x, string),"-максимум "). Первый и третий аргументы процедуры cat() заключены в двойные кавычки и являются строками. Они будут объединены в таком виде, как есть. Интерес представляет второй аргумент процедуры cat() – процедура convert(), которая используется для преобразования типов. Первый ее аргумент (х) является числовым (или символьным) значением точки, исследуемой на экстремум. Это значение преобразуется в строчной формат, о чем свидетельствует опция string. Поэтому в результате объединения получаем строку вида "в точке х=значение – максимум". Такие строки и составляют список ResultList, т.е. являются элементами этого списка.

После условных операторов, но перед окончанием оператора цикла (напоминаем, заканчивается конструкцией end do) размещается команда "восстановления" переменной х (х: = 'х'); иначе на следующем этапе нельзя было бы вычислить производную второго порядка по х. Наконец, последней командой в теле процедуры выводится список с результатами исследования.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.