Mathcad и Maple: работа с размерными величинами
(Английский укороченный текст с некоторыми комментариями от Waterloo Maple, Inc. – http://twt.mpei.ac.ru/ochkov/Unit_MC_MP/Unit_MC_MP_eng.htm)
Другие статьи В.Очкова – http://twt.mpei.ac.ru/ochkov/work2.htm (in Russian)
http://twt.mpei.ac.ru/ochkov/work2_eng.htm
(in English)
В. Очков
Оглавление:
1.
Запуск Mathcad и Maple, «размерные» функции
2.
Естественность записи размерных величин
3.
Что находится между числовой константой и единицей измерения
4.
Разделение переменных и единиц измерения
5.
Встроенные и пользовательские системы измерений
7.
Одноименные физические величины
Приложение
Встроенные единицы измерения Mathcad и Maple
Internet-конвертор единиц
измерения – www.convert-me.com
В настоящее время при решении на
компьютере инженерно-технических задач наметилась стойкая тенденция перехода от
использования языков программирования[1] к работе с универсальными
математическими пакетами (Mathcad, Maple, MatLab,
Mathematica и др.). Математические пакеты позволяют на порядок ускорить
процесс создания расчетных проектов. Такое же ускорение наблюдалось при переходе от работы с машинными кодами к работе с языками
программирования. Среди перечисленных пакетов Mathcad выделяется тем, что он с самой
первой своей версии (начало 90-х годов) позволял вести расчеты с использованием
физических величин. Летом 2001 года
появилась седьмая версия Maple (http://www.maplesoft.com/products/Maple7/index.shtml) с единственной новинкой –
работа с единицами измерений (units). В данной статье сравниваются эти два пакета по их
возможностям и особенностям работы с физическими величинами.
Инструменты работы с размерными величинами Mathcad[2] и Maple[3] – это,
если говорить языком математики, множества пересекающееся,
но не совпадающие. Сравнение этих физматпакетов[4]
с точки зрения их «размерных» плюсов и минусов[5]
– задача не совсем корректная в
первую очередь потому, что размерные величины в Maple появились намного позже, чем в Mathcad. Естественно, разработчики Maple должны были учесть десятилетний опыт использования единиц
измерения в среде Mathcad. Еще одна,
сугубо субъективная некорректность, но уже не поставленной задачи (размерности
в Mathcad и Maple), а попыток ее решения. Автор ни в коей мере не может
считать себя специалистом в области метрологии. Тем не менее, автору приходится
не только решать, но и учить студентов решать задачи на компьютере с
привлечением физических величин. При этом «приходится решать» не только и не сколько саму задачу, а ряд мелких (с точки зрения не
метролога, а специалиста в конкретной научно-технической области) задач,
связанных с реализацией инструмента размерностей в той или иной программной
среде. Но попробуем все-таки решить такую некорректно (в квадрате) поставленную
задачу – сравним эти два пакета с точки зрения работы с физическими величинами
(и не только[6]):
При запуске пакет Mathcad по умолчанию[7]
сразу «подхватывает» одну из единиц измерения (SI – европейская версия (см. рис. 1)
или U.S. – американская[8]).
Запустив Maple необходимо
выполнить некоторые команды (подгрузить (with)
соответствующую библиотеку (Units) – см. рис. 2),
чтобы появилась возможность работы с единицами измерений. Без этого можно
только переводить (convert) единицы измерений в пределах
одной физической величины – см. пример на рис. 2.
В истории Mathcad
был случай, тоже связанный с Maple[9], когда
работа не с единицами измерения, а с символьной математикой требовала подгрузки соответствующей библиотеки (Mathcad 5.0). Потом от этой технологии
отказались. Но не совсем. К пакету Mathcad
разными разработчиками (авторами) предлагается ряд электронных книг по различным областям знаний, которые можно
открывать, изучать и переносить из них в рабочий документ нужные фрагменты
(операторы, тестовые вставки и др.). В среде Maple открываются (подгружаются) библиотеки – одна из которых носит
название Unit. Можно спорить о том, хорошо ли сразу предоставлять
пользователю Mathcad
возможность работы с единицами измерений. По правде
говоря, основная масса задач в среде Mathcad
решается без опоры на физические величины. В этом случае предопределенные
переменные kg, m, sec и т.д.
(см. пункт 4) могут только «путаться под ногами»,
(мешать, например, строить графики). В этом случае механизм размерных величин
лучше отключить («нажать» радиокнопку None в диалоговом окне, показанном на рис. 1).
Другой путь – при запуске Mathcad подгружать
шаблон, в котором единицы измерения
заранее выключены или перенастроены с SI
на альтернативную систему измерений – см. рис. 1.
В среде Maple после подгрузки библиотеки
работы с размерными величинами сразу выдается сообщение о том, какие
возможности открываются пользователю библиотеки Unit: работа с
дополнительными базовыми единицами измерений (AddUnit), с новой
физической величиной (AddDimension), с новой
системой измерений (AddSystem[10]) и т.д.
Кроме того, после использования ключевого слова Natural или Standard система Maple предупреждает о том, на какие встроенные функции и операторы
Maple эта библиотека
распространяется (см. далее рис. 4a и рис. 4b). В среде Mathcad такой
информации нет даже в документации. Только в «Советах дня[11]»
вскользь отмечается, что размерные величины не работают, например, в программах
Mathcad. В последних версиях пакета
это ограничение было снято, но совет не использовать единицы измерений в
программах остался.
Главный недостаток и Mathcad и Maple в том, что многие функции и операторы, вводившиеся в эти
пакеты еще до ввода инструментов работы с единицами измерений, не совсем
корректно работают с размерными аргументами и операндами. И главное, что
пользователь часто забывает об этих ограничениях и получает непонятные ответы.
Разработчикам Mathcad и Maple следовало бы либо распространить действие единиц
измерения на все функции и операторы[12],
либо заблокировать (сообщениями об ошибке, например) использование размерных
аргументов (операндов) в этих функциях (операторах)[13].
Разработчики Maple вполне
обоснованно называют этот пакет самым совершенным инструментом решения
дифференциальных уравнений. Но при «размерных» граничных
условиях такой задачи единицы измерения как бы «застревают» в ответе – см. рис. 4c. Это представляется несколько
странным, если учесть, что дифференциальные уравнения – это математическая
запись физических явлений, проявляющихся, например, в динамике[14].
(После выхода статьи в свет автор получил от разработчика Maple решение проблемы
единиц в дифференциальных уравнениях – см. рис. 4d: единицы измерения
вводятся в готовое решение). Можно считать, что инструменты работы с
размерными величинами – это недокументированные (плохо
документированные) инструменты, с которыми нужно работать очень осторожно,
проверяя каждый раз ответ в процессе отладки и тестирования программы. Это положение (ограничение) касается не только «экзотических»
функций и операторов (функций решения дифференциальных уравнений и систем,
например, и других), но и довольно рутинных инструментов Mathcad и Maple –
аппроксимации табличных зависимостей (типичный пример такой ошибки в Mathcad –
см. рис. 1a) или формирование
«размерной» функции пользователя и построение графиков (типичный пример такой
ошибки в Maple – см. рис. 2b).
На рис. 2а зафиксирована одна из типичных ситуаций при
работе с размерными величинами в среде Maple – функция пользователя создается со
«скрипом» («вылезло» непонятное «эхо» под строкой создания функции пользователя
Length:=Mass®…), тем не менее, «размерная» функция пользователя возвращает
правильный ответ, но «отказывается» работать при построении графика (plot), выдавая при этом
дезориентирующее сообщение об ошибке (несовместимые единицы измерения). В среде Mathcad при построении графиков
отключается механизм контроля размерностей, но сами графики зависимостей
размерных величин получаются вполне приемлемыми. На таких графиках несложно
менять градуировку шкал (менять метры на футы, например), подстраивая график
под оптимальное восприятие конкретного пользователя (см. рис. 1c). Ввод в расчеты размерных величин по
идее должен существенно облегчить и ускорить создание расчетных проектов за
счет, исключения переводных коэффициентов из формул, дополнительного контроля
правильности формул (метры невозможно сложить с килограммами, грубо говоря), работы
пользователя именно с теми единицами, к которым он привык, а не с теми, с
которыми предписано работать (с мм ртутного столба, например, а не со «всех
заколебавшими» паскалями[15])
по соображениям, никак не связанными с решаемой задачей. Но плохая документированность
инструментов работы с размерными величинами и их локальность (см. выше) может
не «облегчить и ускорить» этот процесс, а наоборот, усложнить и удлинить
(затянуть) его. Из-за этого пользователи Mathcad и Maple часто вынуждены либо
совсем «обезразмеривать» расчеты, переводя единицы
измерения в разряд комментариев, либо освобождаться от размерностей на
некоторых этапах расчетов. Так на рис. 1a можно избежать ошибки,
вызвав сглаживающую функцию line по-другому line(Length/m, Mass/kg), а к
ответу приписав (вернув) нужную размерность – b := b * m
и k := k * m/kg.
«Обезразмеривать»,
точнее, наоборот – обвешивать единицами измерения («клин клином вышибают»)
приходится и так называемые эмпирические формулы, формулы, связывающие не
физические величины, а конкретные единицы измерений (см. решение двух таких
задач в среде Mathcad – рис. 1d и рис. 1e). К эмпирическим
формулам применимо тоже правило, что и ко встроенным
функциям, правильность работы которых с размерными аргументами вызывает
сомнение (см. рис. 1a, например). При этом могут
возникать курьезы, связанные с тем, что люди стали воспринимать вполне «физические»
формулы с переводными коэффициентами как эмпирические. Типичный пример –
формула для расчета удельного расхода условного топлива по кпд электростанции
123/кпд. Формула возвращает безразмерную величину, которую необходимо
перемножить на г/кВт-ч при значении кпд, выраженных в
абсолютных единицах (0.33, а не 33). В среде Mathcad такой формуле нужно будет вернуть первоначальный
физический смысл, вспомнив, что теплотворная способность условного топлива
равна 7000 ккал/кг.
Особо следует отметить
поведение размерных величин в векторах и матрицах (массивах) Mathcad и Maple. «Массивные» (векторные и матричные) операторы и функции Mathcad в
основном правильно работают с размерными величинами, но при этом сами массивы
(вектора и матрицы) не могут хранить «разноразмерные»
элементы – см. рис. 1b. В среде Maple массивы могут
хранить такие элементы, но… – см. рис. 2b. Можно сказать, что
пакет Mathcad более честно работает с векторами и матрицами, чем пакет Maple.
Главный «конек» Mathcad, во многом определивший его
популярность, – это предельно удобный интерфейс
пользователя, проявляющийся, в частности, в том, что Mathcad-документ почти ничем не отличается
от документа, набранного в среде какого-либо текстового (Word, например) или научного (LaTeXa)
редактора и лишенного неких условных (программистских) символов, не относящихся
к сути решаемой задачи. Это положение полностью относится и к
единицам измерения – в среде Mathcad
физические величины отображаются в их естественном виде: 25 N, 40 cm2,
6250 Pa и т.д. – см. рис. 3. В среде Maple физические величины «обвешаны»
дополнительными символами: 25*unit(N), 40 [cm^2],
6250 [Pa]
и т.д. – см. рис. 4, мешающими видеть суть
задачи и ее решение. (При работе с «натуральными», а не со
«стандартными» единицами измерений лишних символов меньше, но они все же есть –
см. рис. 4b). В среде Mathcad смена единицы измерения проходит
незаметно для пользователя, вернее, «читателя» (рис. 3a): в Mathcad-документе не остается следов таких
преобразований. В среде Maple для этой операции нужно «особое приглашение»
функции convert – см. рис. 4a. Все это «утяжеляет» расчетный документ, «затеняет»,
физическую суть задачи.
Основной потребитель физматпакетов – это сфера образования[16]. А одна из основных «образовательных» ситуаций такая. Студент выполнил на компьютере расчетный проект (типовой, курсовой, дипломный, диссертационный) и передает его на проверку (на отзыв) преподавателю (рецензенту), который совсем не обязательно должен знать ту программную среду, в которой данный проект сделан. Всякие служебные слова[17] и символы, не относящиеся к сути решаемой задачи, мешают такой проверке, а в ряде случаев (чистое программирование) делает ее невозможной. Это положение полностью относится и к другой «образовательной» ситуации, которая становится все более и более частой, когда предмет изучается не по традиционным лекциям и учебникам, а через призму математических пакетов (физматпакетов), рабочие листы которых (worksheet) вставлены в электронные учебники или опубликованы в Internet (типичный пример – http://www.exponenta.ru/soft/Mathcad/learn/learn.asp
).[1] О
полном отказе от работы с языками программирования речь, конечно, не идет. Тут
можно говорить о совместной работе – расчетная методика разрабатывается и
отлаживается в среде какого-либо математического пакета, а затем отлаженные
формулы и алгоритмы компилируются с помощью языка программирования.
[2] Разработка фирмы MathSoft
Engineering & Education. Inc, (www.mathsoft.com)
[3]
Разработка фирмы Waterloo Maple.
Inc, (www.maplesoft.com)
[4] Ввод в эти матпакеты (математические пакеты) инструментов работы с размерными величинами превратил их в физматпакеты (физико-математические пакеты) не только по содержанию (физические задачи уже давно решаются на компьютере), но и по форме. С физическими величинами может работать и Derive (http://education.ti.com/product/software/derive/features/features.html), но автор этот пакет знает плохо.
[5] Понятия «плюс-минус» не совсем адекватны понятиям «хорошо-плохо», «достоинство-недостаток». Все относительно – плюсы при определенных условиях переходят в минусы и наоборот.
[6] Мы волей-неволей будем касаться и общих моментов работы в средах Mathcad и Maple. Автору уже доводилось сравнивать эти пакеты – см. главу «От Mathcad к Maple» в книге «Mathcad для студентов и инженеров» – http://twt.mpei.ac.ru/ochkov/mc8Pro.book/index.htm
[7] …которое, естественно, можно нарушить.
[8] В среде Maple она называется FPS – фут (Foot), фунт (Pound), секунда (Second). В этом отличии (FPS или U.S.) можно узреть не только метрологический, но и политический резон: родина Mathcad – США, а Maple – Канада.
[9] В пакет Mathcad встроена символьная математика из Maple.
[10] Размерные величины в Mathcad и Maple базируются на трехуровневой иерархии – Система Единиц, Физическая величина (Размерность) и Единица измерения.
[11] Короткие подсказки (Tips), появляющиеся при запуске Mathcad. Как правило, пользователи эту опцию отключают.
[12] Задача,
честно говоря, очень трудоемкая. Никто не будет переделывать функции, созданные
десятилетия назад – их нужно создавать и тестировать заново. Но такая работа
ведется. В Mathcad 11,
например, подправлены функции округления чисел (round, floor и др.)
так, чтобы они правильно работали и с размерными переменными (см. рис. 4f).
[13] Так делается в среде Mathcad по отношению к новым функциям. Например, финансовые функции, введенные в Mathcad 2000, выдают сообщения об ошибке, если им подсовывают размерные аргументы, – искусственно созданные единицы стоимости (см. далее рис. 13). Услуга эта часто здесь оказывается «медвежьей», т.к. размерные величины без сбоев но «недокументированно» работают во многих встроенных функциях, о чем, по-видимому, не знают даже создатели этих функций.
[14] Автор придерживается того мнения, что учить студентов технических вузов дифференциальному исчислению на абстрактных, а не сугубо «физических» примерах – это прививать им отвращение к математике, которое очень долго (а в ряде случаев и никогда) не преодолеют дипломированные инженеры. Такое же примерно отвращение неверным содержанием и методикой прививают школьникам к литературе учителя этого предмета (изящная словесность!!!).
[15] Паскаль – это очень неудачная основная единица давления. Трудно припомнить научно-техническую область, где бы эта единица использовалась без множителей.
[16] Этот
факт отразился, например, на истории изменения названия фирмы-владельца
Mathcad. Раньше она называлась MathSoft, Inc., а теперь – MathSoft Engineering & Education, Inc.
[17] А они, в основном, прописаны по-английски, что еще более усугубляет процесс проверки неанглоязычным преподавателем.
[18] Пробел в физических величинах может означать и сложение: 10 ч 20 мин. Тут, кстати говоря, на месте пробела иногда ставят и знак деления (10:20), нагружая его совсем другой функцией – тем же сложением. Еще один пример – квт-час. Здесь минус (дефис) опять же играет роль умножения. В среде Mathcad все эти «человеческие» условности реализуются довольно просто, а в среде Maple – нет.
[19] Здесь следовало бы написать Δt := 90 ∙ ºC или Δt := 90 x ºC.
[20] Это самая «любимая» автором физическая величина из «великолепной семерки SI» – автор по образованию инженер-теплоэнергетик и работает в Московском энергетическом институте (www.mpei.ac.ru). Отсюда и такой интерес к температуре, являющейся «главной» физической величиной в термодинамике и теплопередаче – базовых научных дисциплин тепловой энергетики.
[21] К этим двум относительным температурным шкалам в среде Maple добавлены еще две – шкала Реомюра и так называемая стоградусная шкала (устаревшая шкала Цельсия).
[22] Такое давление показывают манометры, установленные на всасывающей и напорной линиях насосов. Если предположить, что эти два манометра окружают два разных атмосферных давления, а сами манометры отградуированы по разным шкалам (atm и psi, например), то это будет полностью воспроизводить метрологическую задачу, решаемую на рис. 6.
[23] …И для других программных сред (Excel, языки программирования). Пакет Mathcad выделен потому, что в нем полностью реализован механизм размерных величин, в том числе и «капризной» температуры.
[24] Напомним, что бел – это десятичный логарифм отношения двух физических величин одной размерности, непер – натуральный логарифм этого отношения, а децибел – одна десятая бела. Как правило, эти единицы (особенно, децибел) связывают с силой звука. Но логарифмические шкалы можно приложить к любым физическим величинам.
[25] Можно, конечно, вместо пользовательской переменной L ввести в расчет переменную L1, например. Решение проблемы лежит через использование механизма стилей переменных.
[26] Здесь, честно говоря, можно было обойтись двумя системами SI и U.S. Системы МКS и CGS оставлены в Mathcad для совместимости со старыми версиями пакета. Так в DOS-версиях Mathcad можно было работать только с длинной, массой и временем.
[27] Мало кого, например, интересует процесс производства электроэнергии (давление пара в котле, скорость вращения ротора паровой турбины и т.д.), но всех касается такая политико-технико-экономическая величина, как стоимость электроэнергии – коп/квт-час.
[28]
Кандела, честно говоря, в SI
втянута «за уши» – для того, чтобы довести число
основных физических величин до семи – до «красивого» числа.
[29] По-видимому, вовлечение единиц измерения в компьютерные расчеты потребует пересмотра «Соглашения о Мерах и Весах», многие положения которых носят печать некоего сговора в более-менее положительным аспекте этого слова. Теперь нужно сговариваться по-новому, учитывая возврат единиц измерения в компьютерные расчеты.
[30] Антуан Анри Беккерель (1852-1908) вместе с супругами Кюри получил Нобелевскую премию за открытие радиоактивности.
[31] Есть такая «метрологическая» шутка. Если ток в розетку поступает от обычной электростанции, то его частоту измеряют в герцах, а если от атомной – то в беккерелях.
[32] Ведение компьютерных расчетов с использованием единиц измерения предотвращает многие ошибки некорректной работы с размерностями – нельзя, например, сложить метр с килограммом.
[33] Семь потому, что это… красивое число. В данной статье семь пунктов, хотя на самом деле отличий между Mathcad и Maple в использовании размерных величин, конечно, не семь, а намного больше.
[34] В этом случае арксинус, например, должен возвращать сугубо размерное число (2 rad или 30 deg, например). В связи с этим встает вопрос, что делать, если аргумент функции arcsin по модулю окажется больше единице. Будет возвращено комплексное размерное число. Можно ли с ним работать!? Что такое мнимый килограмм или метр, например!?
[35] Если этот процесс не «подхватит» MatLab, то он может поотстать в гонке физматпакетов. Правда в составе MatLab есть пакет Power System Blockset (моделирование электроэнергетических систем в среде утилиты Simulink), в котором доступны следующие единицы: время (s), длина (m), масса (kg), электрический ток (A), а также некоторые составные единицы (J, V, Hr, W, Ω, H, F и N).
[36] Типичная ошибка: в одном месте расчета фигурируют атмосферы, а в другом – бары. Вот вам и ошибка, которую трудно выявить из-за того, что две эти единицы давления близки по своему значению (бары – это атмосферы SI).