Компьютерные лабораторные занятия по теоретической механике. Ч. 2 (110
.pdfqx py
p1
x y3
Для преобразования выражений с целью исключения переменной, используется функция eliminate. Ее аргументами являются два списка, первый список задает систему уравнений, из которой нужно исключить переменные, перечисленные во втором списке. Результатом является в общем случае список, содержащий новую систему уравнений с исклю- ченными переменными. Количество уравнений в новой системе обычно уменьшается на количество исключаемых переменных.
> eliminate([x=v*t,y=6*t],[t]);
[6 x v y]
Подстановки осуществляются функцией subst. Вызов этой функции: subst(a, b, c) (подставляем a вместо b в выражении c).
> subst(4,r,r+q);
q + 4
> subst(r=4,r+q);
q + 4
> subst([r=4,q=10],r+q);
14
В некотором смысле подстановки и упрощение объединяет функция scsimp упрощение при выполнении условия
> exq:(k1*k4-k1*k2-k2*k3)/k3^2;
> eq3:k1*k4-k2*k3=0;
> eq4:k3*k4+k1*k2=0;
> scsimp(exq,eq3,eq4);
> scsimp(exq,eq4);
> scsimp(exq,eq3);
k1 k2 k2 k3 + k1 k4
k3 2
k1 k4 k2 k3 = 0
k3 k4 + k1 k2 = 0
k4
k3
41
k1 k2 k2 k3 + k1 k4
k3 2
k1 k2 k3 2
Основной функцией для решения алгебраических уравнений и их систем является функция solve , в качестве параметров которой в общем случае передаются два списка - список уравнений и список переменных. Уравнение может задаваться выражением с левой и правой частями, разделенными знаком равенства. Если в записи уравнения нет знака равенства, то такое выражение в целом считается левой частью уравнения с нулевой правой частью. Для решения одиночного уравнения допускается вызов без списка: solve(expr, x) решение одного уравнения относительно переменной x, solve(expr) решение уравнения с одной неизвестной и числовыми коэффициентами. Если запись уравнения содержит символ равенства, то в этом случае для выделения левой и правой частей уравнения используется функция part . Примеры использования функции solve для решения алгебраических уравнений и их систем были рассмотрены в первой части настоящего пособия.
Если нужно составить матрицу по коэффициентам системы уравнений перед заданным набором переменных, то подойдет функция coefmatrix:
> coefmatrix([2*x-(a-1)*y+5*b = 0, b*y+a*x = 3], [x,y]);
2 1 a
ab
11.2.Операции с векторами и матрицами
Для операций с векторными величинами необходимо подключить библиотеку vect: load(vect), Например, с ее помощью можно вычислять
скалярные r.p и векторные r~p произведения, градиент grad и производить другие векторные операции.
> load(vect);
> s:[3,2,1];
[3; 2; 1]
> t:[2,5,4];
[2; 5; 4]
> express(s~t);
[3; 10; 11]
42
> s.t;
20
Функция express позволяет представить результат выполнения векторных операций в виде разложения по проекциям системы координат. Помимо рассмотренного выше векторного произведения можно вычислять дифференциальные операции градиент, дивергенцию, ротор и лапласиан.
> [a, b, c] ~ [x, y, z];
> express(%);
[a; b; c] [x; y; z]
[b z c y; c x a z; a y b x]
> grad (x^2 + y^2 + z^2);
> express (%);
> ev (%, diff);
grad z2 + y2 + x2
[ddx x2 + y2 + z2 ; ddy x2 + y2 + z2 ; ddz x2 + y2 + z2 ] [2 x; 2 y; 2 z]
> div ([x^2, y^2, z^2]);
> express (%);
> ev (%, diff);
div [x2; y2; z2]
ddz z2 + ddy y2 + ddx x2
2 z + 2 y + 2 x
> curl ([x^2, y^2, z^2]);
> express (%);
> ev (%, diff);
curl [x2; y2; z2]
[ddy z2 ddz y2; ddz x2 ddx z2; ddx y2 ddy x2] [0; 0; 0]
43
> laplasian (x^2 * y^2 * z^2);
> express (%);
> ev (%, diff);
|
|
|
|
|
|
laplacian |
x2 |
|
y2 |
|
z2 |
|
|
|
|
|
|
|
|
|
|
|||||
d2 |
|
|
|
|
|
|
d2 |
|
|
|
|
|
|
|
|
|
|
d2 |
|
|
|
|
|
|
||
|
x2 |
|
y2 |
|
z2 |
+ |
|
x2 |
y2 |
z2 |
+ |
|
|
|
x2 |
|
y2 |
|
z2 |
|
||||||
|
|
|
|
2 2 |
|
|
|
|||||||||||||||||||
d z2 |
|
|
|
2 2 |
|
2 |
|
|
2 |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
d y2 |
|
|
|
|
|
|
|
|
|
|
|
d x2 |
|
|
|
|
|
|
2 y z + 2 x z + 2 x y
При этом для задания компонент вектора градиента можно использовать функцию gradef:
> depends(y,x);
> gradef(f(x,y),x,g(x,y));
> diff(f(x,y),x);
[y (x)]
f (x; y)
|
d |
|
|
g (x; y) |
d x |
y + x |
Для вычисления определителя матрицы используется функция determinant
> a22:matrix([2,3],[3,2]);
> determinant(a22);
2 3
3 2
5
11.3.Дифференцирование и интегрирование. Разложение в ряд Тейлора
Maxima также позволяет решать и задачи высшей математики. Вы- числение производной функции задается с помощью di . Интегрирование производится с помощью integrate. Примеры использования данных функций были подробно рассмотрены в первой части пособия.
Для разложения функции в ряд Тейлора используется функция taylor, а для обрезания полученного ряда функция ratdisrep.
44
> taylor(log(x+1),x,0,5);
x x2 + x3 x4 + x5 + ...
2 3 4 5
> ratdisrep(%);
x5 x4 + x3 x2 + x
5 4 3 2
Коэффициенты перед нужной степенью переменной находятся функцией coe
> w:expand((x+4)^4);
> coeff(w,x,3);
> coeff(w,x);
x4 + 16 x3 + 96 x2 + 256 x + 256
16
256
11.4. Решение дифференциальных уравнений
Функции desolve и ode2 используются для решения дифференциальных уравнений. Дифференциальное уравнение представляется в форме с замороженной производной (то есть с производной, вычисление которой запрещено с помощью одиночной кавычки: 'di (y, x)) .
Другой вариант задания дифференциального уравнения явно указать зависимость y = y(x) путем использования функции depends.
> depends(y,x);
[y(x)]
> p:'diff(y(x),x,2)+w^2*y(x)=0;
d2 y (x) + w2 y (x) = 0 d x2
> desolve(p,y(x));
В некоторых случаях система спросит пользователя о некоторых дополнительных условиях, если они принципиально влияют на ответ, например уточнить знак какой-либо переменной. В нашем случае система
поинтересуется, не равна ли нулю переменная w. То есть на экране мы увидим вопрос:
45
Is "w" zero or nonzero?
Понятно, что требуется ответить либо nonzero, ëèáî zero. В первом случае ответ будет выглядеть так:
y (x) = |
|
x) |
|
w |
|
x=0 |
+ y (0) cos (w x) |
|||
sin (w |
|
|
|
d |
|
y (x) |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d x |
|
|
|
А в случае ответа zero ответ будет таким:
|
ddx |
|
|
y (x) = x |
y (x) x=0 |
+ y (0) |
|
|
|
|
|
|
|
|
|
Другой популярный пример подобного диалога о знаке переменной
> Is k positive, negative or zero?
Здесь возможные ответы positive, negative или zero. Чтобы не отве- чать системе при каждом запросе, ограничения подобного рода можно вводить в команде assume. Команда forget обеспечивает снятие ограни- чений, заданных командой assume.
Для отыскания частных решений задач Коши с начальными условиями используются функции ic1 (для уравнений первого порядка) и ic2 (для уравнений второго порядка). Частные решения граничных задач для уравнений второго порядка используют функцию bc2.
> soln1:ode2(3*x*y+x^2*'diff(y,x)=sin(x)/x,y,x);
y =
%c cos (x)
x3
> ic1(soln1,x=%pi,y=0);
y = 1 + cos (x) x3
> soln2:ode2(y*('diff(y,x))^3+'diff(y,x,2)=0,y,x);
6 %k1 y + y3
6
= x + %k2
> ratsimp(ic2(soln2,x=0,y=0,'diff(y,x)=2));
3 y + y3
6
= x
> bc2(soln2,x=0,y=1,x=1,y=3);
y3 10 y = x 3 6 2
46
11.5. Построение графиков функций
В Maxima имеется разнообразный набор возможностей для отображения графиков функций, наборов точек, трехмерных тел, градиентов и так далее. Исходные функции могут задаваться явно (explicit), неявно (implicit_plot из библиотеки implicit_plot) или параметрически (parametric). Для двумерных графиков (plot2d, draw2d) используются декартовы или полярные координаты, а для трехмерных (plot3d, draw3d)декартовы, сферические или цилиндрические. Как правило, результат отображается в новом всплывающем окне. Вот несколько примеров кода для построения различных двумерных и трехмерных графиков. Предлагаем читателям построить эти графики самостоятельно.
> plot2d([x*sin(x)],[x,-15,15]);
> plot3d((x^2-y^2), [x, -2, 2], [y, -2, 2], [z, -8, 4]);> wxplot3d(x^4+y^3, [x,-5,5], [y,-5,5]);
Следующая функция может использоваться для визуализации векторного поля и построения траектории движения точки
> plotdf(sin(x)+y,[trajectory_at,2,-0.1]);
По умолчанию используется библиотека Plot, а для решения некоторых задач рекомендуется ознакомиться с возможностями библиотеки Draw, для чего необходимо ее загрузить командой load(draw):
> load(draw);
> draw2d(explicit(exp(x),x,-1,3), color=red,
parametric(rrr*cos(rrr),rrr*sin(rrr),rrr,0,2*%pi));
> draw3d(cylindrical(1,z,-2,2,az,0,2*%pi));
> draw3d(spherical(1,a,0,2*%pi,z,0,%pi));
> draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
color=red, parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2),
parametric(t^2,cos(2*t),2+t,t,0,2));
В предшествующих главах приведены примеры использования описанных функций в конкретных задачах теоретической механики. Кроме того, в первой части пособия приведены ссылки на источники с более подробным изложением системы Maxima.
47
Предметный указатель
assume, 18, 19, 46
cabs, 19 coe , 12, 45
coefmatrix, 15, 42 combine, 21, 40 cos, 6, 18
curl, 36, 43 cylindrical, 34, 47
del, 27
denom, 19, 20, 40 depends, 6, 36, 45 describe, 38 desolve, 21, 45 determinant, 15, 44 di , 6, 35, 45 draw, 17, 34, 47 draw2d, 18, 47 draw3d, 34, 47
eliminate, 6, 41 ev, 5, 30 example, 37 exp, 18 expand, 8, 38 express, 8, 43
factor, 7, 19, 38 forget, 46
grad, 8, 43 gradef, 8, 44
ic1, 7, 46 ic2, 7, 46
num, 19, 40 ode2, 7, 35, 45
parameters, 37 parametric, 18, 47 part, 10, 36, 42 partfrac, 20, 38 pi, 35
plot2d, 47 plot3d, 34, 47 plotdf, 32, 47
radcan, 35, 39 ratdisrep, 7, 44 ratsimp, 10, 38 rootscontract, 21, 40
scsimp, 19, 29, 41 sin, 6, 18
solve, 10, 42 sqrt, 7, 35 subst, 8, 35, 41 sum, 34
tan, 35 taylor, 7, 44
trigexpand, 10, 39 trigrat, 19, 39 trigreduce, 39 trigsimp, 6, 9, 39
vect, 6, 42 wxplot3d, 34, 47
48
Учебное издание
Каменский Александр Анатольевич, Некипелов Александр Аркадьевич, Чернушкин Вячеслав Вячеславович
КОМПЬЮТЕРНЫЕ ЛАБОРАТОРНЫЕ ЗАНЯТИЯ ПО ТЕОРЕТИЧЕСКОЙ МЕХАНИКЕ
Часть 2
Учебное пособие
Издано в авторской редакции
Подписано в печать 25.11.2016. Формат 60 84/16. Уч.-изд. л. 3,0. Усл. п. л. 2,8. Тираж 25 экз. Заказ 932
Издательский дом ВГУ 394000, г. Воронеж, пл. Ленина, 10.
Отпечатано в типографии Издательского дома ВГУ 394000, г. Воронеж, ул. Пушкинская, 3