Исходная задача: Имеется выражение для изменения вектора:
Проследить эволюцию системы на некоторых длинах z для разных состояний
, которые задаются, исходя из некоторых уравнений в цикле, либо могут быть подсчитаны предварительно и загнаны в массив, что несущественно, важно то, что считать нужно много раз. После этого обработать все получившиеся значения и вывести их как точку на сфере Пуанкаре(
)
Я написал программу, которая мне численно считает(по Р-К) получившуюся систему уравнений, но я не уверен, насколько верно, потому что получаются не те данные, которые ожидаются.
И я не знаю, как организовать, чтобы начальные условия в численном расчёте менялись, а результаты куда-то записывались, чтобы их потом обработать и вывести. Разделить interpolating functions у меня не получается.
Вот код:
Код:
In[164]:= Needs["DifferentialEquations`NDSolveProblems`"];
Needs["DifferentialEquations`NDSolveUtilities`"];
ClearAll[s1,s2,s3,p1,p2,p3,S,P,l]
s0=1;
in1[theta_, fi_] = s0*Sin[theta]*Cos[fi];
in2[theta_, fi_] = s0*Sin[theta]*Sin[fi];
in3[theta_, fi_] = s0*Cos[theta];
p1=1;
p2=0;
p3=0;
S= {s1[z],s2[z],s3[z]}
P={p1[z],p2[z],p3[z]}
Jspm={{-js,0,0},{0,0,0},{0,0,0}};
Jxpm= {{0,0,0},{0,4*js,0},{0,0,4*js}};
rightpart=Simplify[(S\[Cross](Jspm.S)+S\[Cross](Jxpm.P))/js]
{4 0[z] (s2[z]-s3[z]),-s1[z] (4 0[z]+s3[z]),s1[z] (4 0[z]+s2[z])}
sol=NDSolve[{s1'[l]==4 p3 s2[l]-4 p2 s3[l], s2'[l]==-s1[l] (4 p3+s3[l]),s3'[l]==s1[l] (4 p2+s2[l]),s1[0]==0.19, s2[0]==0.19 ,s3[0]==0.96},{s1,s2,s3},{l,0,20}]
{{s1->InterpolatingFunction[{{0.,20.}},<>],s2->InterpolatingFunction[{{0.,20.}},<>],s3->InterpolatingFunction[{{0.,20.}},<>]}}
{Red,Green,Blue}]
out1=sol[[1]][[1]][[2]]
InterpolatingFunction[{{0.,20.}},<>]
out2=sol[[1]][[2]][[2]]
InterpolatingFunction[{{0.,20.}},<>]
out3=sol[[1]][[3]][[2]]
InterpolatingFunction[{{0.,20.}},<>]
Plot[Evaluate[out3],{l,0,20}]
Прошу совета опытных пользователей, заранее спасибо.