2014 dxdy logo

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

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




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


02/08/11
7003
Есть функция, полученная в результате численного решения дифуравнения. Но я не могу получить даже значение этой функции в точке, не говоря уже о том, чтобы посчитать от неё функционал (что мне в конечном итоге нужно). Пробовал разные варианты - ни один не работает.
Вот код, который решает дифуравнение:
Код:
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
1797
Новая функция зависит от аргумента, так что ее надо определять, как обычно:
Код:
xt[t_] = x[t] /. s

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


02/08/11
7003
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
1797
У меня версия 9.0, все работает. И значения, и график сторит.

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


02/08/11
7003
У меня тоже 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
1797
А, тут дело в том, что функция уже раз была присвоена символу xt. Поэтому и не считала. Можно скинуть присвоения командой Clear[xt]. Либо выгрузить ядро, это очистит все переменные. И посчитать по новой.

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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