16. Тема 4. Создание программных фрагментов в MathCad. Краткие теоретические сведения
16. Тема 4. Создание программных фрагментов в MathCad. Краткие теоретические сведения
Система MathCad позволяет создавать программные фрагменты для вычисления алгоритмов, которые нельзя реализовать базовым набором средств и методов Mathcad.
Программный фрагмент можно использовать в операторе «=» или в правой части оператора «:=». Слева в операторе «:=» может находиться либо переменная, либо пользовательская функция.
Программный фрагмент состоит из строк программы, каждая из которых может содержать операторы программы.
Для создания программного фрагмента используется панель программирования, Кнопки которой имеют следующее назначение:
Add Line — Создание и расширение программного фрагмента;
— Оператор внутреннего локального присваивания.
IF — Оператор условия.
FOr — Оператор цикла с заданным числом повторений.
WHile – оператор цикла с предусловием.
Оtherwise — Оператор "иначе", обычно используется совместно с If для выполнения действий в случаи невыполнения условия.
Break — Оператор прерывания работы программного фрагмента.
Сontinue — Оператор продолжения работы цикла после прерывания.
Ниже приведен общий вид операторов программного фрагмента, рассмотрены правила их выполнения.
Общий вид оператора If:
Выражение if условие
Порядок выполнения: если логическое выражение, стоящее в Условии, истинно, то вычисляется Выражение, стоящее слева от оператора if.
Общий вид For :
For Var Î Nmin .. Nmax.
Nmin.. Nmax – Диапазон изменения переменной цикла, организуется по правилам формирования дискретных переменных.
Порядок выполнения: переменную цикла Var изменяет свое значение в пределах от Nmin До Nmax с шагом 1 или -1, при каждом новом значении переменной цикла выполняется рабочая часть цикла.
Общий вид WHile:
While условие
Рабочая часть цикла записывается на месте шаблона
Порядок выполнения: рабочая часть цикла выполняется до тех пор, пока логическое выражение, стоящее в условии, истинно.
Результаты работы программного фрагмента передаются следующим образом: во внешнюю вычислительную область из программного фрагмента передается значение последнего выражения, вычисленного в программном фрагменте или значение переменной, имя которой записано в последней строке программы.
На рисунке 2.4.1 приведены примеры программных фрагментов. Из примера 1 видно, что программный фрагмент, реализующий линейный алгоритм, может заканчиваться оператором «=», а может быть присвоен переменной, например, k. Программный фрагмент может участвовать при создании пользовательской функции, например, y(x), которая затем вычисляется при конкретном значении ее аргумента, например, 3. Внутренние переменные программного фрагмента являются неопределенными вне его, например, переменная z, которая использовалась в программном фрагменте, не имеет конкретного числового значения вне его.
Рисунок 2.4.1 – Примеры программных фрагментов
Пример 2 демонстрирует программирование разветвляющихся и циклических алгоритмов. Для реализации разветвляющихся алгоритмов формируется пользовательская функция a(b), которая вычисляется по разным аналитическим зависимостям при различных значениях аргумента. Показана возможность вычисления этой функции в разных точках: при b равном -4, 9 и 15. Программирование циклических алгоритмов продемонстрировано на двух задачах. При решении задачи поиска суммы целых чисел от 1 до 5 применяется программный фрагмент с циклом for, результат получается с помощью оператора «=». Во второй части примера решается задача поиска суммы целых четных чисел от 0 до 10 с помощью оператора цикла while. Результат вычисления присваивается переменной h, хотя внутри цикла для накопления суммы используется переменная s.
Работа с формулами в PTC Mathcad
Как правило, пользователям приходится осуществлять в PTC Mathcad расчет формул, которые оформляются следующим образом:
- Символьная запись формулы;
- Запись формулы с заданными параметрами;
- Непосредственно расчет с результатами.
Пример выполнения данного ряда функций можно увидеть на рисунке ниже:
Благодаря этой статье вы узнаете, как функции float и explicit упрощают редактирование формул в процессе работы с программным компонентом PTC Mathcad.
Первым делом нужно определиться с переменными, из которых собственно и состоит конкретная рабочая формула, присвоив им соответствующие численные значения:
После этого можно задать имя итоговой переменной и требуемое выражение:
Обычно панель рабочих символов изначально открывается при запуске системы PTC Mathcad. В противном случае её можно открыть самостоятельно, перейдя на вкладку Вид. Там необходимо будет отыскать специальную Панель инструментов и открыть еще одну вкладку под названием «Символьные». Теперь в строке выражения заданных инструментов достаточно будет выбрать команду explicit. Она автоматически присвоит буквенным параметрам требуемые значения формулы. После выполнения всех этих процедур на рабочем поле отобразится специальный оператор в виде курсора. Рядом высветится уже знакомое слово explicit.
Для грамотного расчета формулы нужно будет вручную ввести команду ALL через запятую от explicit. Она выступит в роли модификатора, который указывает на необходимость подстановки в формулу всех имеющихся переменных. После этого за пределами выражения команды нужно будет нажать левую клавишу мышки, чтобы получить результат расчета:
Если вы хотите задать конкретное число знаков после запятой, которое должно отобразиться на экране в результате расчетов, тогда через выражение с помощью курсора можно воспользоваться еще одной полезной функцией – float:
После соответствующей надписи в специально отведенном месте необходимо будет записать требуемое число десятичных разрядов. Таким образом, вы зададите точность расчетов, которая будет сохраняться при любых вычислениях и в случаях подстановки таких результатов в дальнейшие расчеты:
Теперь останется только спрятать ключевые слова и избавиться от стрелок, которые нужно будет в обязательном порядке заменить символами равенства. Аналогичные изменения должны также коснуться имеющихся операторов присваивания. Выделив требуемое выражение с помощью правой клавиши, достаточно будет запустить функцию «Отображать определение как» и в специальном разделе выбрать «Знак равенства», как видно из рисунка ниже:
Так непривычные операторы присваивания преобразятся и примут облик знакомого нам всем знака «равно»:
Теперь нужно будет зафиксировать выражение с вычислениями с помощью курсора и тоже задать «Знак равенства» в графе «Отображать вычисления как»:
Только на данном этапе расчета стрелки будут автоматически заменены традиционными знаками равенства:
Повторным нажатием правой клавиши в районе выражения вы сможете выполнить функцию «Скрыть ключевые слова»:
Данная процедура позволит пользователю спрятать лишние команды и функции из виду, чтобы привести формульные выражения к требуемому внешнему виду:
Если вы работаете с PTC Mathcad Prime, порядок подстановки значений в формульную функцию остается без изменений. Единственным недостатком такого программного средства является отсутствие возможности прятать ключевые слова команд и менять внешний вид операторов:
Тест «Модуль MathCAD-Основы вычислений»
Вопрос 1. В программе, определения вектора, найти ошибочный оператор:
Вопрос 2: Требуется задать вектор нечетных чисел. Что выдаст последний оператор программы, приведенной ниже?
Варианты ответов: 1 — вектор достоверный;
2 — вектор недостоверный (правильно);
3 — таблицу значений.
Вопрос 3: Указать тип ошибки в программе:
2 — несоответствие типов переменных во втором операторе (правильно).
Вопрос 4: Указать лишний элемент в записи переменной диапазона
3 – любой из «0,», «5,», «,10» (правильно).
Вопрос 5: Как можно определить является ли набор символов приведенный ниже, в вычислительной области MathCad текстом или идентификатором?
1 — путем выделения (правильно);
2 – с помощью контекстного меню.
Вопрос 6: Сколько панелей инструментов в MathCad?
2 -три (правильно);
3 — больше трех (правильно, но . );
4 — три и палитра математических панелей (правильно )
Вопрос 7: Указать правильное выражение для определения суммы элементов вектора, используя параметры по умолчанию
1 — первое выражение;
2 -второе выражение (правильно);
3 — третье выражение.
Вопрос 8: Чему в обычной математической записи, соответствует оператор MathCad
1 – «sin 2 x» (правильно);
Вопрос 9: Указать типы ошибок в программе:
1 — порядок вычислений (правильно);
2 — несоответствие начального индекса в выражении для S (правильно);
3 — несоответствие типов переменных;
4 — несоответствие начального индекса в выражении для D.
Вопрос 10: Что определяет системная переменная ORIGIN?
1 — начальное значение индексов матриц (правильно)
2 — количество знаков после запятой
3 — точность вычислений
Вопрос 11: Справедлива ли запись ?
Варианты ответов: 1 — нет (правильно) 2-да
Вопрос 12: Какую константу можно переопределять?
Варианты ответов: 1 — TOL (правильно).
Вопрос 13: Символ % в MathCad это:
2 — константа (правильно);3 – оператор.
Вопрос 14: Следует ли переводить в одну систему измерений данные для решения физических задач с величинами, имеющими размерности?
2 — нет (правильно).
Вопрос 15: В MathCAD знак Q означает:
2 — собственное число;
3 – константа (правильно).
Вопрос 16: Как в текстовую область вставить вычислительную?
1 — выполнить команду Правка/Текстовая область;
2 — выполнить команду Вставка/Текстовая область (правильно);
3 — выполнить команду Редактировать /Текстовая область.
Вопрос 17: Можно ли в вычислительной области использовать буквы русского алфавита?
1 — нет (правильно);
Вопрос 18: Какой тип присвоения определяет переменную в любом месте программы?
1 — глобальное (правильно);
Вопрос 19: Локальное присвоение определяет переменную:
1 — в любом месте программы;
2 — ниже и правее (правильно);
3 — выше и правее;
4 — ниже и левее.
Вопрос 20: Что вернет оператор в результате вычислений?
Вопрос 21: С помощью какого знака следует добавлять размерности к значениям именованных величин?
3 — возведения в степень;
4 — умножения (правильно).
Вопрос 22: Что вернет последний оператор?
3 – таблицу значений (правильно).
Вопрос 23: Является ли оператор, приведенный ниже, функцией пользователя?
2 – нет (правильно).
Вопрос 24: Какое выражение есть Функция пользователя?
2 — третье (правильно);
Вопрос 25: Элементами вектора могут быть:
1 — числа (правильно)
2 — выражения (правильно)
3 — функции (правильно)
Вопрос 26: Могут ли быть параметры условных операторов условными выражениями?
Научная электронная библиотека
Рассмотрим некоторые стандартные функции системы MathCAD. Введем специальные обозначения для аргументов функций. Пусть первый символ имени аргумента обозначает его тип:
M – квадратная матрица;
V – вектор (матрица из одного столбца);
A – произвольная матрица;
S – симметричная матрица;
G – произвольная матрица или число;
X – вектор или число;
Z – комплексная матрица или число;
z – комплексное число;
прочие символы – скалярные величины.
Экспоненциальные и логарифмические функции
exp(X) – экспонента от X;
ln(X) – натуральный логарифм от X;
log(X) – десятичный логарифм от X;
log(X,b) – логарифм от X по основанию b.
Гиперболические и тригонометрические (прямые и обратные) функции
sin(X), cos(X), tan(X), cot(X), sec(X), csc(X) – соответственно синус, косинус, тангенс, котангенс, секанс, косеканс от X, причем аргументы указываются в радианах;
sinh(X), cosh(X), tanh(X), coth(X), sech(X), csch(X) – аналогичные гиперболические функции;
asin(z), acos(z), atan(z), acot(z), asec(z), acsc(z) – соответственно арксинус, арккосинус, арктангенс, арккотангенс, арксеканс, арккосеканс от z.
Функции для работы с комплексными числами
Re(Z), Im(Z) – соответственно вещественная и мнимая части комплексного числа Z;
arg(z) – аргумент комплексного числа z (в радианах).
length(V) – возвращает число элементов вектора V;
cols(A) – возвращает число столбцов матрицы A;
rows(A) – возвращает число строк матрицы A;
matrix(m, n, f) – матрица размером mxn, значения элементов матрицы определяются f – функцией f (i, j) от двух переменных (номера строки и номера столбца). Эта функция должна быть предварительно определена пользователем;
identity(n) – единичная матрица n×n;
tr(M) – след матрицы M (сумма элементов главной диагонали);
rank(A) – ранг матрицы M;
norme(M) – эвклидова норма матрицы M, то есть корень квадратный из суммы квадратов всех элементов;
eigenvals(M) – вектор, элементы которого являются собственными числами матрицы M;
eigenvecs(M) – матрица, состоящая из нормализованных собственных векторов матрицы M;
cholesky(S) – возвращает нижнетреугольную матрицу L – результат разложения Холецкого вида L∙LT = S;
lu(M) – возвращает матрицу размера n×3n, состоящую из трех соединенных матриц P, L, U, являющихся результатом LU-разложения вида P∙M = L∙U.
Пример вычислений с матричными функциями: нахождение собственного числа путем решения матричного уравнения det(M – λE) = 0 и с помощью функции eigenvals.
Элементы статистического анализа данных
gmean(G1,G2,G3…) – среднее геометрическое аргументов;
mean(G1,G2,G3…) – среднее арифметическое аргументов;
stdev(G1,G2,G3…) – среднеквадратичное отклонение.
fft(V1), ifft(V2) – прямое и обратное быстрые преобразования Фурье над вещественными данными. V1 – вектор из 2m элементов, V2 – вектор из 1 + 2m–1 элементов, m > 2;
cfft(A), icfft(A) – прямое и обратное преобразования Фурье над вещественными и комплексными векторами и матрицами;
wave(V), iwave(V) – прямое и обратное вейвлет-преобразования, V – вектор из 2m элементов, m – целое число.
Аппроксимация, интерполяция и экстраполяция
Аппроксимация – поиск функции, которая с заданной степенью точности описывает исходные данные.
Интерполяция – определение наиболее правдоподобных промежуточных значений в интервале между известными значениями (подбор гладкой кривой, проходящей через заданные точки или максимально близко к ним).
Экстраполяция – определение наиболее правдоподобных последующих значений на основании анализа предыдущих значений (предсказание дальнейшего поведения неизвестной функции).
Применяются следующие функции MathCAD:
regress(VX,VY,k) – возвращает вектор данных, используемый для поиска интерполирующего полинома (a0 + a1x + a2x2 + . + akxk) порядка k. Полином должен описывать данные, состоящие из упорядоченных значений аргумента (VX) и соответствующих значений неизвестной функции (VY), то есть график полинома должен проходить через все точки, заданные координатами (VX, VY), или максимально близко к этим точкам;
interp(VS,VX,VY,x) – возвращает интерполированное значение неизвестной функции при значении аргумента x. VS – вектор значений, который вернула функция regress. VX,VY – те же данные, что и для regress. Функции interp и regress используются в паре;
predict(V,m,n) – возвращает вектор из n предсказанных значений на основании анализа m предыдущих значений из вектора V. Предполагается, что значения функции в векторе V были получены при значениях аргумента, взятых последовательно, с одинаковым шагом. Используется алгоритм линейной предикции. Наиболее целесообразно использовать predict для предсказания значений по данным, в которых отмечены колебания.
Для интерполяции система MathCAD использует подход, основанный на применении метода наименьших квадратов.
Примеры интерполяции и экстраполяции:
1.5.1. Пусть заданы координаты пяти точек (1; 1), (2; 2), (3; 3), (4; 2), (5; 3), представляющих результаты измерения значений некоторой неизвестной функции при различных значениях x. Необходимо подобрать интерполирующую функцию (гладкую кривую), проходящую через заданные точки.
1.5.2. Дана функция y(i) = e–i/10∙sin (i). Известны значения данной функции при i = 0, 1, …, 10. Основываясь на десяти последних значениях, необходимо предсказать последующие десять значений.
Решения показаны на рис. 19.
Рис. 19. Решения в MathCAD первой (а) и второй (б) задач
Нахождение корней полинома
polyroots(V) – возвращает вектор, содержащий все корни полинома a0 + a1x + a2x2 + . + akxk, заданного вектором-столбцом коэффициентов
max(G1,G2,…) – максимальное значение среди аргументов;
min(G1,G2,…) – минимальное значение среди аргументов;
if(a,b,c) – возвращает b, если a ≠ 0, иначе возвращает c;
sign(a) – возвращает –1, 0 или 1 в зависимости от знака числа a.