2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 15:28 


18/11/09
31
Здравствуйте асы программирования в WolframMathematika7.
Подскажите, пожалуйста, как остановить вычисление оператора NDSolve (численное решение системы диф уравнений второго порядка) если достигнуто некоторое значение (скорость объекта стала равна нулю при торможении). В начальных условиях она задана равной пяти м/с (V0=5)?

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 15:50 
Заслуженный участник


22/01/07
605
С помощью опции StepMonitor можно задать проверку скорости на каждом шаге.

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 16:42 


18/11/09
31
Спасибо, попробую. Наверно внутри StepMonitor
нужно создать оператор сравнения и в случае "да" сделать остановку Abort[]?

-- Вс янв 17, 2010 16:29:18 --

Уважаемый Gafield.
Команда Abort[] обрывает все вычисления и позволяет получить результаты. Подскажите, пожалуйста, какую команду следует применить, чтобы остановить вычисление NDSolve, вывести графики результатов.
Я испытал следующее:
$StepMonitor :> If[
\!\(\*SuperscriptBox[
и
$StepMonitor :> If[
\!\(\*SuperscriptBox[
ничего не получилось.
Команты Stop в WolframMathematiсa нет, к сожалению.

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 18:12 
Заслуженный участник


22/01/07
605
Как это сделать прямо, не знаю. В обход, используя Throw и Catch, можно получить значение $t_0$, при котором случается остановка и потом еще раз запустить вычисления до $t_0$. Или можно еще попробовать получить массив данных $(t,x(t))$ с помощью Sow и Reap или в прямую в StepMonitor добавлять значения data=Append[data,{t,x(t)}] и в случае "да" делать Throw[data].

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 18:15 


18/11/09
31
Спасибо, попробую.

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 12:33 


18/11/09
31
С помощью опции StepMonitor и Print получилось в распечатке найти этот момент, но автоматически остановить расчет с выводом результатов пока не могу. Может кто-нибудь подскажет?
Я не понял как использовать data=Append[data,{t,x(t)}].

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 17:29 
Заслуженный участник


22/01/07
605
protsiv в сообщении #281380 писал(а):
Я не понял как использовать data=Append[data,{t,x(t)}].

С помощью StepMonitor, типа
Код:
data={};
DSolve[...,StepMonitor:>Block[{},data=Append[data,{t,x(t)}];If[...,Abort]]]

В результате получится массив data, с помощью которого можно построить график. Если же программа не останавливается, то, вероятно, не умеет вычислять производную численного решения. Можно попробовать заменять конечной разностью.

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 19:22 


18/11/09
31
То-ли я пока не все понял, но есть ошибка "Nonatomic expression expected at position 1 in Append[data,{5.4403673481295005`*^-6,5.000011796388096}] (подсказка программы).
Я вставил
data={};
DSolve[...,StepMonitor :> Block[{}, data = Append[data, {t, x'[t]}]; If[x'[t] < 0.0001, Abort]]]

Что это может быть?

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 19:35 
Заслуженный участник


22/01/07
605
Переменная data должна уже быть списком, а не просто неизвестной переменной без значения. Надо сначал исполнить команду data={};

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 20:23 


18/11/09
31
Я исправил
data={t, x'[t]};
DSolve[...,StepMonitor :> Block[{}, data = Append[data, {t, x'[t]}]; If[x'[t] < 0.0001, Abort]]]
Вы это имели ввиду?

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 21:11 
Заслуженный участник


22/01/07
605
Да. Только это массив данных, зачем присваивать первой паре символьные значения?

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 22:58 


18/11/09
31
Я, к сожалению, почти не знаю язык WolframMathematiсa7. Двадцать лет назад много программировал в Фортране, а потом только в Exel и очень мало в ВижуалБейсике. Сейчас срочно нужно решать довольно большие системы диф. ур. второго порядка используя NDSolve, а я совсем не знаю как залезть к ней во внутрь, чтобы изменять на разных шагах решения отдельные исходные параметры ориентируясь на промежуточные результаты решения системы уравнений. Не могли бы Вы посоветовать хорошую литературу по этому вопросу или другие справочные материалы на русском языке?

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 23:24 
Заслуженный участник


22/01/07
605
Есть достаточно много книг по математике, в том числе и по решению ДУ, в том числе в сети. Но лично я ими никогда не пользовался, только хелпом :)

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение19.01.2010, 13:18 


18/11/09
31
Я пытаюсь решать ДУ в WolframMathematiсa7, поскольку я уже начал ею пользоваться. Но ни в книгах Дьяконова В.П., ни в других (в том числе электронных) я пока не нашел хорошего изложения по тонкостям таких решений. Может, сможете подсказать?

 Профиль  
                  
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение19.01.2010, 21:49 
Аватара пользователя


15/01/06
200
protsiv в сообщении #281600 писал(а):
Я пытаюсь решать ДУ в WolframMathematiсa7, поскольку я уже начал ею пользоваться. Но ни в книгах Дьяконова В.П., ни в других (в том числе электронных) я пока не нашел хорошего изложения по тонкостям таких решений. Может, сможете подсказать?


Тонкостями в книгах вряд ли кто-то делиться будет, но по крайней мере есть так скажем гораздо более расширенные описания с примерами, нежели хэлп. Если про ОДУ речь, то вот такая книга есть M.L.Abell, J.P.Braselton "Differential Equations with Mathematica", если всякие уравнения мат.физики интересуют, то Cap F.F. "Mathematical methods in physics and engineering with Mathematica".

Хотя я солидарен с Gafield'ом, книг по математике не читаю, просматриваю и не более, а потребности удовлетворяю хэлпом.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

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



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

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


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

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