Top menu

Урок 24. Решение уравнений в Mathcad – использование функций

Решение уравнений является важным для решения практических задач. Поэтому уделим уравнениям еще один урок.

Блок решения в функции

Если Вы хотите исследовать изобразить на графике поведение уравнения в зависимости от значения определенного параметра, Вам, возможно, придется решить систему уравнений много раз. Вы можете сделать это, используя блок решения в функции. Покажем на примере: предположим, мы хотим исследовать поведение решения следующего уравнения в зависимости от различных значения параметра A:

mathcad_24_01

mathcad_24_02

Блоку решения не нужно ни значение параметра, ни начальное приближение, поскольку решение есть функция этих двух значений. Эти значения мы будем задавать при вызове функции.

Функцию можно использовать сколько угодно раз:

mathcad_24_03

Использовать функцию можно с диапазоном переменных:

mathcad_24_04

Такая техника решения не самая надежная. Если хотя бы одно решение не может быть найдено, Вы не получите и решений для других параметров (это произойдет, если задать A<0.7). Поэтому лучше заранее проверить свою функцию.

Сообщения об ошибке можно избежать, написав маленькую программу:

mathcad_24_05

Если блок решения выдает сообщение об ошибке, на выходе получим значение NaN (Not a Number – «Не Число»), которое просто не отображается на графике:

mathcad_24_06

Построим две ветки уравнения с использованием этого приема:

mathcad_24_07

Когда переменных много

Расчеты часто содержат несколько переменных, но Вам, возможно, придется использовать лишь некоторые из них. В качестве примера рассмотрим систему восьми уравнений, где нам нужно получить только значения X и Y. Начальные приближения следует задать для всех переменных:

mathcad_24_08

Решение представляет собой вектор из восьми элементов, но нам нужны лишь элементы с индексами 0 и 1.

Минимизация ошибки

Find() – не единственный решатель в Mathcad. Еще один полезным решателем является Minnerr(), находящий решения, которые минимизируют ошибку в системе уравнений. Рассмотрим пример: есть набор данных, которые мы хотим аппроксимировать уравнением Бейтмена:

mathcad_24_09

Мы хотим подобрать три константы в уравнении Бейтмена таким образом, чтобы ошибка приближения была минимальна. У нас есть семь уравнений (по одной для каждого эксперимента) и три константы, так что в системе избыток данных. Minerr() может обработать эту проблему:

mathcad_24_10

Замечания:

  1. Три константы являются переменными для этой системы.
  2. Переменные не могут иметь счетных индексов.
  3. У параметров (t и c) могут быть счетные индексы.

Возможно, Вам хотелось бы использовать цикл for для семи уравнений, но в блоке решений этого сделать нельзя.

Для полностью определенных систем (с одинаковым числом независимых уравнений и неизвестных) функция Minerr() дает тот же ответ, что и Find().

Резюме

В этом уроке мы определили способы расширенного использования блоков решения:

  1. Вы можете определить вывод блока решения как функцию. Таким образом в блок решения можно передавать параметры и начальные приближения.
  2. Если при вычислении точек для графика хотя бы одно решение не будет найдено, то график не будет построен. Этой ошибки можно избежать, написав небольшую программу с использованием “try/on error”, которая выводит NaN (Not a Number – Не Число), если результат отсутствует.
  3. Для двух и более неизвестных (и уравнений) вывод блока решения является вектором. Если нужен один или два элемента этого вектора, их можно вывести, используя подстрочные индексы.
  4. Вместо функции Find() можно использовать Minerr() – она минимизирует ошибку для заданного набора ограничений, в том числе, если данные избыточны. Minerr() часто может дать приближенный результат, когда Find() выдает ошибку.