MathCAD

d7c8102a

Расчет кпд цикла Ренкина (работа функции пользователя)


Эту функцию можно использовать в новых расчетах, например, при определении реального, а не теоретического кпд реальной тепловой электростанции[84].

Если в программе есть цикл (не термодинамический, а цикл выполнения блока операторов), то его можно развернуть: дублировать операторы блока или вести расчет по этому блоку столько раз, сколько нужно. Так мы поступали, «беспрограммно» решая задачу о рыбаках и рыбке (рис. 6.22) и краевую задачу об эпидемии (рис. 5.1-5.4). Кроме того, не следует забывать о встроенных в Mathcad-функцях if и until, реализующих основные структурные конструкции (выбор и повторение) вне программ. На рис. 6.1 с помощью этих функций «запрограммирован» сложный алгоритм – поиск корня алгебраического уравнения методом половинного деления.

2. Да, в среде Mathcad специализированных средств отладки программ нет. Но они есть в других популярных программных средах: Visual Basic, Visual C, Delphi: и др. Задуманный алгоритм можно сначала реализовать и опробовать в «настоящих» программных средах, а потом уж переписать для Mathcad. Так мы поступали, решая задачу о рыбаках и рыбке (рис. 6.23 и 6.24) или составляя программы поиска корня алгебраических уравнений методом половинного деления и методом Ньютона, а также при поиске минимума методом золотого сечения. Автор задачу о трехсторонней дуэли (рис. 6.36-6.40) сначала поставил, а, главное, отладил в среде языка Visual Basic, а уже потом переписал для Mathcad, где это сразу сделать не удалось.

Воспользоваться этим советом можно лишь в том случае, если в программе нет специфических Mathcad-операторов и функций, отсутствующих в «настоящих» языках.

3. Создавая программу-функцию, на первом этапе стоит сделать так, чтобы она возвращала не только значение «одноименной» переменной, но и некоторых других, задействованных в расчете. Для этого достаточно в конец программы поставить не имя главной переменной, а какой-либо локальной, вспомогательной. Можно все переменные, задействованные в расчете, объединить в вектор и выдать их все на дисплей.


В Mathcad- программу можно вставлять своеобразные точки останова (BreakPoint): операторы return X, где X – это какая-либо локальная переменная программы. После отладки эти операторы убираются совсем или нейтрализуются таким оператором: return X if 2<1.

Если программа зацикливается и ее приходится прерывать нажатием клавиши Esc (текущие значения локальных переменных при этом просмотреть, увы, невозможно), то можно посоветовать в подозрительный цикл вставить дополнительный счетчик. Расчет будет безаварийно завершен, когда значение счетчика достигнет заданной программистом величины.

4. Если функция имеет ограниченный набор значений аргументов и/или возвращает ограниченный набор значений, то стоит не полениться и протестировать функцию глобально. Так, на рис. 3.14 в этюде 3 одноместные, двуместные и трехместные логические функции при тестировании возвращают все, что от них требовалось: у функции Not(x) два значения, у функций And(x1, x2) … AntiOr(x1, x2) – четыре значения, а у функции Решение(х1, х2, х3) – восемь.

5. Случай, описанный в пункте 4, довольно редкий. Если аргументы функции имеют действительные значения[85]

и (или) она возвращает действительные числа, то стоит проверить работу новоиспеченной функции в «экстремальных условиях» – на границах допустимых значений.

6. Вот хорошее правило: после создания программы ей нужно «подсунуть» условия задачи, решение по которым заранее известно. Так, на рис. 6.17-6.20 Mathcad-программы возвращают корни алгебраического уравнения, используя различные способы (метод половинного деления, метод Ньютона, метод секущих). Анализируемое уравнение у нас было простое: х2 - 3 = 0, корни которого известны заранее: плюс-минус квадратный корень из трех. На рис. 6.5 показаны программы решения обыкновенных дифференциальных уравнений и систем методом Рунге ¾ Кутты. Прежде чем с помощью этих функций заняться решением задачи о развитии эпидемии, мы «потренировались» на «кошечках»: рассчитали с их помощью значение основания натурального логарифма (число е).



7. Решая поставленную задачу, нужно постараться разбить ее на отдельные блоки и оформить их в виде отдельных коротких программ[86]. Это позволит локализовать ошибку и облегчить ее поиск. Объемная Mathcad-программа, в которую вкралась ошибка (ошибка алгоритма или ошибка в использовании инструментов Mathcad) – это что-то неисправимое ¾ «вещь в себе». Так, решая задачу о трехсторонней дуэли (рис. 6.36-6.40), мы выделили в отдельные функции такие действия стреляющего, как определение самого меткого противника и пересчет противников, стреляющих лучше[87]. Эти функции были протестированы и только потом стали вызываться из основной программы.

Разбивать на отдельные блоки программу целесообразно не только для оформления в функции, но и просто для отладки, для конструирования. Mathcad в этом отношении обладает уникальными возможностями: отдельные блоки программы (тело цикла, плечи альтернатив) из программы можно изъять и расположить вокруг. На рис. 6.53 изображена «разъятая» программа поиска минимума методом золотого сечения (ее рабочий вариант см. на рис.6.26). В самой же программе остались «местодержатели» (placeholder).


Содержание раздела