Методы решения физических задач

 

Версия для печати

Интеграл работы в классической механике

Продемонстрируем независимость пути интеграла от работы для консервативного силового безвихревого поля, например – гравитационного поля сферы.

Определим потенциальную энергию частицы массы m в поле звезды (или планеты) массы M:

  • V:=-G*M*m/r;

  • with(linalg):
  • F:=-grad(V,[x,y,z]);

Не работает! Запишем иначе.

  • F:= -grad(V,[r,theta,phi],coords=spherical);

  • evalm(F[1]);

Тоже не то, что надо...

Причина в том, что знак «–» перед grad дает ошибку при выполнении команды grad из-за несоответствия возвращаемому типу данных (должен быть вектор). Исправить это можно, поставив знак минус перед скалярной функцией потенциала V.

  • F:=grad(-V,[r,theta,phi],coords=spherical);

  • F[1];

ОК, Maple имеет свои особенности! Ему не нравился знак «–» перед градиентом.

  • curl(F,[r,theta,phi],coords=spherical);

Силовое поле не вихревое по построению, поскольку получено из скалярного потенциала.

Для построения потенциальной энергии следует перейти в декартовы координаты. Покажем потенциал на фиксированной плоскости z = 1 (рис. 4.10.1):

  • PL1:=plot3d(subs(r=sqrt(x^2+y^2+1),G=1,M=1,m=1,V),
    x=-5..5,y=-5..5,axes=boxed): plots[display](PL1);

Рис. 4.10.1

Рис. 4.10.1

Выберем прямолинейный путь:

  • r_i:=[2,2,1];

  • r_f:=[-2,0,1];

  • r_t:=r_i+(r_f-r_i)*t;

  • evalm(r_t);

Примечание: здесь t – параметр, но это не обязательно время. Тем не менее назовем производную от представляемых параметров v_t:

  • v_t:=diff(r_t,t);

Теперь интеграл работы сводится к параметрическому интегралу от скалярного произведения F и v_t, но следует понимать, что F необходимо оценивать вдоль пути, т. е. как F(r_t)!!!

Кроме того: параметрическое представление было определено в декартовых координатах, поэтому именно эти координаты надо использовать для вычисления скалярного произведения, т. е. в них следует представить силу:

  • F:=grad(-subs(r=sqrt(x^2+y^2+z^2),V),[x,y,z]);

Начнем с распространенной ошибки:

  • Work:=int(dotprod(F,v_t),t=0..1);

Это плохой ответ по нескольким причинам:

  1. работа должна представляться числом (поскольку указаны начальная и конечная точки пути);
  2. нет оценки силы вдоль выбранного пути.
  • r_t:=evalm(r_t);

  • Work:=int(dotprod(subs(x=r_t[1],y=r_t[2],
    z=r_t[3],F),v_t),t=0..1);

Это расстраивает: очевидно, что делаем правильно, но получаем все тот же неправильный ответ!!!

Как избежать этой ловушки?

Посмотрим на подвыражения и поймем, что что-то не сработало.

Для подстановки векторов и матриц в Maple нужно применить op():

  • dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],op(F)),v_t);

Это правильное подынтегральное выражение: оно больше не зависит от x, y, z, а зависит только от параметра t.

Теперь интегрируем:

  • Work:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],
    op(F)),v_t),t=0..1);

Альтернативой использованию op() является преобразование созданного grad вектора в список:

  • FL:=convert(F,list);

  • Work:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],FL),
    v_t),t=0..1);

  • evalf(%);

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

  • r_i;

Нам нужна функция, вычисляющая размер вектора положения:

  • v_mag:=v->sqrt(add(v[i]^2,i=1..3));

  • v_mag(r_i),v_mag(r_f);

  • subs(r=v_mag(r_i),V)-subs(r=v_mag(r_f),V);

Различие между потенциальной энергией в начальной и конечной точках равнозначно работе, проделанной над частицей, или изменению кинетической энергии:

  • Work-%;

  • with(plottools);
  • l := line(r_i, r_f, color=red, linestyle=2,
    thickness=3): plots[display](l,PL1);

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

  • r_iV:=r_i: r_iV[3]:=subs(r=v_mag(r_i),G=1,M=1,m=1,V): r_iV;

  • r_fV:=r_f: r_fV[3]:=subs(r=v_mag(r_f),G=1,M=1,m=1,V): r_fV;

  • l := line(r_iV, r_fV, color=red, linestyle=2, thickness=3):
    plots[display](l,PL1);

Рис. 4.10.2

Рис. 4.10.2

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

Сначала найдем заново суммарный прирост кинетической энергии:

  • evalf(Work);

Разобьем путь на две половины: между t = 0 и t = 0.5 и между t = 0.5 и t = 1:

  • Work1:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],
    op(F)),v_t),t=0..1/2);

  • Work2:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],
    op(F)),v_t),t=1/2..1);

  • evalf([Work1,Work2,Work1+Work2]);

В первой половине над частицей выполняется большая работа, затем частица работает «против» потенциальной ямы, но в конечной точке все еще есть чистый прирост кинетической энергии. Однако в этот момент она имеет более низкое значение потенциальной энергии, т. е. приобретает кинетическую энергию за счет потенциальной энергии.

Теперь решим задачу с неконсервативной силой. Она придумана, чтобы показать, что происходит в неконсервативном силовом поле. Непосредственного физического смысла здесь нет.

  • restart;
  • F:=[x^2+2*y-z,y+z-x,z^3+x*2];

  • with(linalg):
  • curl(F,[x,y,z]);

То есть это силовое поле имеет вихрь, а значит, его нельзя получить из скалярного потенциала. Выбираем тот же путь, что и раньше:

  • r_i:=[2,2,1];

  • r_f:=[-2,0,1];

  • r_t:=evalm(r_i+(r_f-r_i)*t);

  • v_t:=diff(r_t,t);

Еще одна из особенностей Maple. В результате того, что тип переменной r_t определен как список (list), evalm выдал «не то». Проверим тип переменной:

  • whattype(r_t);

То есть evalm понял r_t как символ:

  • v_t:=map(diff,r_t,t);

Если не применять evalm, то сработало бы простое дифференцирование, потому что t проявилось как множитель одного из списков (как в предыдущей задаче).

  • Work1:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],F),
    v_t),t=0..1/2);

  • Work2:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],F),
    v_t),t=1/2..1);

  • Work:=int(dotprod(subs(x=r_t[1],y=r_t[2],z=r_t[3],F),
    v_t),t=0..1);

  • evalf([Work1,Work2,Work1+Work2,Work]);

Конечно, интеграл работы аддитивен. Покажем, что если две конечные точки соединены как-то иначе, то работа, выполненная над частицей при ее перемещении из A в B, получится другой.

Выберем другой прямой путь от A до B, который проходит в плоскости через начало в точке [0, 0, 1]:

  • r_1:=[0,0,1];

  • r_tp1:=evalm(r_i+(r_1-r_i)*t);

  • v_tp1:=map(diff,r_tp1,t);

  • r_tp2:=evalm(r_1+(r_f-r_1)*t);

  • v_tp2:=map(diff,r_tp2,t);

Вычислим интеграл:

  • Work1:=int(dotprod(subs(x=r_tp1[1],y=r_tp1[2],
    z=r_tp1[3],F),v_tp1),t=0..1);

  • Work2:=int(dotprod(subs(x=r_tp2[1],y=r_tp2[2],
    z=r_tp2[3],F),v_tp2),t=0..1);

  • evalf([Work1+Work2,Work]);

Количество выполненной над частицей работы при ее движении через силовое поле по другому пути – другое!

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

Сначала найдем силовое поле в плоскости z = 1 без учета z-компоненты силы, так как частица не перемещается вдоль z (эта составляющая силы не выполняет никакой работы!). Результат показан на рис. 4.10.3.

  • Fzeq1:=subs(z=1,F);

  • F2d:=[Fzeq1[1],Fzeq1[2]];

  • with(plots):
  • PL1:=fieldplot(F2d,x=-2..2,y=-2..2,arrows=thick,color=blue,
    axes=boxed,grid=[12,12]): display(PL1);
  • with(plottools):
  • l1 := line([r_i[1],r_i[2]], [r_f[1], r_f[2]],
    color=red, linestyle=2, thickness=3):
  • l2 := line([r_i[1],r_i[2]], [r_1[1], r_1[2]],
    color=green, linestyle=2, thickness=3):
  • l3 := line([r_1[1],r_1[2]], [r_f[1], r_f[2]],
    color=green, linestyle=2, thickness=3):
  • display(l1,l2,l3,PL1);

Рис. 4.10.3

Рис. 4.10.3

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

  • evalf([Work1,Work2,Work1+Work2,Work]);

F

Обратите внимание, что работа, проделанная силой над частицей, отрицательна. Движение частицы начинается в [2, 2] (верхний правый угол), и она движется против силового поля (см. рис. 4.10.3). В [0, –2] она приходит с отрицательным количеством работы, так как работа выполнялась против силового поля. Это означает, что кинетическая энергия частицы в В меньше, чем в A. При этом в зависимости от того, выбран красный или зеленый путь (см. рис. 4.10.3), энергия в B меньше, чем в A, на разную величину.

Упражнение 4.10.1

Рассчитайте работу, проделанную над частицей вдоль пути так, чтобы она набрала энергию для перехода от A = [2, 2, 1] к B = [– 2, 0, 1].

Решение

  • r_i,r_f;

  • r_1:=[2,-2,1];

  • r_tp1:=evalm(r_i+(r_1-r_i)*t);

  • r_2:=[-2,-2,1];

  • v_tp1:=map(diff,r_tp1,t);

  • r_tp2:=evalm(r_1+(r_2-r_1)*t);
  • v_tp2:=map(diff,r_tp2,t);

  • r_tp3:=evalm(r_2+(r_f-r_2)*t);
  • v_tp3:=map(diff,r_tp3,t);

Вычисляем интеграл работы:

  • Work1:=int(dotprod(subs(x=r_tp1[1],y=r_tp1[2],
    z=r_tp1[3],F),v_tp1),t=0..1);

  • Work2:=int(dotprod(subs(x=r_tp2[1],y=r_tp2[2],
    z=r_tp2[3],F),v_tp2),t=0..1);

  • Work3:=int(dotprod(subs(x=r_tp3[1],y=r_tp3[2],
    z=r_tp3[3],F),v_tp3),t=0..1);

  • evalf(Work1+Work2+Work3);