
- •Темы и объем лабораторных занятий (академические часы)
- •Введение
- •Лабораторная работа №1 Основы работы с MathCad Цель работы
- •Методические указания
- •Операторы
- •Типы данных
- •Функции
- •Текстовые фрагменты
- •Графические области
- •2. Traces (след) – управляет параметрами линий, которыми строится график
- •3. Labels (метки) – установка надписей по осям и титульной надписи
- •4. Defaults (умолчание) – задание режима по умолчанию
- •Порядок выполнения лабораторной работы
- •Вопросы для самоконтроля
- •Лабораторная работа № 2 Работа с векторами и матрицами в системе mathcad Цель работы
- •Методические указания
- •Задание на лабораторную работу
- •Вопросы для самоконтроля
- •Лабораторная работа №3 Решение систем уравнений Цель работы
- •Методические указания
- •Задание на лабораторную работу
- •Вопросы для самоконтроля
- •Лабораторная работа №4 Решение нелинейных уравнений Цель работы
- •Методические указания
- •Метод половинного деления
- •Метод хорд
- •Метод Ньютона
- •Метод простой итерации (последовательных итераций)
- •Задание на лабораторную работу
- •Вопросы для самоконтроля
- •Лабораторная работа №5 Интерполяция функций Цель работы
- •Методические указания
- •Задание к лабораторной работе
- •Вопросы для самоконтроля
- •Лабораторная работа № 6 Аппроксимация функций. Построение регрессионных зависимостей методом наименьших квадратов. Цель работы
- •Методические указания
- •Задание к лабораторной работе
- •Вопросы для самоконтроля
- •Лабораторная работа №7 Основы программирования в пакете MathCad Цель работы
- •Методические указания
- •Задание на лабораторную работу
- •Задание к лабораторной работе
- •Вопросы для самоконтроля
- •Лабораторная работа № 9 Решение дифференциальных уравнений методом символьного интегрирования Цель работы
- •Методические указания
- •Задание на лабораторную работу
- •Вопросы для самоконтроля
- •Задание к лабораторной работе
- •Вопросы для самоконтроля
- •Задание на лабораторную работу
- •1. Цель курсовой работы
- •2. Введение
- •3. Аналитические методы
- •3.1 Классический метод
- •3.2. Метод операционного исчисления
- •4. Численный метод решения дифференциальных уравнений
- •5. Задание на курсовую работу
- •5.1. Выбор варианта
- •5.2. Порядок действий
- •Требования к пояснительной записке:
- •Приложение: Примеры выполнения этапов курсовой работы
- •Рекомендуемая литература.
- •65029. Одесса-29, Дидрихсона, 8.
Вопросы для самоконтроля
В чем заключается метод построения регрессионных зависимостей?
Какие виды регрессионных зависимостей можно рассчитать используя встроенные функции Mathcad?
Охарактеризуйте последовательность использования основных встроенных функций построения регрессий.
Как рассчитать среднеквадратичное отклонение регрессионной зависимости от значений функции, заданной в виде таблицы?
Как практически оценить максимально необходимую степень полиномиальной регрессии?
Лабораторная работа №7 Основы программирования в пакете MathCad Цель работы
Ознакомиться с возможностями программного блока пакета MathCAD и приобрести навыки использования средств программирования в среде MathCAD для решения простейших задач математического моделирования.
Методические указания
Реализовать необходимый пользователю алгоритм вычисления можно двумя способами:
вставляя соответствующие операторы или функции в текст документа MathCAD. Такой способ называется программированием в тексте документа.
используя так называемые программы-функции, содержащие конструкции, подобные конструкциям классических алгоритмических языков (BASIC, Pascal или FORTRAN). В рамки традиционных языков с их программами в текстовом формате невозможно «втиснуть» богатый набор инструментария MathCAD, реализуемый не только и не столько в виде функций, сколько в общепринятом в математике виде. В MathCAD, по сути, не встроен язык программирования, а просто снято ограничение на использование составных операторов в теле алгоритмических управляющих конструкций выбора и повторения.
Программирование в программе-функции включает два этапа – описание программы-функции и ее вызов.
Описание программы-функции размещается в рабочем документе перед вызовом программы-функции и включает в себя:
Оригинальное имя, через которое осуществляется обращение к ней и возвращается в рабочий документ результат ее выполнения.
Рис. 12. Команды панели
«Программирование»
Тело программы, включающее любое число локальных операторов присваивания, условных операторов и операторов цикла, а также вызов других программ-функций и функций пользователя.
Для ввода тела программы следует открыть наборную панель «Программирование» и щелкнуть кнопкой “Add line” (см. рис. 12), которая создает и при необходимости расширяет жирную вертикальную линию, справа от которой и создается запись программного блока. Эта команда, добавляя строку в программу(в тело цикла, в плечо альтернативы и т.д.) снимает ограничение на число операторов во вложенных конструкциях. Объединяя отдельные операторы в операторный блок с одним входом и одним выходом, вертикальная линия создает единый оператор и на экране возникает шаблон-заготовка программы с двумя полями для ввода операторов, образующих ее тело.
|
В поле 1 вводится первый оператор тела программы-функции, а в поле 2 выражение, определяющее возвращаемое через имя программы-функции значение. Поля ввода дополнительных операторов в поле 1 могут быть добавлены той же командой Add Line, при этом поле ввода добавляется внизу выделенного к этому моменту оператора.
|
В приведенном примере формальным параметром является простая переменная x, тело программы включает два локальных оператора присваивания () и значение переменной z определяет возвращаемый через имя функции результат ее выполнения.
Если выражение, записанное на языке Pascal, имеет вид, A:=B+C, на языке BASIC – A=B+C, то на языке MathCAD оно записывается в виде: AB+C. Это означает, что локальной переменной А присваивается значение суммы двух переменных определенных в документе ранее (глобальных переменных) и это действие распространяется только на программу. Использование "обычного" оператора присваивания в теле программы-функции приводит к синтаксической ошибке.
Для обращения к программе-функции следует обратиться к ее имени с указанием списка фактических параметров, разделенных запятой. Фактические параметры указывают при каких конкретных значениях осуществляются вычисления в теле программы. К моменту обращения они должны быть определены и должны соответствовать формальным параметрам по количеству, порядку следования и типу. Последнее соответствие означает что:
если формальным параметром является простая переменная, то в качестве фактического параметра может использоваться константа, переменная, арифметическое выражение;
если формальным параметром является вектор или матрица, то фактическим должен быть вектор или матрица;
если формальным параметром является имя встроенной функции или другой программы, то и фактическим параметром должен являться тот же объект.
Приведем пример обращения к программе-функции f(x).
Заметим, что программа-функция может не иметь несколько формальных параметров, тогда данные передаются через имена переменных, определенных выше описания программы-функции. Пример:
Для программирования линейного алгоритма (вычислительного процесса, в котором необходимые операции выполняются строго последовательно) следует операторы, реализующие этот алгоритм в теле программы - функции также разместить последовательно и выполнять все, с первого и до последнего. Рассмотрим работу этого алгоритма на примере вычисления площади треугольника по формуле Герона:
,
где a, b, c – длины трех сторон треугольника, а p – его полупериметр.
Для программирования разветвляющегося алгоритма, в котором присутствует несколько ветвей вычислительного процесса, следует предусмотреть выбор конкретной ветви в зависимости от выполнения (или невыполнения) заданных условий наложенных на значения переменных алгоритма. С этой целью в MathCAD имеется условный оператор if, позволяющий изменить последовательность выполнение операторов. Оператор позволяет вводить в программу альтернативу с одним плечом и может быть записан только внутри программы. Шаблон-заготовка при вводе этого оператора имеет вид:
|
В
поле 2 вводится логическое выражение
(выражение отношений), в поле 1 –
арифметическое выражение, значение
которого используется, если проверяемое
логическое выражение истинно, а если
оно ложно, то выбирается значение
выражения из поля 3. BASIC
конструкция if
A>B
THEN
C=D
в среде
MathCAD
выглядит несколько по-арабски (или
по-еврейски):
.
Но если плечом альтернативы является составной оператор, то всё запишется сверху вниз, т.е. по-китайски. Вместо if A>B THEN E=F AND F=G имеем:
В
конструкции условия используются
логические выражения (конструкции,
составленные из выражений отношений,
знаков логических операций и круглых
скобок). Выражение отношений двух
арифметических выражений между собой
имеет:
< выражение А > < знак отношения > < выражение В>.
В качестве знака отношения выступают символы, выбираемые из панели Булево (Boolean). Если заданное отношение выполняется, то выражение отношений принимает значение равное 1 ("истина"), в противном случае - 0 ("ложь). Рекомендуется для однозначного вычисления логических выражений использовать круглые скобки.
Приведем примеры составления программ-функций с учетом ветвления алгоритма. В первом примере произведено построение программы, описывающей функцию, состоящую из трех ветвей, а во втором – внесено изменение в программу, вычисляющую площадь треугольника.
Пример 1.
Известно, что в любом реальном треугольнике длина каждой из его сторон должна быть меньше, чем полупериметр, поэтому в левое поле оператора if, проверяющего выполнение этого условия в виде логического выражения для каждой из сторон (с использованием операции ИЛИ), введем функцию error с сообщением об ошибке. Тогда если ввести длины сторон без учета этого соотношения, то MathCAD выдаст диагностическое сообщение пользователю об ошибке.
Пример 2.
Оператор if часто используется совместно с оператором иного выбора – otherwise, который превращает неполную альтернативу в полную.
Строка в BASIC: if A>B THEN C=D ELSE E=F на языке MathCAD запишется так:
Заметим,
что если в плече полной альтернативы
находится один оператор, то допустимо
использовать не оператор (кнопку) if,
а условную функцию if,
набираемую с клавиатуры:
.
Условная функция используется в
арифметических выражениях, стоящих в
правой части локального оператора
присваивания:
Циклические алгоритмы (циклы) содержат повторяющиеся вычисления, зависящие от некоторой переменной, называемой параметром цикла, а сами повторяющиеся вычисления составляют тело цикла 7. Циклы можно условно разделить на две группы:
итерационные циклы, для которых окончание определяется не выходом параметра цикла за конечное значение, а более сложными условиями, так что количество повторений заранее определить нельзя;
циклы типа арифметической прогрессии для которых количество повторений тела цикла можно определить априори (т.е. до начала выполнения цикла);
Д
ля
программирования итерационных циклов
используется оператор while
(«пока»),
который формирует цикл с предпроверкой
(цикл выполняется, пока выполняется
некоторое условие). Нажатие на эту кнопку
вызывает появление конструкции с двумя
пустыми квадратиками. В первый из них
(правее while)
записывается булево выражение
(переменная), управляющее циклом, а во
второй (ниже while)
– тело цикла, операторы которого будут
выполняться, пока булево выражение
возвращает «Да» (числовое значение
отличное от нуля). Если в теле цикла
более одного оператора, то следует
использовать кнопку Add
Line.
Приведем два примера итерационных циклов:
В
первом примере производится приближенное
вычисление квадратного корня x=
,
по формуле xn=0.5(xn--1+a/xn-1),
n=1,2,3,..,
x0=a.
Цикл прерывается, если в результате
n-ной
итерации удовлетворяется условие
,
где
- заданная точность вычисления;
Во втором примере рассматривается приближенное решение (с точностью ) алгебраического уравнения методом половинного деления (способ описан в лабораторной работе №4)
Видно, что в обоих случаях, задав исходные данные, нельзя, не выполняя итерационные вычисления, определить количество повторений тела цикла.
Для программирования цикла типа арифметической прогрессии (с фиксированным числом повторений) используется оператор цикла for, вводимый с наборной панели. Для ввода такого оператора необходимо выполнить следующие действия:
П
осле
щелчка на кнопке for
возникает заготовка, представленная
на рисунке. В заготовку вписываются имя
параметра цикла и указывается какие
значения он может принимать, например
i1..100
или ii1,
i1+D..i2,
или дискретный ряд значений: k(1,2,3.7).
В нижнее пустое поле (черный квадратик)
после помещения туда курсора вводятся
операторы, составляющие тело цикла.
Если одной строки недостаточно, то
дополнительные строки создаются командой
Add Line
(слева от
тела цикла появляется вертикальная
черта). Ниже приведен простейший пример
подобного цикла (возвращается матрица,
соответствующая табулированию функции
с заданным шагом аргумента.
Применение оператора while, без дополнительных средств контроля может привести к зацикливанию (бесконечной работе программы), поскольку в теле цикла должны присутствовать операторы, делающие условие его ложным. Покажем как избежать зацикливания в программе решения уравнения методом половинного деления (к зацикливанию может привести, например, задание отрицательного значения точности – < 0). В программе реализован цикл с фиксированным числом повторений, а для выхода из цикла (и из программы) используется оператор Break (вводимый с панели Программирование в левое поле оператора if), который проверяет выполнение заданного условия по точности и прерывает выполнение программы, возвращая значение операнда, стоящего за ним.
К дополнительным операторам программирования кроме Break относятся: Continue – оператор продолжения выполнения цикла путем возврата в его начало (управление передается не в «хвост» цикла, а в его «гриву» – в начало); Return – оператор-функция возврата того или иного значения в зависимости от выполнения условия, On error – оператор обработки ошибок. Эти операторы фактически введены в силу отсутствия в инструментах программирования понятия метки и условного или безусловного перехода к ней. Рассмотрим дополнительные примеры реализации программных структур:
Все структурные управляющие конструкции MathCAD можно усмотреть в простой житейской ситуации: потчевание гостей чаем или кофе. Хозяйка проверяет, нет ли на столе пустой чашки (булева переменная, управляющая циклом while), и наполняет ее (тело цикла) чаем или кофе (альтернатива if). Добавление в чашку кусочков сахара – новый, вложенный цикл. При разливе чая чашка (стакан) может лопнуть, что прерывает цикл, из которого выходят в конец цикла (break – гости встают из-за стола и занимаются чем-то другим) или в начало цикла (continue – на столе меняется скатерть и чаепитие возобновляется). Третий сценарий: разбитая чашка так расстраивает хозяйку, что вечеринка досрочно заканчивается (return).
В пакете MathCAD возможно проведение модульного программирования: вычислительные процессы реализуются в виде отдельных программных единиц - модулей; а обращение к ним осуществляется в других программах с передачей данных, необходимых для вычислительного процесса. Модульное программирование позволяет уменьшить объем исходных текстов программ, сделать их более читаемыми, ускорить написание и тестирование программ, уменьшить расходы на сопровождение (эксплуатацию) программ.
При реализации модульного программирования описание локальных функций, программ-функций и их вызов ( т.е. обращение к ним ) находятся в пределах одного документа и хранятся в одном файле. При этом часто внутри одной программы-функции находится вызовы локальных функций, встроенных функций MathCAD и другой программы-функции. К модульному программированию относится и использование рекурсии – функции, которая вызывает сама себя в момент создания7. Рекурсия является очень мощным и удобным инструментом для решения различных задач. Она состоит из двух частей: начального определения и определения функции в терминах предыдущего ее значения. Приведем примеры программ, использующих принцип модульного программирования: В первом примере рассматривается приближенное вычисление интегралов по формуле парабол Симпсона:
,
где N - четное число разбиений интервала интегрирования на элементарные отрезки, длина которых равна шагу интегрирования h.