MathCAD


Рис. 1.15. Задача о балке: решение I - часть 2


Ввод размерности в ряде случаев может и должен избавить программиста-прикладника от задания типа переменной. Пусть компилятор сам разбирается, сколько памяти ему отводить под хранение, например, значения угла с принятой в научно-технических расчетах точностью. Число байт под хранение физической величины, как правило, одно и тоже, если использовать «уравнивающие» множители милли, кило, Гига и т.д. В языке BASIC есть зачатки такого автоматического управления памятью компьютера – вспомним цепочку присвоений, когда переменные захватывают и свое значение, и размер памяти, отводимый под их хранение: A = 20%, B = 1&, C = 2.2!, D = 3.3# и Е = 4.4@. В языке программирования, встроенном в Mathcad (см. этюд 6), возможно присваивание переменным размерности (рис. 6.15).

Но нужно помнить, что более-менее сложная система нелинейных уравнений окажется не по зубам не только пакету Mathcad, но и другим мощным пакетам – Mathematica, Maple, Gauss и др. Пакет Mathcad в такой ситуации выдаст сообщение Did not find solution (Решение не найдено), заставляя пользователя поневоле переходить к полуавтоматическому режиму – менять значения начального приближения и (или) величину точности TOL (TOLerance – точность, погрешность), а также метод поиска решения (Mathcad 8) – рис. 1.8. Функция Find решает систему так, чтобы левые и правые части входящих в нее уравнений отличались на величину, не превышающую значения TOL[18]. Это предопределенная (системная) переменная среды Mathcad, хранящая по умолчанию значение 0.001, которое можно изменить, записав в Mathcad-документе выражение TOL:=0.0000001, например. Но и это часто не помогает. В коллекции автора (химика по специальности) есть Mathcad-задача поиска значения pH (водородного показателя) буферного водного раствора, сводящаяся к решению системы из восьми нелинейных алгебраических уравнений. Так вот, только при строго определенных начальных условиях пакет Mathcad находит правильное решение. Шаг влево, шаг вправо – расстрел: малейший отход от начальных условий, и слово Find «обливается кровью» и появляется соответствующее сообщение об ошибке. Но эта же задача в неограниченном диапазоне исходных данных прекрасно решается последовательными приближениями с поиском в цикле корня одного-единственного уравнения. Отход от лобовой атаки (от использования конструкции Given-Find) возможен лишь в том случае, если система уравнений не абстрактная, какие обычно приводятся в задачниках по математике, а реальная, отображающая конкретную прикладную (физическую, химическую, биологическую и т.д.) задачу. Кроме того, прикладник (физик, химик, биолог и т.д.), решая задачу, может сделать разумные допущения, линеаризирующие, например, некоторые выражения или уменьшающие их число. Другое важное преимущество метода последовательных приближений состоит в том, что прикладник, зная физику задачи, может менять точность расчетов при обработке выражений, входящих в систему. В блоке же Given-Find, как было уже отмечено, это недопустимо. В нем можно лишь смягчить эту проблему с другого конца – ввести в выражения балластные (нормирующие) коэффициенты, уравнивающие их по отношению друг к другу и позволяющие им решаться с одной точностью. А это опять же потеря физики в угоду математике. Но тем не менее все перечисленные ухищрения часто остаются тщетными из-за того, что система просто... не имеет решения, да и вся задача ориентирована не на поиск корней, а на минимизацию некоторых величин. В этом случае функция Find заменяется на функцию Minerr (MINimal ERRor). С помощью блока Given-Minerr можно решать обширный класс оптимизационных задач, о чем мы еще поговорим в этюдах 2 и 3.




- Начало -  - Назад -  - Вперед -