Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1-2 Моделирование / Matlab. Практический подход. Самоучитель

.pdf
Скачиваний:
769
Добавлен:
31.01.2021
Размер:
12.72 Mб
Скачать

Глава 9. Символьные вычисления

решения уравнений и систем рассмотрим на конкретных примерах. Для начала стоит обратить внимание на рис. 9.11.

Рис. 9.11. Решение квадратного уравнения

Здесь для решения квадратного уравнения ax2 +bx +c = 0 в символьном виде мы воспользовались командой solve('a*x^2+b*x+c=0') (и затем командой pretty(ans) для изменения формы представления результата). Таким образом, единственным аргументом функции solve() указано решаемое уравнение. Поскольку в соответствующем выражении имеется переменная x, относительно этой переменной и решается уравнение. Если нужно явно указать переменную, относительно которой решается уравнение, она указывается вторым аргументом функции solve().

Примерно так же просто решаются системы уравнений: решаемые уравнения системы передаются аргументами функции solve(). Можно также явно указать переменные, относительно которых решается система. Пример представлен в документе на рис. 9.12.

Здесь мы решаем систему уравнений x2 + y2 = 25 и y x = 1. У системы два решения: x = 3 , y = 4 и x = −4 , y = −3 . Нам понадобятся две команды. Команда объявления символьных переменных syms x y и команда

[x y]=solve('x^2+y^2=25','y-x=1',x,y), которой непосредственно решается система уравнений. Несложно убедиться, что решения найдены правильно.

361

Самоучитель Matlab

Рис. 9.12. Решение системы уравнений

Решение дифференциального уравнения или системы дифференциальных уравнений могут быть найдены посредством функции dsolve().

На заметку

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

Чтобы решить дифференциальное уравнение, его нужно передать аргументом функции dsolve(). Возникает вопрос, как записать дифференциальное уравнение? Существует несколько правил.

1.Для обозначения операции дифференцирования используется символ D.

2.Операция вычисления n-й производной указывается в формате Dn (то есть символ D и порядок производной).

3.По умолчанию независимой переменной полагается переменная t. Если используется другое имя для независимой переменной, она указывается последним аргументом функции dsolve().

На заметку

Дифференциальное уравнение может решаться само по себе, а может решаться вместе с начальными условиями. В последнем случае речь идет о задаче Коши. Если кроме дифференциального уравнения необходимо учесть начальные условия, то они передаются аргументами функции dsolve(). Если решается одно только уравнение, то результат будет содержать константы интегрирование – независимые произвольные константы. Количество постоянных интегрирования совпадает с порядком дифференциального уравнения или старшей производной в уравнении. Постоянные интегрирования по умолчанию обозначаются в выводимом результате как C1, C2 и так далее.

362

Глава 9. Символьные вычисления

Примеры решения дифференциальных уравнений приведены в документе на рис. 9.13.

Рис. 9.13. Решение дифференциальных уравнений

Командой dsolve('Dz+3*z=2*cos(x)','x') решается дифференци-

альное уравнение dz(x) + 3z(x) = 2 cos(x). В результате получаем общее dx

решение для функции z(x) =

3

cos(x) +

1

sin(x) +

C

 

, где через C

 

 

exp(3x)

5

5

 

 

обозначена постоянная интегрирования (в документе на рис. 9.13 эта константа обозначена как C18 – индекс является следствием особенностей алгоритма, использованного для вычисления результата).

Командой dsolve('D2y+25*y=0','y(0)=2','Dy(0)=-1') решается

задача Коши: дифференциальное уравнение d2y(t) + 25y(t) = 0 с началь- dt2

ными условиями y(0) = 2 и dy(t = 0) = −1. Решение этой задачи имеет dt

вид y(t) = 2 cos(5t) − 1 sin(5t). Именно такое решение и найдено.

5

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

В результате выполнения команды [x y]=dsolve('Dx=x+2*y', 'Dy=3*x-4*y','x(0)=1','y(0)=2') получаем решение системы диф-

ференциальных уравнений

dx(t)

= x(t) + 2y(t)

и

dy(t)

= 3x(t) − 4y(t)

 

 

 

dt

 

dt

363

Самоучитель Matlab

 

 

Рис. 9.14. Решение системы дифференциальных уравнений

с начальными условиями x(0) = 1 и y(0) = 2

. Получено корректное реше-

ние x(t) =

10

exp(2t) −

3

exp(−5t) и y(t) =

5

exp(2t) +

9

exp(−5t) .

 

 

 

 

 

7

7

7

7

 

Собственно говоря, это далеко не полный перечень тех символьных операций, которые могут выполняться в командном окне. Однако следует понимать, что командное окно, в общем-то, и не рассчитано на выполнение символьных расчетов. Несложно догадаться, что в Matlab есть другое "место", которое подходит для этих целей куда больше. Это "место" – редактор встроенной среды - системы компьютерной алгебры MuPAD, реализованный в пакете инструментов Symbolic Math Toolbox. Разумно познакомиться с этой утилитой поближе.

Среда MuPAD

Ну кто так строит? Кто так строит?

К/ф "Чародеи"

Чтобы увидеть во всей красе встроенный редактор среды MuPAD, достаточно в главном окне приложения Matlab выполнить команду Start Toolboxes Symbolic Math MuPAD, как показано на рис. 9.15.

Можно также в командном окне выполнить команду mupad. В результате откроется окно приветствия, в котором необходимо сделать выбор относительно дальнейших планов работы со средой MuPAD (рис. 9.16).

В данном случае мы планируем создать новый документ, поэтому в окне приветствия щелкаем кнопку New Notebook. После этого откроется непосредственно редактор среды MuPAD с новым пустым документом. Наблюдать эту красоту можно на рис. 9.17.

364

Глава 9. Символьные вычисления

Рис. 9.15. Запуск реактора среды MuPAD

Рис. 9.16. Создание нового документа MuPAD

365

Самоучитель Matlab

Рис. 9.17. Редактор среды MuPAD с новым пустым документом

Рис. 9.18. Примеры простых вычислений в MuPAD

366

Глава 9. Символьные вычисления

Структура окна редактора MuPAD достаточно консервативна. Среди функциональных элементов интерфейса можно выделить панель меню и панель инструментов в верхней части окна и палитры в правой колонке. Основная белая область в окне редактора – это то рабочее пространство, в котором выполняются вычисления. Здесь вводятся команды, и отображается результат их выполнения. Подсказкой места ввода служит мигающий курсор и специальная метка в виде открытой квадратной скобки.

Но мало найти место, куда вводить команды, необходимо знать, как их вводить. Другими словами, необходимо иметь хотя бы общее представление о тех правилах, которые определяют командный язык, используемый в MuPAD. В силу объективных и очевидных причин, здесь мы рассмотрим только основные команды и приемы. Особенности графического интерфейса будут описываться по мере надобности в контексте решаемых задач.

На заметку

Прежде, чем приступить к обзору возможностей MuPAD, немного истории. Среда (более точный термин – система компьютерной алгебры) MuPAD с 1997 года разрабатывалась и развивалась как отдельный проект группой разработчиков из университета Падерборна (Германия) и компанией SciFace Software. Существовала бесплатная и коммерческая версии продукта. После покупки в 2008 году компании SciFace компанией Mathworks среда MuPAD стала составной частью пакета инструментов Symbolic Math Toolbox приложения Matlab.

В MuPAD пользователю предлагается широкий спектр возможностей по решению самых разнообразных задач, в том числе и с использованием специальных подпакетов. Основу MuPAD составляет оригинальный командный язык, который очень напоминает командный язык Maple и поддерживает методы объектноориентированного программирования. На самом деле первое знакомство с командами MuPAD уже состоялось – в предыдущих разделах мы использовали функции для выполнения символьных операций.

На рис. 9.18 показан документ MuPAD с примерами простых вычислений.

Принцип достаточно простой: в рабочей области в том месте, где мигает курсор (область ввода) вводим команду, а для ее выполнения нажимаем клавишу <Enter>. Под командой, в области вывода, отображается результат.

На заметку

По умолчанию команды ввода отображаются красным цветом, а результат их выполнения – синим. Есть еще текст, который отображается черным цветом.

Чтобы результат выполнения не отображался в области вывода, а конце команды следует поставить двоеточие.

Синтаксис арифметических операций близок к их соответствующей математической записи. Среди используемых операторов есть оператор сложения (+), оператор умножения (*), оператор вычитания (-), оператор деле-

367

Самоучитель Matlab

ния (/), оператор возведения в степень (^) и другие. Оператором присваивания является комбинация двоеточия и знака равенства (:=). Символьная константа PI означает число π, мнимая единица обозначается как I. По

умолчанию все операции выполняются в символьном виде. Например, при зультат

вычислении значения sin(PI/4) возвращается символьный ре

2 , а не приближенное значение в формате числа с плавающей 2 точкой. Но

если нужно именно такое значение – тоже нет проблем. Можно воспользоваться функцией float(). Аргументом передается выражение, которое необходимо представить в формате числа с плавающей точкой. Нередко аргументом указывается символ % - указатель на результат выполнения последней команды.

На заметку

По сравнению с командным окном Matlab, рабочая область среды MuPAD имеет важное отличие: команды в рабочей области можно выполнять в разной последовательности, причем по несколько раз. Другими словами, порядок следования команд в рабочей области не обязательно совпадает с последовательностью их выполнения. Более того, если команда введена и выполнена, ее можно отредактировать и выполнить снова.

Количество значащих цифр, отображаемых в формате с плавающей точкой, задается системной переменной DIGITS и по умолчанию равно 10. Чтобы изменить это значение, переменной DIGITS присваивают новое значение (например, DIGITS:=30). Чтобы вернуть настойки по умолчанию, вызываем команду delete DIGITS. Такого же типа инструкцию используют для "сброса" значений символьных переменных.

Разумеется, возможности среды MuPAD не ограничиваются алгебраическими вычислениями. Те же задачи, которые рассматривались выше, решаются в MuPAD с ощутимо большим эффектом. Немаловажное достоинство – создание качественной графики и анимации. На рис. 9.19 представлен документ с двумерным графиком функции.

Двумерный график создаем командой plot(cos(x)+cos(3*x),x=0..4 *PI). Основу команды составляет функция plot(). Первым аргументом функции передается выражение, которое определяет отображаемую на графике зависимость. Второй аргумент – независимая переменная и диапазон

еезначений.

На заметку

Диапазон изменения переменной указывается так: переменная, знак равенства и границы диапазона изменения переменной, разделенные двумя точками.

368

Глава 9. Символьные вычисления

Рис. 9.19. Создание двумерного графика

Рис. 9.20. Создание трехмерного графика

369

Самоучитель Matlab

С помощью той же функции plot() создается и трехмерная графика. В этом случае первым аргументом функции передается выражение, зависящее от двух символьных переменных, а также диапазон изменения каждой из переменных. Индикатором того, что график трехмерный, является опция #3D, которая обычно в списке аргументов указывается последней. Пример создания трехмерного графика приведен на рис. 9.20.

Здесьмыиспользоваликомандуplot(sin(sqrt(x^2+y^2))/sqrt(x^2+ y^2),x=-4*PI..4*PI,y=-4*PI..4*PI,#3D). Кроме перечисленных параметров, при работе с графикой используются многие другие опции, которые мы рассмотрим несколько позже. Сейчас перейдем к рассмотрению основных классов задач – опишем, как они решаются в среде MuPAD.

Определение функции

Сначала меня это забавляло - с одной стороны. Но, с другой, я понимал, что пора объясниться.

К/ф "Приключения Шерлока Холмса и доктора Ватсона. Знакомство"

До этого мы работали с выражениями. Но на практике бывает намного удобнее определить ту или иную функциональную зависимость и работать с ней. В среде MuPAD функция может задаваться несколькими способами. Здесь мы рассмотрим наиболее простой – с помощью оператора "стрелка" (оператор ->). Функция в этом случае определяется так: указывается имя функции, оператор присваивания, список аргументов (разделенных запятыми), оператор -> и выражение, в которое входят аргументы и которое определяет функциональную зависимость. Например, командой y:=x->x^2 задается функция y(x) = x2 . Фактически здесь переменная y определяется как оператор. Действие этого оператора на аргумент x сводится к тому, что вычисляется значение x^2. При этом переменная x играет роль локальной переменной.

Рассмотрим документ, представленный на рис. 9.21.

В этом документе мы определили функцию f (x) = sin(x) с помощью x

команды f:=x->sin(x)/x. Затем эта функция используется в разных выражениях. Так, ее можно вызывать с символьным аргументом: f(z) или f(PI/4). Удобно использовать функции при отображении графиков, поскольку команда вызова функции выглядит намного компактнее по сравнению с выражением, задающим соответствующую функциональную зависимость.

370