Кирьянов Д. - MathCad 11 (1077323), страница 35
Текст из файла (страница 35)
Поэтому ограничимся примером (листинг 8.14) нахождения максимума и минимума функции, показанной в виде графиков трехмерной поверхности илиний уровня на рис. 8.9. Привлечем внимание читателя только к тому, какс помощью неравенств, введенных логическими операторами, задается область на плоскости (X.Y).Листинг 8.14. Экстремум функции двух переменныхf ( x , y>:-2-(x-5.07)2+ (у-10.03)2-0.2-(х-5.07)х := 3Given0 < х < 150 < у < 20у ;= 33Часть III. Численные методы206Minimize ( f , х , у) =5.0710.03Рис. 8.9.
График функции f ( х , у ) и отрезок прямой х + у = 1 0Дополнительные условия могут быть заданы и равенствами. Например, определение после ключевого слона Given уравнения х+у=ю приводит к такому решению задачи на условный экстремум:Minimize ( f , х , у) -3.5896.411Как нетрудно сообразить, еще одно дополнительное условие привело к тому, что численный метод ищет минимальное значение функции f(x,y)вдоль отрезка прямой, показанного на рис. 8.9.ПримечаниеПоиск минимума можно организовать и с помощью функции M i n e r r . Для этогов листинге 8.14 надо поменять имя функции M i n i m i z e на M i n e r r , а после ключевого слова Given добавить выражение, приравнивающее функции f ( х , у )значение, заведомо меньшее минимального, например f ( х , у ) =0.8.6.4.
Линейное программированиеЗадачи поиска условного экстремума функции многих переменных частовстречаются в экономических расчетах для минимизации издержек, финансовых рисков, максимизации прибыли и т. п. Целый класс экономическихзадач оптимизации описывается системами линейных уравнений и неравенств. Они называются задачами линейного программирования. Приведемхарактерный пример т.
н. транспортной задачи, которая решает одну изпроблем оптимальной организации доставки товара потребителям с точкизрения экономии транспортных средстн (листинг 8.15).Глава 8. Алгебраические уравнения и оптимизация207Листинг 8.15. Решение задачи линейного программирования145210160Ь :=237278b = 515- 515s-=N :- rows (b)M := rows ( a)M=3N=211.5 7 126.2 10 9.0N-l M-lс :=i= 0j= 0CTOL := 0 . 5XN-1, м-1 -= ОGivenхо , о + xi, о = аоx*0 , 1 1 , 1 1x^0.2 + *1, 2 = а 2x+Х=ах0 , 0 + х 0 , 1+ х 0 , 2 = Ь оХ1 , 0 +Х 1 , 1 +Х 1 , 2 = bi0xl.
0 > 00xl , 1 > 02 ^ 0xl. 2 > 0o, о so, 1 ^o,sol :- Minimize ( f , х)sol =О210271450133f (sol) = 3.89 x 1 0Модель типичной транспортной задачи следующая. Пусть имеется ы предприятий-производителей, выпустивших продукцию в количестве ь 0 , . . . ,ь ы ±тонн. Эту продукцию требуется доставить м потребителям в количествеа„, . .. ,ам_! тонн каждому. Численное определение векторов а и ь находится в первой строке листинга.
Сумма всех заказов потребителей a t равнасумме произведенной продукции, т. е. всех bi (проверка равенства вовторой строке). Если известна стоимость перевозки тонны продукции отi-ro производителя к j-му потребителю c i : j ) то решение задачи задаетоптимальное распределение соответствующего товаропотока x i ; j с точкизрения минимизации суммы транспортных расходов. Матрица с и минимизируемая функция f (х) матричного аргумента х находятся в серединелистинга 8.15.208Часть III. Численные методыУсловия, выражающие неотрицательность товаропотока, и равенства, задающие сумму произведенной каждым предприятием продукции и суммузаказов каждого потребителя, находятся после ключевого слова Given.
Решение, присвоенное матричной переменной sol, выведено в последнейстроке листинга вместе с соответствующей суммой затрат. Обратите внимание, что для получения результата пришлось увеличить погрешность CTOL,задающую максимальную допустимую невязку дополнительных условий.В строке, предшествующей ключевому слову Given, определяются нулевыеначальные значения для х простым созданием нулевого элемента матрицыхЫ-1.М-1-Внимание!Если взять другие начальные значения для х, решение, скорее всего, будетдругим! Возможно, Вы сумеете отыскать другой локальный минимум, которыйеще больше минимизирует транспортные затраты. Это еще раз доказывает, чтозадачи на глобальный минимум, к классу которых относится линейное программирование, требуют аккуратного отношения в смысле выбора начальныхзначений.
Часто ничего другого не остается, кроме сканирования всей областиначальных значений, чтобы из множества локальных минимумов выбрать наиболее глубокий.8.7. Символьное решение уравненийНекоторые уравнения можно решить точно с помощью символьного процессора Mathcad. Делается это очень похоже на численное решение уравнений с применением вычислительного блока. Присваивать неизвестным начальные значения нет необходимости. Листинги 8.16 и 8.17 демонстрируютсимвольное решение уравнения с одним неизвестным и системы двух уравнений с двумя неизвестными соответственно.Листинг 8.16. Символьное решение алгебраического уравненияс одним неизвестнымGiven2х + 2 'X - 4 =Find и) ->( Vs-i -i-Vi )Листинг 8.17. Символьное решение системы алгебраических уравненийGivenх4 + у2-3 = Ох + 2 -у = ОГлава 8.
Алгебраические уравнения и оптимизация-1Find ( x , у/,121 /\2r(-2 +• Э •v л / 1 " )— • ("2 + 2 • JlSb)vA412/9 )41-1 /.\2( + 2 •УJ(-2-J 193)6209-14/,ч21-2 - 2 • л/193)v11 /.s2— 4 -(2 - 22• л/193)л/193 )S1 с— • (-2 - 24"I1/,.2(-2 - 2 • V ^ I )8Как видно, вместо знака равенства после функции Find в листингах следуетзнак символьных вычислений, который можно ввести с панели Symbolic(Символика) или, нажав клавиши <Ctrl>+<>. He забывайте, что сами уравнения должны иметь вид логических выражений, т.
е. знаки равенства нужно вводить с помощью панели Booleans (Булевы операторы). Обратите внимание, что в листинге 8.17 вычислены как два первых действительныхкорня, которые мы уже находили численным методом (см. разд. 8.3), так идва других мнимых корня. Эти два последних корня чисто мнимые, т. к.М Н О Ж И Т е Л Ь , ВХОДЯЩИЙ В Н И Х , р а в е н (-2 - 2 • -Jl93)2= 5.46 • i .С помощью символьного процессора решить уравнение с одним неизвестным можно и по-другому:1.
Введите уравнение, пользуясь панелью Booleans (Булевы операторы) илинажав клавиши <Ctrl>+<.> для получения логического знака равенства,например х2+2 х-4=о.2. Щелчком мыши выберите переменную, относительно которой Вы собираетесь решить уравнение.3. Выберите в меню Symbolics (Символика) пункт Variable / Solve (Переменная / Решить).После строки с уравнением появится строка с решением или сообщение оневозможности символьного решения этого уравнения.В данном примере после осуществления описанных действий появляетсявектор, состоящий из двух корней уравненияСимвольные вычисления могут производиться и над уравнениями, в которые, помимо неизвестных, входят различные параметры. В листинге 8.18приведен пример решения уравнения четвертой степени с параметром а.Как видите, результат получен в аналитической форме.I Листинг 8.18.
Символьное решение уравнения, зависящего от параметраGivenх- а=0F i n d ( х ) —> (a-ai•a-i-а)|210Часть III. Численные методыВ следующем разделе мы рассмотрим более подробно, как с помощьюMathcad можно численными методами решать подобные задачи.8.8. Метод продолжения по параметруРешение "хороших" нелинейных уравнений и систем типа тех, которые были рассмотрены в предыдущих разделах этой главы, представляет собой несложную, с вычислительной точки зрения, задачу. В реальных инженерныхи научных расчетах очень распространена более сложная проблема: решениене одного уравнения (или системы), а целой серии уравнений, зависящих отнекоторого параметра (или нескольких параметров). Для таких задач существуют очень эффективные методы, которые называются методами продолжения. Эти методы непосредственно не встроены в Mathcad, но могут бытьлегко запрограммированы с помощью уже рассмотренных нами средств.Будем далее говорить об одном уравнении, имея в виду, что всегда возможно обобщение результатов на случай системы уравнений.Пусть имеется уравнение f (a,x>=o, зависящее не только от неизвестного х,но и от параметра а.
Требуется определить зависимость его корня х от параметра а, т. е. х(а}. Простой пример такой задачи был приведен в предыдущем разделе в листинге 8.18. Тогда нам повезло, и решение в общем видебыло найдено с помощью символьных вычислений. Рассмотрим еще один,чуть более сложный пример, аналитическое решение которого также заранее известно, но с которым символьный процессор, тем не менее, не справляется. Обобщим задачу, добавив зависимость от параметра а следующимобразом:sin(a-x)=o.(1)Аналитическое решение этого уравнения находится из соотношения ах =ы-п,где N = O , ± I , ± 2 , .
. ., т.е. имеется бесконечное количество (для каждого ы)семейств решений xN=N-7i/a. Несколько из семейств для N=1,2,3 показанына рис. 8.10 тремя сплошными кривыми. Кроме того, следует иметь в виду,что для N=O, т. е. х=о, решением является прямая, совпадающая с осью х.Заметим (листинг 8.19), что символьный процессор Mathcad выдает в качестве решения только эту серию х=о.Листинг 8.19.