Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Показательной в данном случае является команда solve(eq,x), которой решается квадратное уравнение общего вида (то есть ax2 +bx +c = 0 ). Предварительно это уравнение командой eq:=a*x^2+b*x+c=0 присваивается в качестве значения переменной eq. Обращаем внимание, что результат представлен для всех случаев: общий (если параметр a ≠ 0 ), решение линейного уравнения bx +c = 0 (при значении параметра a = 0 ), множество комплексных чисел (при всех нулевых значениях a = b = c = 0 решением уравнения является любое число) и пустое множество (при значениях параметров a = b = 0 и ненулевом параметре c ≠ 0 уравнение решений не имеет).

Для решения системы уравнений x2 + y2 = 25 и y x = 1 используем команду solve([x^2+y^2=25,y-x=1],[x,y]). Здесь первым аргументом функции solve() передан список [x^2+y^2=25,y-x=1] с уравнениями решаемой системы, а второй аргумент – список [x,y] с переменными, относительно которых решается система.

Точно так же обстоят дела с неравенствами. Некоторые простые примеры решения неравенств приведены в документе на рис. 9.30.

Рис. 9.30. Решение неравенств

Командой solve(x^2-5*x+6<0,x) предпринимаем попытку решить неравенство x2 − 5 + 6 < 0 . На множестве действительных чисел решение этого неравенства – диапазон значений аргумента от 2 до 3, то есть x (2, 3) . Этот диапазон отображается в области вывода результата. Тем не менее, кроме этого диапазона, там можно видеть что-то еще. Причина в том, что решение ищется на множестве комплексных чисел.

381

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

На заметку

В качестве "дополнительного" решения указано множество вида 5 + iy , где

через i обозначена мнимая единица i2 = −1 . Через y

2

обозначена действи-

тельная переменная. Если в выражение z2 − 5z + 6

подставить значение

z =

5

+ iy , получим действительное выражение y2

1

< 0.

 

 

2

 

4

 

С одной стороны, это удобно. С другой стороны – ситуация существенно усложняется, а простые задачи нередко становятся сложными. Поэтому нередко приходится явно указывать, что решение ищется на каком-то множестве – обычно это множество действительных чисел. Например, чтобы найти решение неравенства на множестве действительных чисел, используем команду solve(x^2-5*x+6<0,x) assuming x in R_. От предыдущей команды она отличается инструкцией assuming x in R_. Состоит она из ключевого слова assuming и инструкции x in R_ - это инструкция в формате переменная in множество. Переменной в данном случае является x, а множеством, как отмечалось, является множество действительных чисел, что стандартно обозначается как R_.

Попытка решить неравенство на множестве действительных чисел приводит к ожидаемому результату. При решении более сложного полиномиального неравенства также разумно четко определить область поиска решений (команда solve(x^3-11*x^2+31*x-21<0,x) assuming x in R_). Получаем правильное решение для неравенства x3 −11x2 + 31x −21 < 0 , которое состоит в объединении интервалов x (−∞,1) (3, 7).

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

Все это так прямолинейно и перпендикулярно, что мне неприятно.

В. Черномырдин

Дифференциальные уравнения также можно решать функцией solve(). Правда, в этом случае необходимо приложить некоторые усилия – а именно, как-то намекнуть, что решается именно дифференциальное уравнение, а не какое-то другое. Существует несколько способов добиться этого. Но самый простой вариант, пожалуй, состоит в том, чтобы в явном виде указать метод поиска решения – для дифференциальных уравнений это ode

(сокращение от ordinary differential equation, то есть обыкновенное дифференциальное уравнение). Синтаксис вызова функции solve() имеет такой вид: ode::solve(). Первым аргументом указывается решаемое уравнение или заключенное в фигурные скобки множество уравнений (если решается

382

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

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

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

Документ содержит несколько примеров. Первый среди них – решение дифференциального уравнения y′′(x) + w2y(x) = 0 . Общее решение этого уравнения, как известно, представляет собой линейную комбинацию синуса и косинуса: y(x) = C1 cos(wx) +C2 sin(wx). Здесь через C1 и C2 представлены произвольные константы интегрирования, которые определяются из начальных или граничных условий. Если воспользоваться командой ode::solve(y''(x)+w^2*y(x)=0,y(x)), то фактически это решение и получим, правда, записанное в несколько ином виде – через комплексные экспоненты, то есть как y(x) = C1 exp(iwx) +C2 exp(−iwx) .

На заметку

Здесь имеет смысл напомнить формулу Эйлера exp(it) = cos(t) + i sin(t).

Далее командой ode::solve({y''(x)+25*y(x)=0,y(0)=3,y'(0)=2}, y(x)) решаем задачу Коши: уравнение y′′(x) + 25y(x) = 0 и начальные условия y(0) = 3 и y′(0) = 2 . Результат получаем точный и достаточно компактный.

383

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

На заметку

Уравнение и начальные условия при передаче аргументом функции solve() заключаются в фигурные скобки.

По тому же принципу действуем, решая задачу Коши для системы дифференциальных уравнений x′(t) = 3x(t) −y(t), y′(t) = 2x(t) + y(t)

сначальными условиями x(0) = 1 и y(0) = 2 . Задача имеет решение x(t) = exp(2t)(cos(t) − sin(t)) и y(t) = 2 exp(2t)cos(t) . Соответствующая

команда выглядит как ode::solve({x'(t)=3*x(t)-y(t),y'(t)=2*x (t)+y(t),x(0)=1,y(0)=2},{x(t),y(t)}).

На заметку

В случае необходимости результат решения дифференциального уравнения или системы уравнений можно упрощать с помощью функции simplify()

или Simplify().

Задача с граничными условиями решается так же, как задача с начальными значениями,тольковместозначенияфункциииеепроизводныхвначальных точках задаются значения функции (и ее производных) в граничных точках. В качестве примера можно привести команду ode::solve({y''(x)+ 9*y(x)=0,y(0)=1,y'(1)=0},y(x)). С помощью этой команды решается уравнение y′′(x) + 9y(x) = 0 с граничными условиями y(0) = 1 и y′(1) = 0 . В результате найдено решение дифференциального уравнения, удовлетворяющее обоим граничным условиям.

Элементы программирования

Вопросы надо ставить уместно и своевременно.

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

Всреде MuPAD можно составлять программные коды, в которых вычисления выполняются в символьном виде. Здесь мы кратко рассмотрим основные управляющие инструкции, которые при этом допускается использовать.

ВMuPAD используется несколько базовых операторов. Для создания точек ветвления в программных кодах используется условный оператор if. Синтаксис его вызова следующий:

if условие then команды

else

команды end_if

384

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

После ключевого слова if указывается условие, которое проверяется и в зависимости от истинности или ложности которого выполняется тот или иной блок команд. В частности, если условие истинно, выполняются команды, указанные после ключевого слова then. Если условие ложно, выполняются команды, указанные после ключевого слова else. Заканчивается условный оператор инструкцией end_if.

На заметку

Блок с инструкцией else не является обязательным. Если этот блок отсутствует, то условный оператор обрабатывается так: при истинном условии выполняются команды после ключевого слова then. Если условие ложно, управление передается следующему оператору, после условного.

В документе на рис. 9.32 представлен код функции, в которой использован условный оператор.

Рис. 9.32. Использование условного оператора при определении функции

385

Источник: https://studfile.net/preview/16433384/