2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 15:28 
Здравствуйте асы программирования в WolframMathematika7.
Подскажите, пожалуйста, как остановить вычисление оператора NDSolve (численное решение системы диф уравнений второго порядка) если достигнуто некоторое значение (скорость объекта стала равна нулю при торможении). В начальных условиях она задана равной пяти м/с (V0=5)?

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 15:50 
С помощью опции StepMonitor можно задать проверку скорости на каждом шаге.

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение17.01.2010, 16:42 
Спасибо, попробую. Наверно внутри 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 
Как это сделать прямо, не знаю. В обход, используя 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 
Спасибо, попробую.

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

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 17:29 
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 
То-ли я пока не все понял, но есть ошибка "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 
Переменная data должна уже быть списком, а не просто неизвестной переменной без значения. Надо сначал исполнить команду data={};

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 20:23 
Я исправил
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 
Да. Только это массив данных, зачем присваивать первой паре символьные значения?

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 22:58 
Я, к сожалению, почти не знаю язык WolframMathematiсa7. Двадцать лет назад много программировал в Фортране, а потом только в Exel и очень мало в ВижуалБейсике. Сейчас срочно нужно решать довольно большие системы диф. ур. второго порядка используя NDSolve, а я совсем не знаю как залезть к ней во внутрь, чтобы изменять на разных шагах решения отдельные исходные параметры ориентируясь на промежуточные результаты решения системы уравнений. Не могли бы Вы посоветовать хорошую литературу по этому вопросу или другие справочные материалы на русском языке?

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение18.01.2010, 23:24 
Есть достаточно много книг по математике, в том числе и по решению ДУ, в том числе в сети. Но лично я ими никогда не пользовался, только хелпом :)

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение19.01.2010, 13:18 
Я пытаюсь решать ДУ в WolframMathematiсa7, поскольку я уже начал ею пользоваться. Но ни в книгах Дьяконова В.П., ни в других (в том числе электронных) я пока не нашел хорошего изложения по тонкостям таких решений. Может, сможете подсказать?

 
 
 
 Re: как остановить вычисления NDSolve в WolframMathematika7
Сообщение19.01.2010, 21:49 
Аватара пользователя
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  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group