Рекурсия
Рекурсия является одним из мощных методов программирования и заключается в определении функции через саму себя, как показано на Рисунке 10. Рекурсивные определения функций должны всегда состоять по меньшей мере из двух частей:
начального определения, предотвращающего бесконечную рекурсию, и
определения функции в терминах предыдущего значения функции.
Основная идея подобна идее математической индукции: если можно получить значение f(n+1) из f(n) и известно f(0), то известна и вся функция f.
Рисунок 10: Рекурсивное определение функции.
Следует, однако, помнить, что рекурсивные определения функций далеко не всегда являются самыми эффективными в вычислительном отношении, несмотря на их краткость и элегантность. Часто оказывается, что определения, использующие операторы цикла, вычисляют нужные значения быстрее.
Инструментарий программирования Mathcad легок в использовании, поскольку состоит всего из семи кнопок. Тем не менее эта простота обнаруживает удивительную мощь. Вместе с обширным набором численных функций Mathcad и абстрактными структурами данных, которые позволяют использовать аппарат вложенных массивов Mathcad, эти семь операторов позволяют писать самые сложные программы.
На следующих ниже рисунках приведены только немногие из этих возможностей. По мере приобретения опыта в программировании для Mathcad Вам будут открываться все новые и новые возможности. Выбрав пункт Шпаргалки из меню Справка, можно найти много других примеров программ.
Рисунок 11: Программа генерации последовательности случайных чисел геометрического распределения.
Рисунок 12: Программа отыскания элементов, общих для двух векторов.
Рисунок 13: Решето Эратосфена для отыскания простых чисел.
Рисунок 14: Степени матрицы вероятностей переходов.
Рисунок 15: Сглаживание матрицы.
Разделы |
|
| Как в Mathcad использовать функцию поиска корня для численного решения одного уравнения с одним неизвестным. |
| Как использовать блоки решения уравнений для численного решения систем из n уравнений с n неизвестными. |
| Примеры того, как эффективно решать системы уравнений при различных значениях параметров, входящих в уравнения. |
Для решения одного уравнения с одним неизвестным используется функция root. Аргументами этой функции являются выражение и переменная, входящая в выражение. Ищется значение переменной, при котором выражение обращается в ноль. Функция возвращает значение переменной, которое обращает выражение в ноль.
root( f(z), z) | Возвращает значение z, при котором выражение или функция f(z) обращается в 0. Оба аргумента этой функции должны быть скалярами. Функция возвращает скаляр. |
Первый аргумент есть либо функция, определенная где-либо в рабочем документе, или выражение. Выражение должно возвращать скалярные значения.
Второй аргумент — имя переменной, которое используется в выражении. Это та переменная, варьируя которую Mathcad будет пытаться обратить выражение в ноль. Этой переменной перед использованием функции root необходимо присвоить числовое значение. Mathcad использует его как начальное приближение при поиске корня.
Рассмотрим пример, как найти a — решение уравнения ex = x3. Для этого выполните следующие шаги:
Определите начальное значение переменной x. Введите x:3. Выбор начального приближения влияет на корень, возвращаемый Mathcad (если выражение имеет несколько корней).
Определите выражение, которое должно быть обращено в ноль. Для этого перепишите уравнение ex = x3 в виде x3 - ex = 0. Левая часть этого выражения и является вторым аргументом функции root
Определите переменную a как корень уравнения. Для этого введите a:root(x^3[Space]-e^x[Space],x).
Напечатайте a=, чтобы увидеть значение корня.
При использовании функции root имейте в виду следующее:
Удостоверьтесь, что переменной присвоено начальное значение до начала использования функции root.
Для выражения с несколькими корнями, например x2 - 1 = 0, начальное значение определяет корень, который будет найден Mathcad. На Рисунке 1 приведен пример, в котором функция root возвращает различные значения, каждое из которых зависит от начального приближения.
Mathcad позволяет находить как комплексные, так и вещественные корни. Для поиска комплексного корня следует взять в качестве начального приближения комплексное число.
Задача решения уравнения вида f(x) = g(x) эквивалентна задаче поиска корня выражения f(x) - g(x) =0. Для этого функция root может быть использована следующим образом:
root(f(x) - g(x), x)
Функция root предназначена для решения одного уравнения с одним неизвестным. Для решения систем уравнений используйте методику, описанную в следующем разделе “Системы уравнений”. Для символьного решения уравнений или нахождения точного численного решения уравнения в терминах элементарных функций выберите Решить относительно переменной из меню Символика. См. Главу “Символьные вычисления”.
Рисунок 1: Использование графика и функции root для поиска корней уравнения.
- Буквенные индексы
- Ниже приводится полный список предопределенных переменных Mathcad и их значений по умолчанию:
- Используемые числа
- Специальные операции над комплексными числами
- Многозначные функции
- Создание вектора
- Создание матрицы
- Изменение размера матрицы
- Нижние индексы и элементы вектора
- Изменение способа отображения массивов
- Графическое представление матриц
- Ограничение входных массивов
- Ограничение отображаемых массивов
- Ограничение размеров массива
- Размеры и диапазон значений массива
- Специальные типы матриц
- Специальные характеристики матрицы
- Формирование новых матриц из существующих
- Собственные значения и собственные векторы
- Разложения
- Решение линейной системы уравнений
- Определение составного массива
- Отображение составных массивов
- Операторы и функции для составных массивов
- Определение и использование дискретного аргумента
- Многократные вычисления по дискретному аргументу
- Множественные дискретные аргументы и двойные индексы
- Рекурсивные вычисления с несколькими переменными
- Рекурсивные вычисления с вектором
- Советы по набору операторов
- Переменный верхний предел суммирования
- Оператор суммирования элементов вектора
- Производные более высокого порядка
- Переменные пределы интегрирования
- Изменение точности вычисления интегралов
- Криволинейные и двойные интегралы
- Определение пользовательского оператора
- Использование пользовательского оператора
- Запись функций как операторов
- Тригонометрические функции и обратные им.
- Гиперболические функции
- Логарифмические и показательные функции
- Функции Бесселя
- Специальные функции
- Введение в дискретное преобразование Фурье
- Функция if
- Циклы “while”
- Оператор “break”
- Циклы “for”
- Подпрограммы
- Рекурсия
- Что делать, когда функция root не сходится
- Некоторые советы по использованию функции root
- Решение уравнений с параметром
- Нахождение корней полинома
- Как использовать найденное решение
- Что делать, когда Mathcad не может найти решения
- Что делать, когда имеется слишком мало ограничений
- Многократное решение уравнений
- Решение одинаковых задач относительно разных переменных
- Приближенные решения
- Использование символьного решения уравнений
- Дифференциальные уравнения первого порядка
- Дифференциальные уравнения второго порядка
- Уравнения более высокого порядка
- Системы оду первого порядка
- Системы дифференциальных уравнений более высокого порядка
- Гладкие системы
- Медленно изменяющиеся решения
- Нахождение приближенного решения только в конечной точке
- Двухточечные краевые задачи
- Дифференциальные уравнения с частными производными