Процедуры и модули
В языке Maple есть два вида модулей: procedure и module.
procedure – это многократно используемый блок операторов (команд). Процедуру можно использовать для определения функции (если функция слишком сложна, чтобы быть записанной с помощью оператора-стрелки), для создания матрицы, графика логического значения и т. п.
proc(args) local v1; global v2; options ops; stats; end proc; |
proc(args) local v1; global v2; options ops; stats; end; |
Здесь args – это последовательность аргументов, v1 и v2 – имена локальных или глобальных переменных, ops – опции (см. ?options) и stats – операторы, реализуемые внутри процедуры.
В лагранжевой механике голономная система с N степенями свободы описывается уравнениями Лагранжа:
где L = T – U – функция Лагранжа системы, T – кинетическая, U – потенциальная энергия, qi – обобщенные координаты, Qi – обобщенные силы и
Пусть обобщенные силы, кинетическая и потенциальная энергии известны. Напишите процедуру для вычисления уравнения Лагранжа.
Для примера рассмотрим движение двойного маятника массой m и длиной L в вертикальной плоскости под действием сил гравитации. Для маятника (N = 2) обобщенные координаты есть углы A и B, а обобщенные непотенциальные силы равны нулю.
- Eq_Lagrange:=proc(q,L,Q)
- local i,j,N,dq,d2q,Lq,Ldq,dLdq,Eq;
- N:=nops(q);
- for i from 1 to N do dq[i]:=cat(q[i], `'`); end do;
- for i from 1 to N do d2q[i]:=cat(q[i], `''`); end do;
- for i from 1 to N do
- Lq:=diff(L,q[i]); Ldq:=diff(L,dq[i]);
- dLdq:=add(diff(Ldq,q[j])*dq[j]+diff(Ldq,dq[j])*d2q[j],j=1..N);
- Eq[i]:=dLdq-Lq-Q[i]; end do;
- RETURN(normal(convert(Eq,list))); end proc;
- T:=m*x?2*`A'`?2+ m*x?2*`A'`?2*`B'`*cos(A-B)+1/2*m*x?2*`B'`2;
- U:=-m*g*x*cos(A)-m*g*x*(cos(A)+cos(B)) ;
- q:=[A,B];
- g:=omega"2*x; Q:=[0,0];
- Eq_L:=Eq_Lagrange(q,T-U,Q);
- Eq_L1:=factor(Eq_L);