Раздел: Документация
0 ... 99 100 101 102 103 104 105 ... 365 Пользователь может найти значение любой функции от матрицы. Для этого следует создать собственную файл-функцию, анонимную функцию или inline-функцпю. а затем использовать специальную функцию funm, задав первым аргументом матрицу, а вторым имя файл-функции в апострофах или указатель на функцию. Вычислите, например e-sinA. Текст соответствующей файл-функции matrf приведен в листинге 6.14. При создании файл-функции обязательно использование поэлементных операций! Листинг 6.14. Файл-функция matrf для вычисления функции матрицы function б = matrf(А) В = ехр(А).*sin(A); Теперь при помощи funm найдите значение заданной функции от матрицы в: » В = funm(A, @matrf) В = 141.6829 228.9756 228.9756 370.6585 Для контроля точности вычислений функции от матрицы лучше использовать вызов funm с двумя выходными аргументами. Во второй аргумент помещается информация о точности вычислений. Встроенные математические функции MATLAB (sin, cos и другие) можно вычислять от матриц аналогичным образом, например » В = funm(A, sin) Предпочтительнее производить вычисления функций от матриц с использованием специальных матричных функций expm, logm, sqrtm, т. е., например, ехрт(А) вместо funm (А, "ехр") и т. д. В этих матричных функциях реализованы специальные алгоритмы, работающие точнее и надежнее, чем общий алгоритм funm. Функции матриц имеют широкую область применения, в частности, решение системы линейных дифференциальных уравнений с начальным условием t/X — = А-Х. Х(0) = Х0 может быть найдено по формуле X(t)-X{)eA. Решению дифференциальных уравнений и систем посвящен следующий раздел. Решение дифференциальных уравнений Данный раздел посвящен описанию возможностей, предоставляемых MATLAB, для численного решения задач Коши и краевых задач для обыкновенных дифференциальных уравнений произвольного порядка и систем, включая краевые задачи с неизвестными параметрами и вырождающимися коэффициентами. Рассматривается также решение дифференциальных уравнений с запаздывающим аргументом. Для решения этих задач предназначены специальные функции MATLAB. в вычислительной математике их называют солверы. MATLAB имеет достаточно большой набор солверов, основанных на различных численных методах. Решение задачи Коши Для решения задачи Коши в MATLAB существует семь солверов: ode45, ode23, ode!13, odel5s, ode23s, ode23t И ode23tb. Методика ИХ использования одинакова, включая способы задания входных и выходных аргументов. В достаточно общем случае вызов солвера для решения задачи Коши производится следующим образом (здесь под solver понимается один из перечисленных выше солверов): [Т, У] = solver(odefun,interval,YO,options) где odefun — функция для вычисления вектор-функции правой части системы уравнений, interval — массив из двух чисел, задающий промежуток для решения уравнения, Y0— заданный вектор начальных значений искомой вектор-функции, options — структура для управления параметрами и ходом вычислительного процесса. Солвер возвращает массив т с координатами узлов сетки, в которых найдено решение, и матрицу решений у, каждый столбец которой является значением компоненты вектор-функции решения в узлах сетки. Далее мы обсудим применение солверов и управление процессом решения на ряде показательных примеров из перечисленных выше классов задач. Задача Коши для дифференциального уравнения состоит в нахождении функции, удовлетворяющей дифференциальному уравнению произвольного порядка и начальным условиям при t =/у у(о) = ио* /(o) = "i. —• V <(и,)(<о) = и, п-1 • Схема решения таких задач в MATLAB состоит из следующих этапов. 1.Приведение дифференциального уравнения к системе дифференциальных уравнений первого порядка (если изначально задана система, то в этом нет необходимости). 2.Написание специальной функции для системы уравнений. 3.Вызов подходящего солвера. 4.Визуализация результата. Разберем решение дифференциальных уравнений на примере задачи о колебаниях материальной точки под воздействием внешней силы в среде, оказывающей сопротивление колебаниям. Перемещение точки в среде описывается уравнением второго порядка / + 2/+10j = sm/. Предположим, что координата точки в начальный момент времени равнялась единице, а скорость — нулю. Тогда соответствующие начальные условия имеют вид у(0) = 1, у(0) = 0. Пример носит демонстрационный характер, поэтому размерности физических величии указываться не будут. Теперь исходную задачу надо привести к системе дифференциальных уравнений. Для этого вводят столько вспомогательных функций, каков порядок уравнения. В данном случае необходимы две вспомогательные функции у, и у2, определяемые формулами У\=У*Уг = У- Несложно догадаться, что система дифференциальных уравнений с начальными условиями, требуемая для дальнейшей работы, такова У\ =У2> Уг = -2у2-Юух +sin/; Второй этап состоит в написании функции для системы дифференциальных уравнений. Функция должна иметь два входных аргумента: переменную /, по которой производится дифференцирование, и вектор, размер которого равен числу неизвестных функций системы. Число и порядок аргументов фиксированы, даже если t явно не входит в систему. Выходным аргументом функции является вектор правой части системы. Текст функции oscil для разбираемого примера приведен в листинге 6.15.
(6.4) 0 ... 99 100 101 102 103 104 105 ... 365
|