Кирьянов. Самоучитель MathCad 11. Кирьянов д в
Скачать 10.75 Mb.
|
имеющего корень х := 1 у := к - х + у = О Глава 8. Алгебраические уравнения и оптимизациях, у ) О Листинг 8.9 демонстрирует приближенное решение уравнения которое при любом значении коэффициента имеет единственный точный корень Тем не менее, при попытке решить его функцией Find для больших к, порядка принятых в листинге, происходит генерация ошибки" (Решение не найдено. Это связано с иным поведением функции f вблизи ее корня, по сравнению с функциями, приводимыми в качестве примеров выше в этой главе (см. рис. 8.1, В отличие от них, f (x,y) не пересекает плоскость f (х,у)=о, а лишь касается ее (рис. 8.7) в точке Поэтому и найти корень изложенными в предыдущем разделе градиентными методами сложнее, поскольку вблизи корня производные f (х,у) близки к нулю, и итерации могут уводить предполагаемое решение далеко от корня. Ситуация еще более ухудшается, если наряду с корнем типа касания (см. рис. 8.7) имеются (возможно, весьма удаленные) корни типа пересечения. Тогда попытка решить уравнение или систему уравнений с помощью функции может приводить к нахождению корня второго типа, даже если начальное приближение было взято очень близко к первому. Поэтому если Вы предполагаете, что система уравнений имеет корень типа касания, намного предпочтительнее использовать функцию Minerr, тем более, что всегда есть возможность проверить правильность решения уравнений простой подстановкой в них полученного решения (см. листинг 8.6). 8.7. График функции +у В листинге 8.9 мы рассмотрели пример нахождения существующего решения уравнения. Приведем в заключение пример нахождения функцией Minerr приближенного решения несовместной системы уравнений и неравенств (листинг 8.10). Решение, выдаваемое функцией Minerr, минимизирует невязку данной системы 202 Часть III, Численные методы Примечание bСогласно своему математическому смыслу, функция M i n e r r может применяться для построения регрессии серии данных по закону, заданному пользователем (см. разд. Листинг Приближенное решение несовместной системы уравнений и неравенств х := 1 Given 2 2 x + у = x > у < - 0 . 2 Minerr (у := 1 У- 0 . - 0 . 042 Как видно из листинга, в качестве результата выдаются значения переменных, наилучшим образом удовлетворяющие уравнению и неравенствам внутри вычислительного блока. Внимательный читатель может обнаружить, что решение, вьщаваемое функцией Minerr в рассматриваемом примере, не является единственным, поскольку множество пар значений (х,у) в равной степени минимизирует невязку данной системы уравнений и неравенств. Поэтому для различных начальных значений будут получаться разные решения, подобно тому как разные решения выдаются функцией Find в случае бесконечного множества корней (см. обсуждение листинга 8.6 в разд. 8.3). Еще более опасен случай, когда имеются всего несколько локальных минимумов функции невязки. Тогда неудачно выбранное начальное приближение приведет к выдаче именно этого локального минимума, несмотря на то, что другой (глобальный) минимум невязки может удовлетворять системе гораздо лучше. Поиск экстремума функции Задачи поиска экстремума функции означают нахождение ее максимума (наибольшего значения) или минимума (наименьшего значения) в некоторой области определения ее аргументов. Ограничения значений аргументов, задающих эту область, как и прочие дополнительные условия, должны быть определены в виде системы неравенств и (или) уравнений. В таком случае говорят озадачена условный экстремум. Для решения задач поиска максимума и минимума в Mathcad имеются Встроенные функции Minerr, Minimize И Maximize. Все ОНИ ИСПОЛЬЗуЮТ же градиентные численные что и функция Find для решения урав- Глава 8. Алгебраические уравнения и оптимизация 203 нений. Поэтому Вы можете выбирать численный алгоритм минимизации из уже рассмотренных нами численных методов (см. разд. 8.4). 8.6.1. Экстремум функции одной переменной Поиск экстремума функции включает в себя задачи нахождения локального и глобального экстремума. Последние называют еще задачами оптимизации. Рассмотрим конкретный пример функции показанной графиком на рис. 8.8 на интервале (-2,5). Она имеет глобальный максимум на левой границе интервала, глобальный минимум, локальный максимум, локальный минимум и локальный максимум на правой границе интервала (в порядке слева направо). В Mathcad с помощью встроенных функций решается только задача поиска локального экстремума. Чтобы найти глобальный максимум (или минимум), требуется либо сначала вычислить все их локальные значения и потом выбрать из них наибольший (наименьший, либо предварительно просканиро- вать с некоторым шагом рассматриваемую область, чтобы выделить из нее подобласть наибольших (наименьших) значений функции и осуществить поиск глобального экстремума, уже находясь в его окрестности. Последний путь таит в себе некоторую опасность уйти в зону другого локального экстремума, но часто может быть предпочтительнее из соображений экономии времени. f 0 / -г X 0 J - 3D Z 8 . 8 . График функции +Для поиска локальных экстремумов имеются две встроенные функции, которые могут применяться как в пределах вычислительного блока, таки автономно вектор значений аргументов, при которых функция f достигает минимума — вектор значений аргументов, при которых функция f достигает максимума . . . ) — функция аргументы, по которым производится минимизация (максимизация). 204 Часть III. Численные методы Всем аргументам функции f предварительно следует присвоить некоторые значения, причем для тех переменных, по которым производится минимизация, они будут восприниматься как начальные приближения. Примеры вычисления экстремума функции одной переменной (рис. 8.8) без дополни- условий показаны в листингах Поскольку никаких дополнительных условий в них не вводится, поиск экстремумов выполняется для любых значений от до Листинг Минимум функции одной переменной (х х х 1 Minimize ( х) Листинг Максимум функции одной переменной ( х ) + х := 1 M a x i m i z e ( f , x х - 1 Как видно из листингов, существенное влияние на результат оказывает выбор начального приближения, в зависимости отчего в качестве ответа выдаются различные локальные экстремумы. В последнем случае численный метод вообще не справляется с задачей, поскольку начальное приближение выбрано далеко от области локального максимума, и поиск решения уходит в сторону увеличения f (х, те. расходится к. Условный экстремум В задачах на условный экстремум функции минимизации и максимизации должны быть включены в вычислительный блок, те. им должно предшествовать ключевое слово Given. В промежутке между Given и функцией поиска экстремума с помощью булевых операторов записываются логические выражения (неравенства, уравнения, задающие ограничения назначения аргументов минимизируемой функции. В листинге 8.13 показаны примеры поиска условного экстремума на различных интервалах, определенных неравенствами. Сравните результаты работы этого листинга с двумя предыдущими Глава 8. Алгебраические уравнения и оптимизация Листинг Три примера поиска условного (х х + 5 - х := 1 -5 < х -2 Minimize (f,x) х 1 Given x > ОС забывайте о важности выбора правильного начального приближения ив случае задач на условный экстремум. Например, если вместо условия - з<х<о последнем примере листинга задать то притом же самом начальном будет найден максимум что неверно, поскольку максимальное значение достигается функцией f(x} на левой границе интервала при х. Выбор начального приближениях решает задачу правильно, выдавая в качестве результата ,x) =-5. 8.6.3. Экстремум функции многих переменных Вычисление экстремума функции многих переменных не несет принципиальных особенностей по сравнению с функциями одной переменной. Поэтому ограничимся примером (листинг 8.14) нахождения максимума ими- нимума функции, показанной в виде графиков трехмерной поверхности и линий уровня на рис. 8.9. Привлечем внимание читателя только к тому, как с помощью неравенств, введенных логическими операторами, задается область на плоскости Листинг Экстремум функции двух переменных ( x х := 3 уху Часть III. Численные методы ( f , х , у) = 5.07 Рис. 8.9. График функции f ( х , у ) и отрезок прямой х+у=10 Дополнительные условия могут быть заданы и равенствами. Например, определение после ключевого слона Given уравнения х+у=ю приводит к такому решению задачи на условный экстремум 6.411 Minimize ( f , х , у) -Как нетрудно сообразить, еще одно дополнительное условие привело кто- му, что численный метод ищет минимальное значение функции вдоль отрезка прямой, показанного на рис. 8.9. Примечание Поиск минимума можно организовать и с помощью функции Minerr. Для этого в листинге 8.14 надо поменять имя функции Minimize на Minerr, а после ключевого слова Given добавить выражение, приравнивающее функции f (х,у) значение, заведомо меньшее минимального, например f (х,у) =0. 8.6.4. Линейное программирование Задачи поиска условного экстремума функции многих переменных часто встречаются в экономических расчетах для минимизации издержек, финансовых рисков, максимизации прибыли и т. п. Целый класс экономических задач оптимизации описывается системами линейных уравнений и неравенств. Они называются задачами линейного программирования Приведем характерный пример т. н задачи которая решает одну из проблем оптимальной организации доставки товара потребителям сточки зрения экономии транспортных средстн (листинг 8.15). Глава 8. Алгебраические уравнения и оптимизация 207 Листинг Решение задачи линейного программирования 210 160 Ь := 237 rows ( M 3 11.5 7 12 6.2 10 9.0 278 b = 515 N :- rows N = со , 0 + , 1 , 2 = sol :- Minimize ( f , х) О 210 о 2 0 0 0 , 0 1 2 > > > 0 0 0 = 145 0 133 f = Модель типичной транспортной задачи следующая. Пусть имеется пред- приятий-производителей, выпустивших продукцию в количестве тонн. Эту продукцию доставить м потребителям в количестве тонн каждому. Численное определение векторов аи ь находится впервой строке листинга. Сумма всех заказов потребителей равна сумме произведенной продукции, те. всех (проверка равенства во второй строке. Если известна стоимость перевозки тонны продукции от производителя к j-му потребителю то решение задачи задает оптимальное распределение соответствующего товаропотока сточки зрения минимизации суммы транспортных расходов. Матрица си мини- мизируемая функциях) матричного аргументах находятся в середине листинга 8.15. 208 Часть III. Численные методы Условия, выражающие неотрицательность и равенства, задающие сумму произведенной каждым предприятием продукции и сумму заказов каждого потребителя, находятся после ключевого слова Given. Решение, присвоенное матричной переменной sol, выведено в последней строке листинга вместе с соответствующей суммой затрат. Обратите внимание, что для получения результата пришлось увеличить погрешность задающую максимальную допустимую невязку дополнительных условий. В строке, предшествующей ключевому слову Given, определяются нулевые начальные значения для х простым созданием нулевого элемента матрицы Внимание! Если взять другие начальные значения для х, решение, скорее всего, будет другим Возможно, Вы сумеете отыскать другой локальный минимум, который еще больше минимизирует транспортные затраты. Это еще раз доказывает, что задачи на глобальный минимум, к классу которых относится линейное программирование, требуют аккуратного отношения в смысле выбора начальных значений. Часто ничего другого не остается, кроме сканирования всей области начальных значений, чтобы из множества локальных минимумов выбрать наиболее глубокий. Символьное решение уравнений Некоторые уравнения можно решить точно с помощью символьного процессора. Делается это очень похоже начисленное решение уравнений с применением вычислительного блока. Присваивать неизвестным начальные значения нет необходимости. Листинги 8.16 и демонстрируют символьное решение уравнения с одним неизвестными системы двух уравнений с двумя неизвестными соответственно. Листинг Символьное решение алгебраического уравнения с одним неизвестным Given 2 х + 2 - 4 = Листинг Символьное решение системы алгебраических уравнений + = Ох + 2 О Глава 8. Алгебраические уравнения и оптимизация 209 -1 2 1 / \ 2 , 2 1 Э • — • + • - 2 • — • - 2 4 A 4 ( 2 - 1 1 . 2 (-2 + 2 • 193) - 2 • - 2 • ( 2 6 S Как видно, вместо знака равенства после функции Find в листингах следует знак символьных вычислений, который можно ввести с панели Символика) или, нажав клавиши забывайте, что сами уравнения должны иметь вид логических выражений, те. знаки равенства нужно вводить с помощью панели Booleans (Булевы операторы. Обратите внимание, что в листинге 8.17 вычислены как два первых действительных корня, которые мы уже находили численным методом (см. разд. 8.3), таки два других мнимых корня. Эти два последних корня чисто мнимые, т. к ВХОДЯЩИЙ В НИХ С помощью символьного процессора решить уравнение с одним неизвестным можно и по-другому: 1. Введите уравнение, пользуясь панелью Booleans (Булевы операторы) или нажав клавиши например 2. Щелчком мыши выберите переменную, относительно которой Вы собираетесь решить уравнение. Выберите вменю (Символика) пункт Variable / Solve Переменная Решить). После строки с уравнением появится строка с решением или сообщение о невозможности символьного решения уравнения. В данном примере после осуществления описанных действий появляется вектор, состоящий из двух корней уравнения Символьные вычисления могут производиться и над уравнениями, в которые, помимо неизвестных, входят различные параметры. В листинге приведен пример решения уравнения четвертой степени с параметром а. Как видите, результат получен в аналитической форме Листинг Символьное решение уравнения, зависящего от параметрах- ах Часть Численные методы В следующем разделе мы рассмотрим более подробно, как с помощью можно численными методами решать подобные задачи. Метод продолжения по параметру Решение "хороших" нелинейных уравнений и систем типа тех, которые были рассмотрены в предыдущих разделах этой главы, представляет собой несложную, с вычислительной точки зрения, задачу. В реальных инженерных и научных расчетах очень распространена более сложная проблема решение не одного уравнения (или системы, а целой серии уравнений, зависящих от некоторого параметра (или нескольких параметров. Для таких задач существуют очень эффективные методы, которые называются методами продолжения Эти методы непосредственно не встроены в Mathcad, но могут быть легко запрограммированы с помощью уже рассмотренных нами средств. Будем далее говорить об одном уравнении, имея ввиду, что всегда возможно обобщение результатов на случай системы уравнений. Пусть имеется уравнение f (a,x>=o, зависящее не только от неизвестного но и от параметра а. Требуется определить зависимость его корнях от параметра ат. е. ха. Простой пример такой задачи был приведен в предыдущем разделе в листинге 8.18. Тогда нам повезло, и решение в общем виде было найдено с помощью символьных вычислений. Рассмотрим еще один, чуть более сложный пример, аналитическое решение которого также заранее известно, нос которым символьный процессор, тем не менее, не справляется. Обобщим задачу, добавив зависимость от параметра следующим образом (Аналитическое решение этого уравнения находится из соотношения где . . ., те. имеется бесконечное количество (для каждого семейств решений Несколько из семейств для N=1,2,3 показаны на рис. 8.10 тремя сплошными кривыми. Кроме того, следует иметь в виду, что длят. е решением является прямая, совпадающая с осью х. Заметим (листинг 8.19), что символьный процессор Mathcad выдает в качестве решения только эту серию r o o t ( s i n ( ах, х ) О Забудем на время, что аналитическое решение известно, и подойдем к уравнению (1) как к любой другой новой задаче. Решим его методом секущих, применяя для этого встроенную функцию root. Самый простой, но далеко не лучший способ иллюстрируется листингом 8.20. Корень уравне- Глава 8. Алгебраические уравнения и оптимизация 211 ния (1) требуется определить численно для каждого значения параметра а. Для этого первые две строки листинга создают ранжированную переменную i, с помощью которой определяется вектор значений параметра для которых будут производиться расчеты. Его элементы пробегают значения от о.ою до 0.025 с шагом 0.0005 (эти числа взяты ради примера, Вы можете поэкспериментировать с другими значениями. Последняя строка листинга присваивает элементам еще одного вектора у вычисленные с помощью функции root значения корней уравнения (1) для каждого Но, для того чтобы функция root заработала, необходимо предварительно задать начальное приближение к решению, что сделано в третьей строке листинга. Ключевой момент метода, примененного в листинге 8.20, заключается в том, что одно и тоже начальное значение использовано для всех О О 8.10. Решение уравнения s i n =0 см. листинг Листинг 8.20. Один из способов численного решения уравнения =0 i := 0 .. 30 := 0.01 + i х := 300 • Результат расчетов показан на том же рис. 8.10 точками, причем самая левая точка отвечает начальному значению Обратите внимание, что, по мере увеличения а, кривая корней уравнения сначала идет по семейству решений а потом (в районе "перепрыгивает" на Часть III. Численные методы другое семейство С вычислительной точки зрения такая ситуация чаще всего крайне неблагоприятна, поскольку хотелось бы отыскать непрерывное семейство решений. Скачки зависимости у(а) могут вводить пользователя в заблуждение, вовсе скрывая от него существование семейства решений при а>о Почему же происходят эти скачки с одного семейства решений на другое? Конечно, причина кроется в выборе начального значения для вычисления каждого из корней. Линия начальных значений обозначена на рис. Ю в виде пунктирной прямой. Для и вообще для нескольких первых начальное значение находится ближе всего к нижнему семейству решений Поэтому неудивительно, что численный метод находит именно эти корни. В правой части графика на риск линии начальных значений ближе второе семейство решений к ним-то и приводит численный метод. Приведенные соображения диктуют очень простой рецепт избавления от скачков и нахождения одного из семейств непрерывных решений. Для этого требуется при поиске каждого + корня взять начальное значение, по возможности близкое к отыскиваемому семейству. Неплохим вариантом будет выбор приближения в виде предыдущего го корня, который был найден для прошлого значения параметра Возможный вариант воплощения этого метода, называемого продолжением по параметру, приведен в листинге 8.21. В нем функция root применена внутри функции пользователя определенной в самом начале листинга с помощью средств программирования. Назначение функции f{xo,a) заключается в том, что она выдает значение корня для заданного значения параметра аи начального приближения к решению хо. В остальном, смысл листинга 8.21 повторяет предыдущий, за исключением того, что задается явно (в его предпоследней строке) только начальное значение зоо только для поиска Для всех последующих точек, как следует из последней строки листинга, взято начальное значение, равное предыдущему корню |