вопрос по mathematica 6

leshij76

Вот код:
Clear[x]
//задаю константы
nu = 398600.44*10^9
ae = 6378136
j02 = 1082625.7*10^(-9)
w = 7.292115*10^(-5)
//численно интегрирую диффур
s = NDSolve[
{x''[t] == -nu/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^3*x[t] +
3/2*j02*nu*ae^2/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^5*
x[t]*(1 - 5*(z[t]^2)/x[t])^2 + (y[t])^2 + (z[t])^2 +
w^2*x[t] + 2*w*D[y[t], t],
y''[t] == -nu/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^3*y[t] +
3/2*j02*nu*ae^2/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^5*
y[t]*(1 - 5*(z[t]^2)/x[t])^2 + (y[t])^2 + (z[t])^2 +
w^2*y[t] - 2*w*D[x[t], t],
z''[t] == -nu/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^3*z[t] +
3/2*j02*nu*ae^2/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^5*
z[t]*(1 - 5*(z[t]^2)/x[t])^2 + (y[t])^2 + (z[t])^2
x[0] == -8611589.84375, y[0] == -8667948.73047,
z[0] == 22263966.7969, x'[0] == 3013.68331909,
y'[0] == -659.996986389, z'[0] == 900.99811554},
{x[t], y[t], z[t]}, {t, 0, 1800}]
//далее, прошу нарисовать график
Plot[Evaluate[x[t] /. s], {t, 0, 1800}]
//рисует правильно, однако, как только я прошу ему выдать нужные мне значения по образу и подобию мануальных примеров:
{x[1800], y[1800], z[1800], x'[1800], y'[1800], z'[1800]} /. s
//он выдает
{{x[1800], y[1800], z[1800], x'[1800], y'[1800], z'[1800]}}
как мне узнать значения x,y,z,x',y',z' при t=1800? укажите, пожалуйста, что я делаю не так?
спасибо :)

stepanenko_72

{x[t], y[t], z[t]}
напиши {x,y,z}

leshij76

выдает {x,y,z}

L2JVIDOCQ

{x[1800], y[1800], z[1800], x'[1800], y'[1800], z'[1800]}
попробуй убрать фигурные скобки и убери /.s. Я вообще не понимаю, зачем тебе нужно это /.s. Что оно делает?
Вообще, я бы сделал так:
x[1800], y[1800], z[1800], x'[t]/.t->1800, y'[t]/.t->1800, z'[t]/.t->1800

leshij76

В мануале, если искать по NDSolve, написано:
s = NDSolve[{y'[x] == y[x] Cos[x + y[x]], y[0] == 1}, y, {x, 0, 30}]
Find specific values:
{y[10.5], y'[12.5]} /. s
соответственно, я делал по аналогии.
то, что предлагаешь ты, не работает... :(

stepanenko_72

прошу прощения что непонятно написал
надо
s = NDSolve[
{x''[t] == -nu/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^3*x[t] +
3/2*j02*nu*ae^2/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^5*
x[t]*(1 - 5*(z[t]^2)/x[t])^2 + (y[t])^2 + (z[t])^2 +
w^2*x[t] + 2*w*D[y[t], t],
y''[t] == -nu/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^3*y[t] +
3/2*j02*nu*ae^2/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^5*
y[t]*(1 - 5*(z[t]^2)/x[t])^2 + (y[t])^2 + (z[t])^2 +
w^2*y[t] - 2*w*D[x[t], t],
z''[t] == -nu/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^3*z[t] +
3/2*j02*nu*ae^2/(Sqrt[(x[t])^2 + (y[t])^2 + (z[t])^2])^5*
z[t]*(1 - 5*(z[t]^2)/x[t])^2 + (y[t])^2 + (z[t])^2
x[0] == -8611589.84375, y[0] == -8667948.73047,
z[0] == 22263966.7969, x'[0] == 3013.68331909,
y'[0] == -659.996986389, z'[0] == 900.99811554},
{x, y, z} , {t, 0, 1800}]
в мануальном примере в s записывается y-> ......,
у тебя - x[t]-> ..... и т.д.
сооветственно кода ты пытаешься сделать замену x[1800]/.s ничо не получается, т.к. в s - не x->... a x[t]->...

Sensor4ik

значок /. эквивалентен оператору Replace
Я бы сделал так:
k=D[s,t];
t=1800;
s
k
t=.
k=.

Ну, или так, как предлагает

leshij76

спасибо :)
а как повысить точность запрашиваемых данных? чтобы 7-8 знаков после запятой выдавал?

Sensor4ik

k=D[s,t];
t=1800;
SetPrecision[s,20]
SetPrecision[k,20]
t=.
k=.

P.S. Или SetAccuracy[s,20] использовать, но для 7-8 знаков после запятой результат получается идентичный.
Оставить комментарий
Имя или ник:
Комментарий: