есть система:
Причем
А функция
определяется как:
Начальные условия:
Для начала:
Нужно посмотреть как разные мат средства справляются с такой системой.
Проверяю 3: MatLab, Maple12, Mathematica6.
Разобрался с MatLab. Код следующий:
Первый фаил с именем fQsys.m:
Код:
function dz = fQsys(t,z)
global myeps mymu myM
dz = zeros(3,1); %a column vector
phi = 0;
if abs(z(1,1)+z(3,1)) < myeps
phi = mymu*(z(1,1)+z(3,1));
end
if (z(1,1)+z(3,1)) > myeps
phi = myM*myeps^3;
end
if (z(1,1)+z(3,1)) < -myeps
phi = -myM*myeps^3;
end
dz(1,1) = -z(2,1)-phi;
dz(2,1) = z(1,1)-phi;
dz(3,1) = -z(3,1)-phi;
Второй фаил:
Код:
close all
clear all
global myeps mymu myM
myeps = 0.1; mymu = 2; myM = 1;
Dmyeps = 0.1;
T_end = 400*pi;
acc = 1e-3;
RelTol = acc; AbsTol = acc; InitialStep = acc/10;
options = odeset('RelTol',RelTol,'AbsTol',AbsTol,'InitialStep',InitialStep,'NormControl','on');
[T,z] = ode45(@fQsys,[0 T_end], [0, -(2/3)^(1/2),0], options);
subplot(1,2,1);
plot(z(1:length(z),1),z(1:length(z),2));axis square; grid on;
subplot(1,2,2);
plot(T, z(1:length(z),1) + z(1:length(z),3));axis square; grid on;
Все строит все хорошо!
С Maple менее удачно. Вот код:Код:
restart:
Digits:=4:
myeps:=0.1:
mymu:=2:
myM:=1:
with(DEtools):
F2 := proc(N,t,X,XP) # First order system
global myeps,mymu,myM;
local phi:=0;
if (abs(X[1]+X[3]) < myeps) then phi := mymu*(X[1]+X[3]);
else if (X[1]+X[3] > myeps) then phi := myM*myeps^3;
else if (X[1]+X[3] < -myeps) then phi := -myM*myeps^3;
end if;
end if;
end if;
XP[1] := -X[2]-phi;
XP[2] := X[1]-phi;
XP[3] := -X[3]-phi;
end proc:
DEplot(F2,[x(t),y(t)],t=0..1256.6371,number=3,[[x(0)=0,y(0)=-0.8165,z(0)=0]],stepsize=0.1,numpoints=10500,obsrange=true,linecolor=black,thickness=1,method=rkf45,abserr=0.01,relerr=0.0001);
График конечно строит, но только зависивость x и y как матлаб не может, и с точностью плохо и зависимость от t не понятно как!!!!.
Попробовал поиграть с точностью и ничего, может еще какиенибудь параметры есть????? Помогите разобраться, в хелпе не нашел(((
С mathematica вообще беда не смог пока построить, может кто знает как???? Хотябы что то примерное???
Везде используется метод Рунге-Кутта!!! Как в mathematica не знаю.