Решение уравнений является важным для решения практических задач. Поэтому уделим уравнениям еще один урок.
Блок решения в функции
Если Вы хотите исследовать изобразить на графике поведение уравнения в зависимости от значения определенного параметра, Вам, возможно, придется решить систему уравнений много раз. Вы можете сделать это, используя блок решения в функции. Покажем на примере: предположим, мы хотим исследовать поведение решения следующего уравнения в зависимости от различных значения параметра A:
Блоку решения не нужно ни значение параметра, ни начальное приближение, поскольку решение есть функция этих двух значений. Эти значения мы будем задавать при вызове функции.
Функцию можно использовать сколько угодно раз:
Использовать функцию можно с диапазоном переменных:
Такая техника решения не самая надежная. Если хотя бы одно решение не может быть найдено, Вы не получите и решений для других параметров (это произойдет, если задать A<0.7). Поэтому лучше заранее проверить свою функцию.
Сообщения об ошибке можно избежать, написав маленькую программу:
Если блок решения выдает сообщение об ошибке, на выходе получим значение NaN (Not a Number – «Не Число»), которое просто не отображается на графике:
Построим две ветки уравнения с использованием этого приема:
Когда переменных много
Расчеты часто содержат несколько переменных, но Вам, возможно, придется использовать лишь некоторые из них. В качестве примера рассмотрим систему восьми уравнений, где нам нужно получить только значения X и Y. Начальные приближения следует задать для всех переменных:
Решение представляет собой вектор из восьми элементов, но нам нужны лишь элементы с индексами 0 и 1.
Минимизация ошибки
Find() – не единственный решатель в Mathcad. Еще один полезным решателем является Minnerr(), находящий решения, которые минимизируют ошибку в системе уравнений. Рассмотрим пример: есть набор данных, которые мы хотим аппроксимировать уравнением Бейтмена:
Мы хотим подобрать три константы в уравнении Бейтмена таким образом, чтобы ошибка приближения была минимальна. У нас есть семь уравнений (по одной для каждого эксперимента) и три константы, так что в системе избыток данных. Minerr() может обработать эту проблему:
Замечания:
- Три константы являются переменными для этой системы.
- Переменные не могут иметь счетных индексов.
- У параметров (t и c) могут быть счетные индексы.
Возможно, Вам хотелось бы использовать цикл for для семи уравнений, но в блоке решений этого сделать нельзя.
Для полностью определенных систем (с одинаковым числом независимых уравнений и неизвестных) функция Minerr() дает тот же ответ, что и Find().
Резюме
В этом уроке мы определили способы расширенного использования блоков решения:
- Вы можете определить вывод блока решения как функцию. Таким образом в блок решения можно передавать параметры и начальные приближения.
- Если при вычислении точек для графика хотя бы одно решение не будет найдено, то график не будет построен. Этой ошибки можно избежать, написав небольшую программу с использованием “try/on error”, которая выводит NaN (Not a Number – Не Число), если результат отсутствует.
- Для двух и более неизвестных (и уравнений) вывод блока решения является вектором. Если нужен один или два элемента этого вектора, их можно вывести, используя подстрочные индексы.
- Вместо функции Find() можно использовать Minerr() – она минимизирует ошибку для заданного набора ограничений, в том числе, если данные избыточны. Minerr() часто может дать приближенный результат, когда Find() выдает ошибку.
No comments yet.