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

Компьютерные лабораторные занятия по теоретической механике. Ч. 2 (110

.pdf
Скачиваний:
5
Добавлен:
15.11.2022
Размер:
474.01 Кб
Скачать

Ответ:

S = Et + p0y +

1

2mE p02y

+ 2m2gx sin

3=2

:

3m2g sin

 

Задача 9.24

Составить уравнение Гамильтона-Якоби для частицы, движущейся в однородном поле тяжести и найти полный интеграл этого уравнения (в декартовой системе координат).

Ответ:

S = Et + px0x + py0y

1

2mE + 2m2gz px20 py20

3=2

:

 

 

3m2g

 

Задача 9.25

Найти полный интеграл уравнения Гамильтона-Якоби и закон движения (в квадратуре) математического маятника массы m длины l.

Решение.

Из функции Гамильтона составим уравнение Гамильтона-Якоби:

 

 

 

 

 

 

p'2

 

 

 

H =

 

mgl cos(');

 

 

2ml2

 

1

 

@S

 

2

mgl cos(') +

@S

= 0:

 

 

 

 

2ml2

@'

 

@t

> H:p^2/(2*m*l^2)-m*g*l*cos(phi);

Так как уравнение не содержит переменную t в явном виде, то решение ищем в виде

S('; t) = Et + S0('):

> eqS:S=-E*t+S0(phi);

> subst(eqS,eqHJ)$ eq:ev(%,diff);

Решим дифференциальное уравнение:

> eqv:solve(eq,diff(S0(phi),phi));

> ode2(eqv[2],S0(phi),phi);

> subst(%,eqS);

Здесь постоянная E появилась при решении дифференциального уравнения. Согласно методу Гамильтона-Якоби, производная @S=@E òî-

же равна постояной, которую удобно обозначить t0:

> diff(part(%,2),E)=-t0;

31

Ответ:

S = Et+

2ml2 (E + mgl cos ') d'; t t0 =

 

s

E + mgl cos '

d':

Z p

 

 

Z

 

 

2ml2

 

 

 

 

 

 

 

 

 

Задача 9.26

Найти полный интеграл уравнения Гамильтона-Якоби и закон движения для линейного гармонического осциллятора массы m с частотой

!.

Ответ:

S = Et + 2p2mE (m!x)2

+

 

! arcsin

r

 

2E

!x

:

 

x

 

E

 

 

m

 

r

2E

x(t) = m!2 sin !(t t0):

10. Гидродинамика

10.1. Идеальная жидкость

Задача 10.1

Цилиндрический сосуд вместе с находящейся в нем несжимаемой жидкостью вращается в однородном поле тяжести ( g) вокруг своей оси

с постоянной угловой скоростью !. Плотность жидкости , внешнее дав-

ление на жидкость равно нулю. Проверить выполнение уравнения непрерывности.

Решение.

Считаем, что вектор угловой скорости ! направлен вдоль оси Oz.

> load(vect);

> r:[x,y,z]; Omega:[0,0,omega];

Поле скоростей внутри сосуда найдем по формуле: v = [! r] :

> v:express(Omega~r);

Итак, вектор скорости зависит от координат следующим образом:

[ ! y; ! x; 0]:

(10.1)

Среда Maxima позволяет наглядно отобразить двумерное поле скоростей с помощью пакета plotdf. Систему дифференциальных уравнений

dt = ! y;

dt = ! x

;

 

dx

dy

 

32

которой подчиняется движение жидкости в данной задаче, применим, например, при = 1:

> plotdf([v[1],v[2]],[x,y],[parameters,"omega=1"]);

Искомое поле скоростей отображено на рисунке. Уравнение непрерывности

@

+ div j = 0; j = v

@t

 

при постоянной плотности жидкости соответствует div j = 0, что проверяется введением следующих строк:

> div(v);

> ev(express(%),diff);

Задача 10.2

В предыдущей задаче определить поле давления и форму свободной поверхности жидкости.

Решение.

Векторная конструкция в левой части уравнения Эйлера

@@tv + (vr) v = 1 grad p + g

33

означает

@v

@v

@v

 

 

 

 

 

 

(vr) v = vx

 

+ vy

 

+ vz

 

;

(10.2)

 

@x

@y

@z

запрограммируем ее отдельно (в сумме i = 1; 2; 3):

> vnabla(t):=sum(v[i]*diff(t,r[i]),i,1,3);

Далее предполагается, что в переменную v уже введен вектор скорости (10.1). Подставляем уравнение Эйлера в переменную eq, считая, что

ускорение свободного падения направлено против оси Oz:

> G:[0,0,-g];

> eq:diff(v,t)+vnabla(v)=-express(grad(p))/rho+G;

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

(обозначив dp1, dp2, dp3), это удобно сделать в цикле:

> for n from 1 thru 3 do

dp[n]:solve(part(eq,1)[n]=part(eq,2)[n],'diff(p,r[n]))[1];

Итоговое решение собирается из интегралов и общей постоянной P0:

> P:integrate(part(dp[1],2),x)

+integrate(part(dp[2],2),y)+integrate(part(dp[3],2),z)+p0;

Итак, поле давления равно

 

!2x2

!2y2

p = p0 gz

 

 

 

:

2

2

Уравнение свободной поверхности жидкости найдем из условия p = 0, например, при

! = 1; p0 = 10; = 1; g = 10 :

> Z:subst([omega=1,P0=10,rho=1,g=10],solve(P=0,z)[1]);

Это уравнение параболоида, который можно построить с помощью

команд plot3d èëè wxplot3d :

> plot3d(part(Z,2), [x,-5,5], [y,-5,5])$

Для наглядного отображения границ цилиндра удобно выполнить построение в цилиндрической системе координат:

> load(draw);

> draw3d(cylindrical(sqrt(20*z-20),z,0,2.5,az,0,2*%pi));

Задача 10.3

Сосуд заполнен водой до высоты H. В дне сосуда открыли отверстие малой площади . Найти, через какое время вся вода вытечет из сосуда, если известна его форма:

34

а) цилиндр радиуса R;

б) конус с углом 2 при вершине; в) перевернутый конус с углом 2 при вершине;

г) сфера радиуса R, причем H = 2R.

Решение для пункта б).

Согласно формуле Торричелли, скорость вытекания воды из сосуда p

равна 2gh:

> v:sqrt(2*g*h);

Изменение объема воды в сосуде dV за бесконечно-малый промежуток времени dt можно записать двумя способами:

dV = S dh; dV = v dt;

ãäå S площадь свободной поверхности воды. Выразим производную времени по изменяющейся высоте:

dhdt = vS ;

здесь знак минус означает уменьшение высоты воды в сосуде со временем. Площадь поверхности воды в цилиндре равна

S = r2; r = (H h) tg :

> r:(H-h)*tan(alpha);

> S:%pi*r^2;

Подставим площадь в дифференциальное уравнение для t:

> eq:'diff(t,h)=-S/sigma/v;

и решим его с учетом начальных условий h = H ïðè t = 0:

> ic1(ode2(eq, t, h),h=H,t=0);

Упростив радикалы, найдем, при каком времени t высота воды станет равно нулю:

> radcan(%);

> subst(h=0,%);

Îòâåò:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p2H R2

2 (2H)5=2 tg2

 

p

 

H5=2 tg2

 

(2H)5=2

 

2

 

a)

 

 

 

; á)

 

 

 

; â)

 

 

 

 

 

 

; ã)

 

 

 

:

p

 

 

15p

 

 

 

 

5p

 

 

30p

 

 

g

g

g

g

10.2. Вязкая жидкость

Задача 10.4

Стационарный поток несжимаемой вязкой жидкости движется между неподвижными параллельными плоскостями, находящимися на рас-

стоянии l друг от друга. Вдоль направления течения поддерживается

35

постоянный перепад давления, равный p= L ( L длина отрезка, на котором давление изменяется на p). Пренебрегая силой тяжести, найти

поле скоростей. Является ли такое течение потенциальным? Решение.

Обозначив p0 давление на плоскости x = 0, запишем зависимость давления от координаты x:

p

p = p0 L x:

> p:p0-dp/dL*x;

Введем также вектора координат и скорости, учитывая, что жидкость течет параллельно плоскостям, и ее скорость в каждой точке зависит

только от координаты y:

> load(vect);

> r:[x,y,z]; v:[vx,0,0];

> depends(vx,y);

В уравнении Навье-Стокса для несжимаемой жидкости

@@tv + (vr) v = grad p + g + v

конструкцию с оператором grad снова вычисляем по формуле (10.2). В

отсутствие поля тяготения имеем

> rho*(diff(v,t)+sum(v[i]*diff(v,r[i]),i,1,3))=

-grad(p)+eta*laplacian(v);

В последнем равенстве выполним действие дифференциальных операторов и приравняем между собой x-компоненты левой и правой частей:

> ev(express(%),diff);

> eq:part(%,1)[1]=part(%,2)[1];

Решим полученное уравнение (eq) относительно vx(y):

> sol:ode2(eq,vx,y);

Из условия неподвижности стенок подставляем граничные условия:

> bc2(sol,y=0,vx=0,y=l,vx=0);

factor(%);

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

> v[1]:part(%,2);

и возьмем rot v:

> ev(express(curl(v)),diff);

36

factor(%);

Для наглядного отображения поля скоростей, например, при = 0:1

èl = 10, снова применим пакет plotdf:

> load(plotdf);

plotdf([v[1],v[2]],[x,y],

[parameters,dp=1,eta=0.1,l=10,dL=1"],[y,0,10]);"

1 p

Ответ: v = 2 Ly(l y) ex.

Поле скоростей непотенциально, так как rot v = (2y l) p ez 6= 0.

2 L

Задача 10.5

Решить предыдущую задачу при условии, что p= L = 0, а нижняя плоскость движется со скоростью u.

Ответ: v =

uy

ex.

 

 

 

l

 

Поле скоростей непотенциально, так как rot v =

u

ez 6= 0.

l

11.Функции стандартных библиотек Maxima

Âпервой части настоящего пособия были рассмотрены особенности интерфейса системы Maxima, а также обсуждались основные задачи, для решения которых можно использовать Maxima. Напомним, что к наиболее популярным задачам элементарной математики, решаемых с помощью Maxima, можно отнести вычисление и преобразование арифмети- ческих выражений, построение графиков функций, решение уравнений и систем алгебраических уравнений. Кроме того, Maxima позволяет решать ряд задач высшей математики (как аналитически, так и численно), таких как дифференцирование, интегрирование, разложение в ряды, основные задачи линейной алгебры, векторного и тензорного анализа, решение дифференциальных уравнений и краевых задач. В данной главе подробно рассмотрим функции аналитических преобразований алгебра- ических выражений, решения уравнений, обработки векторов и матриц, разложения в ряд Тейлора и решение дифференциальных уравнений на материале задач курса теоретической механики. Отметим также, что в среде имеется возможность получить справочную информацию по языку Maxima. Например,

> example(integrate);

выдаст несколько типовых примеров применения команды integrate, а после ввода строки

37

> describe(integrate);

на экране появится несколько страниц подробного объяснения синтаксиса и действия соответствующей команды.

11.1.Аналитические преобразования алгебраических выражений

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

èexpand

> expand((y+4)^5);

y5 + 20 y4 + 160 y3 + 640 y2 + 1280 y + 1024

> factor(x^4-256);

(x 4) (x + 4) x2 + 16

> factor(2016);

25 32 7

Как видно из последнего примера, функция factor, примененная к натуральному числу, возвращает его разложение на простые множители.

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

> z1:1/(x+1)^2-2/(x+1)+2/(x+2);

> z2:ratsimp(z1);

> z3:partfrac(z2,x);

2

 

2

 

 

1

 

 

 

 

 

 

 

+

 

 

x + 2

x + 1

(1 + x)2

 

 

 

 

x

 

 

 

 

 

x3 + 4 x2 + 5 x + 2

2

 

2

 

 

1

 

 

 

 

 

 

+

 

x + 2

x + 1

(1 + x)2

38

Для упрощения тригонометрических выражений используются следующие функции: trigsimp тригонометрическое упрощение, trigrat (синтаксис вызова trigrat(expr)) приводит заданное тригонометрическое выражение expr к канонической упрощ¼нной квазилинейной форме. Это выражение рассматривается как рациональное, содержащее sin, cos, tan, аргументы которых есть линейные формы некоторых переменных. Всегда, когда возможно, заданное выражение линеаризуется.

Для раскрытия скобок в тригонометрическом выражении используется функция trigexpand, которая использует формулы преобразования сумм двух углов для представления введенного выражения в как можно более простом виде, где в качестве аргумента только одна переменная. Также отметим функцию тригонометрического приведения trigreduce. Она преобразует тригонометрическое выражение к сумме элементов, каждый из которых содержит только sin или cos.

> ev(sin(3*x)/sin(x)+x,trigexpand,expand);

> trigreduce(%);

> trigsimp(%);

> trigexpand(sin(y+10*x));

2

sin (x)2 + 3 cos (x)2 + x

 

+ 3

2 +

2

 

+ x

2

cos (2

x)

1

cos (2

x)

 

1

2 cos (2 x) + x + 1

cos (10 x) sin (y) + sin (10 x) cos (y)

Функция radcan упрощает выражения, содержащие экспоненты, логарифмы и радикалы, пут¼м преобразования к форме, которая является канонической для широкого класса выражений. Переменные в выражении упорядочиваются. Эквивалентные выражения в этом классе не обязательно одинаковы, но их разность упрощается применением radcan до нуля.

> k1:(log(x+x^2)-log(x))^a/log(1+x)^(a/2);

> radcan(k1);

log x2 + x log (x) a

a

log (x + 1)2

a

log (x + 1)2

> k2:log(1+2*a^x+a^(2*x))/log(1+a^x);

39

> radcan(k2);

log a2 x + 2 ax + 1

log (ax + 1)

2

> k3:(%e^x-1)/(%e^(x/2)+1);

> radcan(k3);

ex 1

x

e2 + 1

x

e2 1

Для дробных выражений возможно отделение числителя num и знаменателя denom с помощью соответствующих функций:

> fif:(sin(x)+x**2)/(x+5)/(x-5);

x2 + sin (x) (x 5) (x + 5)

> num(fif);

sin (x) + x2

> denom(fif);

(x 5) (x + 5)

Функция combine приводит сумму дробей к общему знаменателю

> z:1*f/2*b+2*c/3*a+3*f/4*b+c/5*b*a;

5 b f

+

a b c

+

2 a c

4

5

 

3

> combine(z);

4 (3 a b c + 10 a c) + 75 b f

60

Для преобразования выражений, содержащих вложенные квадратные (или более высоких степеней) корни используется функция rootscontract

> rootsconmode:true;

> rootscontract(x^(1/2)*y^(1/4));

> rootscontract(x^(1/2)*y^(1/3));

true

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]