Правила формального синтаксиса команд Maple

Команды Maple для работы с процедурами, функциями и более сложными структурами

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

Процедуры и модули

В языке 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 – операторы, реализуемые внутри процедуры.

Задача 10.1. Вычисление уравнения Лагранжа

В лагранжевой механике голономная система с 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);