С Новым годом! Форум программистов, компьютерный форум, киберфорум
Wolfram Mathematica
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
1

InterpolatingFunction и NDsolve

28.10.2018, 21:09. Показов 2850. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните пожалуйста что такое InterpolatingFunction и с чем его едят.
Я решил дифур и у меня получился такой ответ.
Что это значит и как получить значение функции
s = NDSolve[{m D[x[t], {t, 2}] == F[t, x[t], D[x[t]]], x[t0] == x0, (D[x[t], t] /. t -> t0) == v0}, x, {t, t0, T}]
как я могу получить значение функции x в какой-либо точке?
Миниатюры
InterpolatingFunction и NDsolve  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2018, 21:09
Ответы с готовыми решениями:

NDSolve, MeshRegion
Имеется уравнение Пуассона на области ,. Взят простейший тест, где решение должно быть константой...

NDSolve Сингулярность Система ДУ
Здравствуйте, я новичок и уже достаточно долго бьюсь над решением математической модели. Начинал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
28.10.2018, 23:53 2
Цитата Сообщение от WhiteBoss Посмотреть сообщение
Объясните пожалуйста что такое InterpolatingFunction и с чем его едят.
Функция, которая была получена путём интерполяции.
Если примените FullForm, увидите внутринности. Там скорее всего будет какой-то набор опорных точек вида {t, x}. Соответственно, значение функции во всех остальных точках считается во время вызова функции (т.е. применения функции к аргументу) по формулам интерполяции. Во всём этом как правило не нужно разбираться при решении прикладных задач.
Цитата Сообщение от WhiteBoss Посмотреть сообщение
Что это значит и как получить значение функции
Как обычно, вызвать функцию, передав аргументом число.
Если откроете документацию NDSolve, сразу же увидите примеры:
Bash
1
2
Plot[Evaluate[x[t] /. s], {t, t0, T}, PlotRange -> All]
{x[10.5], x'[12.5]} /. s
(я заменил буквы на Ваши, а именно, y -> x, x -> t, и пределы поставил соответствующие)
1
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
29.10.2018, 00:03  [ТС] 3
Mysterious Light, А что в моем случае значит полученный ответ (прикрепленное изображение)?
И еще: Тут я строю график зависимости x от t
Plot[{x[t] /. s}, {t, t0, T}, AxesLabel -> {t, x[t]}], означает конструкция {x[t] /. s}, или {x[t] /. s[[1,1]]}, то что я x[t] меняю на свое решение s ДУ ?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
29.10.2018, 09:32 4
Цитата Сообщение от WhiteBoss Посмотреть сообщение
А что в моем случае значит полученный ответ (прикрепленное изображение)?
Не знаю, — лукаво отвечаю я, — у меня в WM8 такого нет.
Цитата Сообщение от WhiteBoss Посмотреть сообщение
{x[t] /. s[[1,1]]}
Смотрим FullForm (я уже упоминал эту функцию
Bash
1
2
In:= FullForm[Hold[{x[t] /. s[[1, 1]]}]]
Out= Hold[List[ReplaceAll[x[t], Part[s, 1, 1]]]]
Что мы видим? Мы извлекаем подвыражение значения s с координатами 1, 1, которое должно быть правилом замены, производим замену в выражении x[t] в соответствии с этим правилом замены и упаковываем полученный результат в одноэлементный список.
Например, если s = {{ x -> (2 # + 3 &)}}, то s[[1, 1]] редуцируется к x -> (2 # + 3 &), а x[t] /. s[[1, 1]] редуцируется к x[t] /. x -> (2 # + 3 &), что в свою очередь становится (2 # + 3 &)[t], что становится 2 t + 3. И наконец, {x[t] /. s[[1,1]]} редуцируется к {2 t + 3}.

Задание Вам: разберите конструкцию {x[t] /. s}
1
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
29.10.2018, 17:18  [ТС] 5
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Задание Вам: разберите конструкцию {x[t] /. s}
Ну скорее всего, если например s={{ x -> (2 # + 3 &)},{ x -> (11 # + 352&)},{ x -> ( 12&)}}, то {x[t] /. s} редуцируется к {2 t + 3}, {11t+352} и {12}, это справедливо при решении системы ДУ, как мне кажется ?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
29.10.2018, 17:53 6
Цитата Сообщение от WhiteBoss Посмотреть сообщение
Ну скорее всего
я думал, Вы получите решение строго из определений.
Цитата Сообщение от WhiteBoss Посмотреть сообщение
например s={{ x -> (2 # + 3 &)},{ x -> (11 # + 352&)},{ x -> ( 12&)}}, то {x[t] /. s} редуцируется к {2 t + 3}, {11t+352} и {12}
Верно, но не совсем. Выражение редуцируется к выражению, а Вы говорите, что одно выражение редуцируется к трём.
Кстати, Вы можете запустить WM и посмотреть, что он выдаст. Это самопроверка.
Цитата Сообщение от WhiteBoss Посмотреть сообщение
это справедливо при решении системы ДУ, как мне кажется ?
Не обязательно: выше Вы же приводите пример кода с этой конструкцией, хотя у Вас одно диффуравнение.
1
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
29.10.2018, 18:11  [ТС] 7
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Выражение редуцируется к выражению
Можете пожалуйста пояснить, не особо понял?
И еще, если у нас одно решение дифура, то разницы между {x[t] /. s} и {x[t] /. s[[1,1]]} не будет?

Добавлено через 13 минут
И грубо говоря
Plot[{x[t] /. s[[1, 1]]}, {t, t0, T}, AxesLabel -> {"t", "x[t]"}]
В этом отрывке мы подставляем вместо x[t] решение нашего дифура которое равно s и с ним уже работаем?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,163
Записей в блоге: 24
29.10.2018, 18:22 8
Допустим, перед Вами стоит задача посчитать значение некоторого выражения, скажем, 2+3*6. Ответ будет выражением и ответ (с точностью до эквивалентных преобразований) единственен. Так же и всюду.
Если имеется выражение {x[t] /. s}, то после вычислений WM вернёт выражение. Откройте WM и проверьте, что под ячейкой In стоит ровно одна ячейка Out.
И снова я призываю открыть WM и ввести туда Вами придуманный пример
PureBasic
1
2
s={{ x -> (2 # + 3 &)},{ x -> (11 # + 352&)}, { x -> ( 12&)}}
{x[t] /. s}
Второе утверждение, которое я хочу, чтоб Вы поняли, состоит в том, что используемые здесь функции чистые (детерминированные без побочных эффектов), семантика которых в документации подробно описана. Это значит, что Вы можете открыть её и посмотреть, как работает функция (в данном случае ReplaceAll), поэкспериментировать на примерах и т.п.
Работа функции не зависит от приложения, её можно выучить безотносительно дифуров.
Как обычно, большую роль играет формат данных. Я точно могу сказать, что разница между {x[t] /. s} и {x[t] /. s[[1,1]]} есть ВСЕГДА, а между {x[t] /. s} и {x[t] /. s[[1]]}, КАК ПРАВИЛО, нет. Впрочем, даже в последнем случае я в своём коде всегда исхожу из предположения, что разница есть, и потому всегда контролирую формат данных, к чему и Вам призываю.
Например, в каком формате NDSolve возвращает результат? Это список списков правил замены, список списков списков правил замены и просто список правил замены?

Добавлено через 57 секунд
Цитата Сообщение от WhiteBoss Посмотреть сообщение
В этом отрывке мы подставляем вместо x[t] решение нашего дифура которое равно s и с ним уже работаем?
Точнее, мы подставляем вместо x (!!!) решение дифура, которое содержится в правилах замены в s.
1
0 / 0 / 2
Регистрация: 13.10.2016
Сообщений: 141
29.10.2018, 18:42  [ТС] 9
Mysterious Light, Cпасибо за то что уделили время, буду изучать дальше.
0
29.10.2018, 18:42
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru