2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как получить функцию от NDSolve в Mathematica?
Сообщение04.04.2014, 11:56 
Заслуженный участник


02/08/11
7128
Есть функция, полученная в результате численного решения дифуравнения. Но я не могу получить даже значение этой функции в точке, не говоря уже о том, чтобы посчитать от неё функционал (что мне в конечном итоге нужно). Пробовал разные варианты - ни один не работает.
Вот код, который решает дифуравнение:
Код:
T = 10
q = -1
Fx[x_, y_] = q * x / (x^2 + y ^ 2)^(3 / 2)
Fy[x_, y_] = q * y / (x^2 + y ^ 2)^(3 / 2)
s = NDSolve[{
   x''[t] == Fx[x[t], y[t]],
   y''[t] == Fy[x[t], y[t]],
   x[0] == -5,
   y[0] == 1,
   x'[0] == 1,
   y'[0] == -0.6
   },
  {x, y},
  {t, 0, T}
  ]
ParametricPlot[Evaluate[ {x[t], y[t]} /. s], {t, 0, T}, Frame -> True, ImageSize -> Large]

Вот я пытаюсь получить значение x[t] в трёх точках:
Код:
xt = x[t] /. s
xt[0]
xt[1]
xt[2]

Получаю ответ:
Код:
{InterpolatingFunction[{{0.,10.}},<>][t]}
{InterpolatingFunction[{{0.,10.}},<>][t]}[0]
{InterpolatingFunction[{{0.,10.}},<>][t]}[1]
{InterpolatingFunction[{{0.,10.}},<>][t]}[2]

Как получить числа - непонятно.

 Профиль  
                  
 
 Re: Как получить функцию от NDSolve в Mathematica?
Сообщение04.04.2014, 14:04 
Заслуженный участник


25/02/11
1804
Новая функция зависит от аргумента, так что ее надо определять, как обычно:
Код:
xt[t_] = x[t] /. s

 Профиль  
                  
 
 Re: Как получить функцию от NDSolve в Mathematica?
Сообщение04.04.2014, 14:11 
Заслуженный участник


02/08/11
7128
Vince Diesel в сообщении #845320 писал(а):
Новая функция зависит от аргумента, так что ее надо определять, как обычно
Получаю ошибку

Set::write: Tag InterpolatingFunction in InterpolatingFunction[{{0.,10.}},{4,7,2,{121},{4},0,0,0,0,Automatic},{<<1>>},{Developer`PackedArrayForm,{0,3,6,9,12,<<41>>,138,141,144,147,<<72>>},{-5.,1.,0.0377146,-4.99948,1.00002,<<41>>,1.05074,0.0635476,-3.80063,1.05948,<<313>>}},{Automatic}][t][t_] is Protected. >>

 Профиль  
                  
 
 Re: Как получить функцию от NDSolve в Mathematica?
Сообщение04.04.2014, 14:25 
Заслуженный участник


25/02/11
1804
У меня версия 9.0, все работает. И значения, и график сторит.

 Профиль  
                  
 
 Re: Как получить функцию от NDSolve в Mathematica?
Сообщение04.04.2014, 14:31 
Заслуженный участник


02/08/11
7128
У меня тоже 9.0, свежескачанный trial. График строится, а вот xt[t_] = x[t] /. s выдаёт ошибку.

-- 04.04.2014, 15:35 --

О, заработало вот так:
Код:
xt[t_] = First[x[t] /. s]


-- 04.04.2014, 15:37 --

И функционал тоже подсчитался!
Vince Diesel, большое спасибо.

 Профиль  
                  
 
 Re: Как получить функцию от NDSolve в Mathematica?
Сообщение04.04.2014, 15:10 
Заслуженный участник


25/02/11
1804
А, тут дело в том, что функция уже раз была присвоена символу xt. Поэтому и не считала. Можно скинуть присвоения командой Clear[xt]. Либо выгрузить ядро, это очистит все переменные. И посчитать по новой.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: magnetic_balls


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group