Страница 1 из 1

Матрица переменных, зависящих от времени

Добавлено: Ср ноя 04, 2015 11:21 am
mr07th
День добрый! Имеется программа для расчета системы дифуров с последующим выводом данных в функции (через output=listprocedure и subs). Эти функции потом используются при перемножении матриц. Проблема заключается в том, что я не могу понять, как сделать матрицу, зависимой от времени. Пробовал осуществить данную операцию через операторы unapply и ->, но результатов это не дало, в туториалах тоже что-то не нашел такой случай (может плохо искал). Чувствую, что решение простое, но, к сожалению, я не могу понять, как такое осуществить и прошу помощи.

Код: Выделить всё

restart;
> with(linalg):
##Система дифуров
> ur1:=diff(x(t),t)=-1.72*x(t)-0.085*y(t)-0.01*y(t)*z(t);
> ur2:=diff(y(t),t)=0.94*x(t)-1.05*y(t)-10*x(t)*z(t);
> ur3:=diff(z(t),t)=13.6+9.1*x(t)*y(t);
> ur4:=diff(theta(t),t)=x(t)*sin(phi(t))+y(t)*cos(phi(t));
> ur5:=diff(psi(t),t)=(x(t)*cos(phi(t))-y(t)*sin(phi(t)))/cos(theta(t));
> ur6:=diff(phi(t),t)=z(t)-sin(theta(t))*(x(t)*cos(phi(t))-y(t)*sin(phi(t)))/cos(theta(t));
>
> >resh:=dsolve([ur1,ur2,ur3,ur4,ur5,ur6,x(0)=1.05,y(0)=1.1,z(0)=1.5,theta(0)=0,psi(0)=0,phi(0)=0],[x(t),y(t),z(t),theta(t),psi(t),phi(t)],type=numeric, method =rkf45,output=listprocedure);
##Присвоение функциям результатов вычисления
>Th:=subs(resh,theta(t));
> Ps:=subs(resh,psi(t));
> Ph:=subs(resh,phi(t));
##Запись матриц
> Th_inv:=matrix([[1,0,0],[0,cos(Ps(t)),-sin(Ps)],[0,sin(Ps(t)),cos(Ps(t))]]);
> Ps_inv:=matrix([[cos(Th),0,sin(Th)],[0,1,0],[-sin(Th),0,cos(Th)]]);
> Ph_inv:=matrix([[cos(Ph),-sin(Ph),0],[sin(Ph),cos(Ph),0],[0,0,1]]);
> E:=matrix([[0],[0],[1]]);
##Умножение матриц
> ThPs_inv:=evalm(Th_inv&*Ps_inv);
> ThPsPh_inv:=evalm(ThPs_inv&*Ph_inv);
> E1:=evalm(ThPsPh_inv&*E);