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

Maple для студентов физиков. Часть 1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Глава 7. Решение уравнений

solve и fsolve можно применять для решения нелинейных систем, т. е. систем уравнений, в которых перемененные – квадраты, кубы, синусы, экспоненты и т. п. Например, вот набор двух нелинейных уравнений

>restart;

>E1:=x^2-y=5;E2:=x-y^2=-13;

Вначале попробуем применить команду solve:

> s:=solve({E1,E2},{x,y});

Чтобы получить уравнение для х, Maple исключил у из Е2 с помощью Е1. Затем он факторизовал это квадратное уравнение, выдал ответ (x,y) = (3,4) и свел оставшуюся часть задачи к кубической. Если завершить задачу командой evalf, получим

> evalf(s);

Но если нарисовать кубическую часть в RootOf (для оценки положения корней), то увидите, что есть еще два решения. Где же они? Попробуйте применить fsolve, и получите:

> s:=fsolve({E1,E2},{x,y});

что еще хуже, так как дает один корень. Для поиска корней можно задавать примерно правильные числа в качестве подсказок для fsolve:

> s:=fsolve({E1,E2},{x=2.9,y=4.1});

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

>restart;

>E1:=x^2.-y=5.;E2:=x-y^2.=-13.;

>s:=solve({E1,E2},{x,y});

Из этого – урок: будьте изобретательны и пробуйте разные пути решения задачи и, возможно, один сработает.

В Maple есть другой полезный инструмент для случая, когда у вас есть два нелинейных уравнения с двумя неизвестными. Точно так, как

151

Maple для студентов физиков

в задачах с одной переменной было полезно сначала строить график, чтобы посмотреть, где есть решения, то в данном случае двумерные графики помогут искать корни двух неизвестных. Применяется команда построения графиков implicitplot, которая берет уравнение с двумя переменными, вроде такого: x2 y = 5 и строит определяющую их кривую в плоскости x, y (учтите, что для добавления команды графики надо вначале загрузить пакет графики: with(plots)):

>with(plots):

>implicitplot(x^2-y=5,x=-3..3,y=-6..3);

Чтобы применить это для графического поиска решений двух уравнений, просто постройте оба уравнения на одном графике и посмотрите, где две кривые пересекают друг друга:

> implicitplot({x^2-y=5,x-y^2=-13},x=-14..4,y=-6..5,numpoints=5000);

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

> implicitplot({x^2-y=5,x-y^2=-13},x=-3..3,y=-5..3,numpoints=5000);

Если у вас есть три нелинейных уравнения с тремя переменными implicitplot3d может сделать нечто подборное (см. Maple help).

Задача 6.5

Найдите все решения (Re и Im) набора уравнений

y2 x2 = –2

x y3 = 3.

Прежде чем решать, примените implicitplot для построения картинки, которая поможет определить количество корней, которые придется искать.

Вот еще нелинейный набор для проверки Maple.

>restart;

>E1:=cos(x)+y-sqrt(z)=-.191748502;E2:=x*y*z=3;E3:=x+y+2*z=8;

152

Глава 7. Решение уравнений

Вначале попробуем solve

> solve({E1,E2,E3},{x,y,z});

Maple на мгновение задумается, но ничего не произойдет. Теперь попробуем fsolve с диапазонами для каждой переменной:

> fsolve({E1,E2,E3},{x,y,z},{x=-3..3,y=-3..3,z=-3..3});

похоже на то, что (x,y,z)=(1,1,3) достаточно близко к решению. Предупреждаю, что в трех и более измерениях Maple может ошибиться и работать, несмотря на то что: (a) вы знаете, что здесь есть решение и

(b) вы говорите, где искать примерное значение.

Для лучшего понимания, где следует искать решение, можно при-

менить implicitplot3d:

>with(plots):

>implicitplot3d({E1,E2,E3},x=-5..5,y=-5..5,z=0..5);

Щелкните на рисунке и покрутите его, чтобы разглядеть подробнее. После этого рекомендую перерисовать график так, чтобы он был вблизи известного решения: [x,y,z] = [1,1,3]:

>implicitplot3d({E1,E2,E3},x=.5..1.5,y=.5..1.5,z=2.5..3.5,grid=[20,20,20]);

Всередине графика все три поверхности E1, E2, и E3 пересекаются в точке. Это и есть то, что вы искали с помощью implicitplot3d, но вообще-то сложно рассмотреть, что происходит в трех измерениях.

Задача 6.6

См. вторую часть Пособия.

Задача 6.7

Пусть гладкая функция y(x) представлена тремя точками (x1,y1), (x2,y2), (x3,y3). В качестве приближения этой функции, предположите, что эти три точки определяют параболу вида y(x) = a + bx + cx2, для чего есть три аппроксимирующих уравнения для нахождения коэффициентов параболы a, b, c. Постройте эти три уравнения и используйте solve, чтобы найти формулы для a, b, и c, и затем определите выражение Maple для параболы.

153

Maple для студентов физиков

Оно выглядит сложно, но для равноотстоящих точек оно выглядит вполне приемлемо. Положите: x2 = x1 + h и x3 = x1 + 2h и упростите выражения для a, b, c.

Раз у вас есть приближенная форма для функции, вы можете ее по-разному использовать:

(a) Оцените площадь под кривой между x1 и x3 путем интегрирования параболы между этими двумя пределами. Получится правило Симпсона.

Чтобы посмотреть, как функционирует этот приближенный инте-

грал, задайтеx1=0, x2=0.5, x3=1.0 иy1=cos(x1), y2=cos(x2), y3=cos(x3), при этом ваша приближенная площадь будет близка к 10 cos(x)dx sin(1) .

(b)оцените производную функции y(x) в средней точке х2 путем дифференцирования параболы и вычисления значения производной

вx=x2. Эта формула называется формулой центральных разностей для первой производной. Проверьте ее точность при x2=0.5, используя x1=0.4 и x3=.6 с функцией y(x) = ex.

(c)Оцените вторую производную функции y(x) в x2 путем дифференцирования формулы для параболы еще раз. Это центральная вторая производная для равноотстоящих точек. Проверьте ее точность, как в части (b).

Эти формулы дифференцирования и интегрирования понадобятся вам в курсе физики.

154

Глава 8. ОБЫКНОВЕННЫЕ ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ

Дифференциальные уравнения – это язык физики. Maple поможет вам их решать.

Рассматриваемые в главе вопросы/задачи

бейсбол: учет трения о воздух

Baseball with air friction

гармонический осциллятор с за-

Damped harmonic oscillator

туханием

 

динамический хаос

Dynamical chaos

ОДУ первого порядка

First order ode

Лоренцов аттрактор

Lorentz attractor

значения ОДУ

Meaning of odes

нелинейная динамика

Nonlinear dynamics

численное решение ОДУ

Numerical solution of odes

odeplot и dsolve, численные

Odeplot and dsolve, numeric

рисование результатов из dsolve

Plotting results from dsolve

команда rhs с dsolve

Rhs command with dsolve

уравнение Шредингера,

Schrodingers equation,

гармонический осциллятор

harmonic oscillator

ОДУ второго порядка

Second order ode

стрельба

Shooting

команда Spacecurve

Spacecurve command

системы ОДУ

Systems of odes

Разделы:

Дифференциальные уравнения первого порядка Дифференциальные уравнения второго порядка Системы дифференциальных уравнений

155

Maple для студентов физиков

Численное решение дифференциальных уравнений Стрельба (дополнительная тема)

Как дифференциальное уравнение создает кривую? Нелинейная динамика и хаос (дополнительная тема)

Упоминаемые в главе команды Maple

diff

dsolve

dsolve

numeric

implicit

rkf45

parametric

odeplot

rhs

DEplot

assign

spacecurve

lhs

 

Дифференциальные уравнения первого порядка

В этой части Maple рассматривает ДУ как обыкновенные, используя команду diff.

Замечание: многие задачи физики основаны на ДУ в частных производных. Для этого есть специальный пакет Physics, который разработан для решения таких ДУ. Описанию работы с этим пакетом посвящено отдельное учебное пособие.

Начнем с запроса к Maple: решить ДУ радиоактивного распада. Если скорость распада атомов в образце равна g (размерность 1/сек), то уравнение для определения числа все еще остающихся в об-

разце радиоактивных атомов:

>restart;

>E1:=diff(N(t),t)=-g*N(t);

добавим начальное условие: в момент времени t = 0 в образце было N0 радиоактивных атомов.

Задача – найти функцию N(t). Maple решает эту задачу с помощью команды dsolve.

> dsolve(E1,N(t));

156

Глава 8. Обыкновенные дифференциальные уравнения

Как и ожидалось, решением является спадающая экспонента. Поскольку мы еще не задали начальное условие, то в начале будет неизвестная константа. Ее значение найти несложно: при t = 0 экспонента = 1, поэтому константа _C1 = N0. Но dsolve может принимать начальные условия и сделает эту небольшую работу за вас. Для этого замените первый аргумент dsolve набором, который содержит E1 и начальное условие, как ниже (см. запрос ?dsolve,initial_conditions).

> dsolve({E1,N(0)=No},N(t));

Получим график этого решения. Для этого зададим Maple значения N0 и g:

> No := 5;g:=3;

Затем сделаем то, что может странно выглядеть. Из решения, полученного dsolve берем правую часть выражения и передаем в график. Для этого напишем:

plot(

затемостановимся, примениммышьдлявыделениявыражениявправой части написанного выше N(t)=... и вставим его внутрь. Но это неудобно, лучше воспользоваться возможностью Maple дать вам доступ к найденному решению. Один из способов – присвоить решение переменной

> S1:=dsolve({E1,N(0)=No},N(t));

Теперь на решение можно сослаться по имени S1, а также можно сослаться на само решение с помощью rhs(S1). Делается это так:

> plot(rhs(S1),t=0..3);

Заметьте, что команда rhs собирает правую часть уравнения. Легко догадаться, что делает команда lhs.

Другой путь – нарисовать результаты. Для этого Maple нужна переменная с именем N(t), которую можно использовать в качестве выражения в команде plot. Синтаксис: assign(S1);.

> assign(S1);

и затем мы можем использовать

157

Maple для студентов физиков

> plot(N(t),t=0..3);

Естественный вопрос – что стало с N? Посмотрите:

> N;

в ней ничего нет.

Проблема в том, что Maple сделал что-то для него естественное, но странное для нас.

Он достаточно точно взял результат для S1, что есть N(t) = 5е(–3t) и «отфильтровал», создав выражение, названное N(t).

Посмотрите на t:

> N(t);

имеет смысл продифференцировать его

> diff(N(t),t);

Имеет смысл решить для случая, когда он = 1

> solve(N(t)=1,t);

Но вы легко увидите, что это не функция, которой вы можете задавать значения, сделав так:

>N(5);

Иесли вы попытаетесь дать t значение, а затем вычислить выражение N(t), ничего не получится, но разрушится N(t):

>t:=3;

>evalf(N(t));

>solve(N(t)=1,t);

Проблема, кажется, в том, что символ N(t), который появился без присваивания – это смесь выражения и функции, поэтому, если вы хотите использовать assign вместо rhs, и зачастую так делать кажется естественным, но будьте очень внимательны с присваиванием значений тому, что появится в выражении. Также учтите, что вы не можете снова вернуться к dsolve с другим начальным условием, потому что N(t) разрушено. Теперь следует применить restart.

158

Глава 8. Обыкновенные дифференциальные уравнения

> S1:=dsolve({E1,N(0)=3},N(t));

>

Это выглядит настолько неприятно, что, возможно, вы никогда не захотите применять assign. Но assign создает график. Другие команды выглядят настолько проще, чем с rhs, что не имеет смысла упоминать ее. Но не планируйте использовать только ее; часто самым безопасным является использование rhs.

В конце отметим, что в командах plot, solve и в дифференцировании то, что в вызове N(t) выглядит как использование функции N, на самом деле является использованием выражения expression (или нечто вроде выражения с именем N(t)). Если это запутывает, посмотрите разницу между выражением и функцией в Главе 3.

Задача 7.1

Дифференциальное уравнение для тока i(t) в контуре, содержащем батарею ε, сопротивление R, и индуктивность L:

d

 

Ri(t)

 

L

 

i(t)

 

 

 

dt

 

 

 

(Символ I(t) нельзя применять для тока, потому что I

1 и его нель-

зя применять в другом смысле.)

Решите это ДУ для тока и нарисуйте результат, если в начальный момент времени ток = 0, L = 0.001 H, R = 100Ω, и ε = 6V.

Задача 7.2

Задача о взрывном росте.

Пусть у вас есть некий процесс, в котором скорость роста величины у пропорциональна степени y, например, y2 или y3.

Примените Maple к этим двум случаям, решив ДУ вида

y yp .t

В обоих случаях (p = 2 и p = 3) начальное условие y(0) = 1. Нарисуйте решение в достаточно большом временном интервале,

чтобы вы могли увидеть «взрыв».

159

Maple для студентов физиков

Задача 7.3

Рассмотрим относительно безвредное ДУ первого порядка

y sin(xy) при y(0) = 1.

x

Попросите Maple решить его и посмотрите, что случится. Попытайтесь решить его в разделе, посвященном численному ре-

шению ДУ.

Некоторые полезные опции dsolve.

implicit: если у вас есть ДУ для y(x), но думаете, что решение может быть проще, если y(x) не решать явно, примените опцию implicit:

>eq:=diff(y(x),x)=sin(y(x))/cos(x);

«Явное решение»

>dsolve(eq);

«Неявное решение»

> dsolve(eq,implicit);

Учтите, что мы не имеем решения в виде y(x) = чему-то, а вместо этого имеем уравнение, содержащее y(x), которое все еще надо решать.

parametric: иногда комбинированная опция implicit, parametric сможет дать вам красивое решение вместо жуткого:

>eq:=diff(y(x),x)^2-diff(y(x),x)+y(x);

>dsolve(eq);

>dsolve(eq,implicit,parametric);

Вэтом решении _T это параметр, изменение которого дает оба – у и х, а, следовательно, дает (неявно и параметрически) y(x). Попробуйте применить этот метод, если вам вернулось решение с декларацией

RootOf.

Дифференциальные уравнения второго порядка

ДУ второго порядка часто встречаются в физике: закон Ньютона,

уравнение Шредингера, диффузия...

160