Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 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
