- •Оглавление
- •Введение
- •Теоретическая часть
- •Основные сведения о пакете Mathcad
- •Mathcad-документ и его структура
- •Простейшие конструкции системы Mathcad
- •Функции, определяемые пользователем
- •Переменные диапазона (ранжированные переменные)
- •Графические области
- •Организация условий в Mathcad
- •If (Условие, Выражение1, Выражение2)
- •Матрицы и матричные операторы Mathcad
- •Текстовые фрагменты
- •Решение уравнений средствами Mathcad
- •Аргументы:
- •Отсутствие сходимости функции root
- •Аргументы:
- •Практическая часть
- •Лабораторная работа №1 Табулирование функций и нахождение корней уравнений в системе Mathcad
- •Лабораторная работа №2 Функции условных выражений
- •Лабораторная работа №3 Функции для обработки векторов и матриц
- •Лабораторная работа №4 Решение систем линейных и нелинейных уравнений
- •Лабораторная работа №5 Решение уравнений с помощью программного модуля
- •Лабораторная работа №6 Построение графиков поверхности
- •Список использованных источников
Отсутствие сходимости функции root
Если после многих
итераций Mathcad не находит подходящего
приближения, то появится сообщение
(отсутствует
сходимость). Эта ошибка может быть
вызвана следующими причинами:
Уравнение не имеет корней.
Корни уравнения расположены далеко от начального приближения.
Выражение имеет локальные max и min между начальным приближением и корнями.
Выражение имеет разрывы между начальными приближениями и корнями.
Выражение имеет комплексный корень, но начальное приближение было вещественным.
Чтобы установить причину ошибки, исследуйте график f(x). Он поможет выяснить наличие корней уравнения f(x) = 0 и, если они есть, то определить приблизительно их значения. Чем точнее выбрано начальное приближение корня, тем быстрее будет root сходиться.
Рекомендации по использованию функции root
Для изменения точности, с которой функция root ищет корень, нужно изменить значение системной переменной TOL. Если значение TOL увеличивается, функция root будет сходиться быстрее, но ответ будет менее точен. Если значение TOL уменьшается, то функция root будет сходиться медленнее, но ответ будет более точен. Если два корня расположены близко друг от друга, следует уменьшить TOL, чтобы различить их.
Если функция f(x) имеет малый наклон около искомого корня, функция root(f(x), x) может сходиться к значению r, отстоящему от корня достаточно далеко. В таких случаях для нахождения более точного значения корня необходимо уменьшить значение TOL.
Для выражения f(x) с известным корнем а нахождение дополнительных корней f(x) эквивалентно поиску корней уравнения h(x) = f(x)/(x — a). Подобный прием полезен для нахождения корней, расположенных близко друг к другу. Проще искать корень выражения h(x), чем пробовать искать другой корень уравнения f(x) = 0, выбирая различные начальные приближения.
Нахождение корней полинома
Для нахождения корней выражения, имеющего вид vnxn + … + v2x2 + v1x + v0,
лучше использовать функцию polyroots, нежели root. В отличие от функции root, функция polyroots не требует начального приближения и возвращает сразу все корни, как вещественные, так и комплексные.
Polyroots(v)
Возвращает корни полинома степени n. Коэффициенты полинома находятся в векторе v длины n + 1. Возвращает вектор длины n, состоящий из корней полинома.
Аргументы:
v — вектор, содержащий коэффициенты полинома.
Вектор v удобно создавать использую команду Символы Коэффициенты полинома. рис. 5 иллюстрирует определение корней полинома средствами Mathcad.
Рис. 5 Пример нахождения корней полинома
Программирование без программирования
Для решения задач с известными алгоритмами в Mathcad предусмотрена возможность программирования. Для создания подпрограмм можно использовать операторы, хранящиеся в палитре «Программирование» (рис. 6).
Рис. 6 Палитра программирования
Большинство кнопок этой панели выполнено в виде текстового представления операторов программирования, поэтому их смысл легко понятен. Это достаточно полный набор операторов программирования универсального языка программирования.
Add Line Добавить строку.
Оператор
локального присвоения.
If Оператор условия.
While Оператор цикла.
For Оператор цикла.
Break Оператор останова.
Otherwise Оператор иначе.
Return Оператор возврата.
On error Оператор «на ошибку».
continue Оператор продолжения.
Пример программ приведен на рис.7а и 7б.
Локальное присваивание иллюстрируется листингом 7а. Переменная z существует только внутри программы, выделенной вертикальной чертой. Из других мест документа получить ее значение невозможно.
Рис.7 Пример программ Mathcad
Рассмотрим использование программирования для нахождения корней уравнения с использованием метода деления отрезка пополам.
Метод деления отрезка пополам (дихотомии)
Пусть интервалы изоляции корней известны. Рассмотрим итерационные методы, позволяющими найти корень на известном интервале изоляции [a, b].
Найдем середину отрезка [a, b]: c = (a+b)/2. Корень остался на одной из частей: [a, c] или [c, b]. Если F(a)*F(с) < 0, то корень попал на отрезок [a, c], тогда деление отрезка можно повторить, приняв в качестве нового правого конца точку c, т.е. b = c. В противном случае корень попал на половину [c, b], и необходимо изменить значение левого конца отрезка: a = c. Поскольку корень всегда заключен внутри отрезка, итерационный процесс можно останавливать, если длина отрезка станет меньше заданной точности: |b – a| < ε .
В случае сложных уравнений вычисления необходимо проводить с использованием ЭВМ. На рис. 8 приведен текст программы Mathcad, реализующей метод дихотомии для решения уравнения
F(x) = x2 – x – 1 = 0.
Метод реализован в виде функции от аргументов a, b (концы интервала изоляции) и точности метода ε. Вызов этой функции при значениях a = –1, b = 0, ε = 0.01 дает значение корня – 0.617, при этом невязка уравнения (|F(xk)|, где xk–корень уравнения), которую вычисляют, чтобы убедиться в правильности решения, равна – 1.892*10–3.
Рис. 8 Метод деления отрезка пополам
Ни оператор присваивания :=, ни оператор вывода = в пределах программ не применяются.
Решение систем уравнений
Mathcad дает возможность решать также и системы уравнений. Максимальное число уравнений и переменных равно 50. Результатом решения системы будет численное значение искомого корня.
Решение систем линейных уравнений
Системы линейных уравнений в Mathcad можно решить различными способами:
Матричным методом – задается матрица коэффициентов перед неизвестными (A) и вектор свободных членов (С). Поиск вектора неизвестных (X) осуществляется по формуле X:= A-1 С
Методом Гаусса (функция lsolve(A,С). Функция Lsolve использует метод Гаусса (исключения). Возвращает вектор неизвестных, дающих решение системы линейных алгебраических уравнений вида A*X = С
С использованием блоков Given, Find. Minerr.
С использованием программирования любым известным методом.
В качестве примера решим систему уравнений:
8х-3y+2z=9, 3y+5z=–7, –x+9y+7z=0
Зададим матрицу коэффициентов перед неизвестными (A) и вектор свободных членов (С).
Пример нахождения решений системы линейных уравнений
Как видно из анализа результатов, решения разными методами совпадают.
Использование блоков Given, Find. Minerr для решения систм уравнений
Find(v1,v2,…,vn) – находит значение переменных для точного решения (решение реально существует, хотя и не является аналитическим),
Minerr(v1,v2,…,vn) – находит значение переменных для приближенного решения (находит максимальное приближение даже к несуществующему).
Эти функции могут применяться только после блока Given. Имена этих функций можно писать и строчными буквами. При вводе ограничительных условий необходимо использовать логические операторы: >, <, , , , =. Эти операторы вызываются с помощью палитры «Отношения». Рекомендуется после нахождения решения сделать проверку подстановкой.
Given – ключевое слово, открывающее блок решения систем уравнений (в котором обычно используются функции Find, Minerr, Maximize и Minimize)
Для решения системы уравнений необходимо выполнить следующее:
Задать начальное приближение для всех неизвестных, входящих в систему уравнений. Mathcad решает систему с помощью итерационных методов.
Напечатать ключевое слово Given. Оно указывает Mathcad, что далее следует система уравнений.
Введите уравнения и неравенства в любом порядке. Используйте [Ctrl]= для печати символа =. Между левыми и правыми частями неравенств может стоять любой из символов <, >, ≤, и ≥.
Введите любое выражение, которое включает функцию Find, например: а:= Find(х, у).
Find(var1,var2, …) значения var1, var2, …, дающие точные решения системы уравнений в блоке, объявленном директивой Given (число возвращаемых значений равно числу аргументов),который помимо решаемой системы уравнений, может содержать условия ограничения.
Пример решения системы нелинейных уравнений с использованием функции Find:
x:=0 y:=0
Внутри блока решения недопустимы следующие выражения:
Ограничения со знаком ≠.
Дискретный аргумент или выражения, содержащие дискретный аргумент в любой форме.
Неравенства вида a < b < c.
Блоки решения уравнений не могут быть вложены друг в друга, каждый блок может иметь только одно ключевое слово Given и имя функции Find (рис.9).
Функция, которая завершает блок решения уравнений, может быть использована аналогично любой другой функции. Можно произвести с ней следующие три действия:
Можно вывести найденное решение, напечатав выражение вида:
Find(var1, var2,…) =.
Определить переменную с помощью функции Find:
a := Find(x) — скаляр, var := Find(var1, var2,…) — вектор.
Это удобно сделать, если требуется использовать решение системы уравнений в другом месте рабочего документа.
Определить другую функцию с помощью Find
f(a, b, c, …) := Find(x, y, z, …).
Рис. 9. Решение систем уравнений в Mathcad
Симплексный метод решения задач линейного программирования средствами Mathcad
Данный метод является методом целенаправленного перебора опорных решений задачи линейного программирования. Он позволяет за конечное число шагов либо найти оптимальное решение, либо установить, что оптимальное решение отсутствует.
Решить симплексным методом задачу:
Решение:
Приводим задачу к каноническому виду.
Значение
целевой функции при этом базисе равно:
При поиске минимума используется функция Minimize/
Краткие итоги по теоретической части
Основная идея системы Mathcad – предоставление пользователю возможности описывать на экране вычисления в форме, очень близкой к общепринятой математической нотации, применяемой при записи математических моделей и алгоритмов численного анализа.
