![]() ![]() ![]() ![]() ![]()
Раздел: Документация
0 ... 136 137 138 139 140 141 142 ... 177 3.Когда все исходные данные определены, нужно задать функцию, минимизация которой будет проюводнтъся. Функция зга, исходя из условий задачи, должна определять транспортные расходы. Ее неременные, очевидно, должны быть определены как объемы сырья, перевезенные от каждого производителя к каждому переработчику. Нетрудно догадаться, что переменных таких будет 6 (с каждой из трех ферм свиньи могут быть перевезены на два мясокомбината). Сумма же произведений их значений и величин стоимости перевозки 1 т по данному маршруту определит полные транспортные расходы. last(MK) hui(F) 4.Далее создаем вычислительный блок введением ключевого слова Given. В нем требуется определить все условия распределения переменных. Так. первые три уравнения устанавливают связь между двумя переменными, ссютветствукнцнми объемам сырья, отправленным каждому из производителей, с общим количеством купленного мяса. *0,0+ *1.0=F0. V2 + X1,2 = F2 Еще два уравнения связывают количество сырья, которое предстоит переработать каждому из мясокомбинатов, с переменными, отвечающими за долю каждого из производителей в этом количестве: Х1.0+Х1.1 + Х1.2=МК1 Также при определении условий требуется ввести ограничение на отрицательные значения переменных. Еслн этого не сделать, то почти наверняка матрица решений будет содержать отритительные элементы, что делает такое решение заведомо неверным: "СО20"0.2 й0 \0*°у2*0 5.Как вы помните, обязательным условием работы вычислительного блока является определение начальных значений переменных. Однако в случае работы с системами подобного рода совсем не нужно приближать все шесть переменных. Достаточно это сделать для одной (выражаясь более коррект но, для одного элемента матрицы переменных) — с наибольшими значениями индексов. Это поможет одновременно и определить порядок неизвестных, и задать размерность матрицы ответа. Так, в случае данной задачи выше ключевого слова Given указываем: 6. Далее, истгользуя функцию Minimize, определяем матрицу, содержащую информацию о наиболее выгодном распределении сырья: S :=Minimize(f,x) S = f 0 0 20 \\2 19 4 J Проверим для начала, соответствует ли такое распределение имеющемуся реально сырью: I(sf + Z(sf- Да, это действительно так. Определим теперь сумму транспортных расходов, Наиболее просто это можно сделать, перемножив соответствующие друг другу элементы матрицы решения и матрицы расстояний, и умножив это произведение на коэффициент транспортных расходов- Очевидно, что такие перемножения нельзя задать с помощью традиционного перемножения матриц. Для того чтобы произвести эту операцию нужным нам образом, воспользуемся специальным оператором векторизации (Vectorize) панели Matrix (Матричные) (подробнее об этом операторе вы можете прочитать в гл. 3): Pay--((RasP-S))TR Pay = 1.29бх К 1,2.304 xlO3 3.283 я I О3 955.2 w т\<0> w ril> ЗшпРНу:=(рауг) +2ЛРаУ) SutnPay = 7.R38 * Ц(* Анализируя матрицу ответа, нельзя не согласиться, что распределить сырье по такому принципу было бы весьма разумно. При решении задач лннейнош программирования принципиальным условием успеха является то, какой численный алгоритм вы используете. Впрочем, правильный выбор сделать совсем не сложно. Само прилагательное «линейное» подсказывает, какой из методов следует выбрать в контекстном меню функции Minimize: Linear, Если же вы предпочтете решать задачу такого рода нелинейными методами, то возможен целый ряд дополнительных проблем, связанных с их большей чувствительностью к начальному приближению и меньшей надежностью нахождения решения. Конечно, решенная задача — очень простая по сравнению со многими из тех проблем, которые могут быть решены с помощью приемов линейного программирования. В случае многих задач нам бы пришлось сканировать промежуток одной или нескольких переменных, чтобы из множества минимумов илн максимумов выбрать наибольший. Но разбирать такие примеры в этой книге мы не будем: все ходы, которые при этом нужно использовать, уже отлично вам знакомы, и в случае необходимости вы напишете соответствующий алгоритм самостоятельно. Глава 14. Дифференциальные уравнения Пожалуй, мы будем не столь уж не нравы, назвав дифференциальные уравнения самой интересной, по и при этом самой сложной проблемой, решаемой прикладной математикой. Вся современная физика, техника и даже, в некоторой мерс, экономика используют их для моделирования реальных процессов. И те точность и феноменальная предсказательная способность, которыми обладают дифференциальные уравнения, не могут не поражать. Все дифференциальные уравнения можно разделить на две большие группы. Если в уравнение входят производные только ни одной переменной, то оно называется обыкновенным дифференциальным уравнением (ordinary differential equation) — ОДУ. Если же его образуют Производные по разным переменным, то оно называется дифференциальным уравнением в частных производных или, в более традиционной терминологии, уравнением математической физики (partial differential equation). В Mathcad имеются встроенные функции для решения дифференциальных уравнений двух типов. В этой главе мы обсудим встроенные средства Mathcad для решения ОДУ и их систем, поговорим о краевых задачах, продемонстрируем, как можно в некоторых случаях найти решение в аналитическом виде. Отдельным вопросом разберем особенности жестких систем дифференциальных уравнений и дифференциальные уравнения математической физики. Кроме того, чтобы попять специфику решения различных уравнений средствами Mathcad, мы уделим особое внимание числетшм методам, лежащим в основе работы некоторых встроенных функции. 14.1. Аналитическое решение ОДУ и систем ОДУ Возможности символьного решения дифференциальных уравнений в Mathcad, к сожалению,довольно ограничены. Как известно, решением любого дифференциального уравнения является функц и я, обращающая это уравнение в тождество, поэтому найти напрямую, подобно алгебраическому уравнению, корпи ОДУ, каким бы оно ни было простым, нельзя в принципе Однако высочайший вычислительный потенциал символьного процессора в области интегральных преобразований, решения алгебраических уравнений и интегрирования позволяет в некоторых случаях довольно красиво и очень легко находить корни несложных ОДУ и даже систем ОДУ. О том, как это делается, мы и поговорим в этом разделе. 0 ... 136 137 138 139 140 141 142 ... 177 |