2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение11.10.2010, 19:46 


06/10/10
106
На этом форуме мне подсказали решение вот этого уравнения на гармонические колебания:
$\ddot{x}+\omega^2x=0$


и ответ тут должен быть такой: $A\cos(\omega t+\varphi_0)$

Может кто знает, можно ли такой ответ получить в Математике, задавая только начальное уравнение? Или слишком многого хочу? Может как-то можно максимально быстро решать такие уравнения в этом пакете?

(там x это переменная: x(t), а то по началу я думал, что х - это константа и у меня вторая производная нулём там получалась :)) )

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение11.10.2010, 20:34 
Заслуженный участник
Аватара пользователя


07/01/10
2015
DSolve. Например, при начальной амплитуде $A$ и нулевой скорости:
Код:
DSolve[{x''[t] + w^2*x[t] == 0, x[0] == A, x'[0] == 0}, x[t], t]
(* x[t] -> A Cos[t w] *)


JustAMan, насколько я помню из вашей предыдущей темы, вы пишите программу, которая будет рисовать поведения шарика. Но тогда зачем вам точное символьное решение дифура? Решайте численно: из начальных условий, потихоньку, давая маленькие приращения. Можете посмотреть 1 том Фейнмановских Лекции по Физике: там есть примерчик "на пальцах".

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 02:07 


06/10/10
106
caxap
Спасибо за ответ!
Посмотрел Фейнмановские лекции по численным решениям уравнений. Примерно я понял, как там просчитываются следующие значения на основе предыдущих. Если не ошибаюсь, вот это именно такой метод? http://ru.wikipedia.org/wiki/%D0%9C%D0% ... 0%B5%D0%B9

А если производная у меня второго порядка, а не первого как в том примере, мне в каком порядке подходить к этой задаче? Вычислить одну производную, останется одна и решать таких же духом как это показано в формуле по википедиевской ссылке? Или в случае со вторым порядком оно решается как-то иначе?

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 10:08 
Заслуженный участник
Аватара пользователя


07/01/10
2015
У вас же механическая задача, вот и подходите к ней механически. Первая производная -- скорость, вторая -- ускорение. Ваше уравнение, фактически, второй закон Ньютона. Все формулы для численного решения из средней школы.

Вот у вас даны начальную условия (при $t=0$): координата $x(0)=A$ (начальная амплитуда), скорость $\dot x(0)=0$ (мы никуда не толкаем шарик изначально).

Найдём ускорение в этот момент: $\ddot x=-\omega^2 x=-\omega A$. За малое время $\Delta t$, это ускорение увеличит скорость на $\Delta v=a\cdot \Delta t=-\omega A \cdot \Delta t$. Эта скорость изменит координату на $\Delta x=v\cdot \Delta t = -\omega A \Delta t \cdot \Delta t$. А изменение координаты влечёт изменение ускорения, ведь $\ddot x=-\omega^2 x$ -- т. е. возвращаемся к началу абзаца. Получается такой цикл, и если вы будете на каждом шаге рисовать шарик в текущей координате $x$, то увидите, как он будет гармонически колебаться. (Для полного счастья надо ещё некоторую задержку ввести в цикл, иначе шарик будет колебаться очень часто.)

Всё будет полностью аналогично, если задать другие начальные условия: например оттянуть шарик подальше или пинуть его вначале в какую-то сторону. Для реальности можно ввести трение (например, сила трения о воздух, насколько я помню, пропорциональна второй степени скорости, т. е. $F_R=-c\dot x^2$, где $c$ -- некоторая константа, зависящая от формы шарика и др.), тогда колебания будут затухать (по экспоненте, но это вам знать не нужно, если вы решается уравнение численно).

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 14:05 


06/10/10
106
А почему вот здесь: $\ddot x=-\omega^2 x=-\omega A$ квадрат исчез?

Кажется примерно понял ход вычисления.. Таким образом, у нас есть финальная формула очередной координаты $x$ во времени $t$:
$\Delta x = -\omega A \Delta t \cdot \Delta t$
получается, подставляем любое время $t$ и получаем из формулы соответствующую ему координату в данной "точке" времени? Круто :)

А у нас ведь получается, что последующие значения никак не зависят от предыдущих? Если мы, скажем, можем подсчитать в момент времени: $t=2$ (при еденичном шаге временной шкалы) соответствующую координату, то мы можем также прыгнуть дальше и подсчитать сразу в момент времени $t=8$? А я думал, что последующее значение можно будет вычислить только на основе его предыдущего значения, или всё-таки оно так и есть, а я какой-то момент тут упускаю?

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 16:11 
Заслуженный участник
Аватара пользователя


07/01/10
2015
JustAMan в сообщении #362696 писал(а):
квадрат исчез?

опечатка

JustAMan в сообщении #362696 писал(а):
Кажется примерно понял ход вычисления..

Не поняли. Перечитайте ещё раз.

JustAMan в сообщении #362696 писал(а):
получается, подставляем любое время $t$ и получаем из формулы соответствующую ему координату в данной "точке" времени? Круто :)

Нет! Это в $A\cos (\omega t)$ вы подставляете время и получаете координату. А $\Delta x = -\omega^2 A \Delta t \cdot \Delta t$ -- это формула приращение координаты в первый "такт" времени $\Delta t$.

По текущей координате вы определяете текущее ускорение, по текущему ускорению определяете текущую скорость, по ней -- снова координату (уже в следующий "такт" времени) и т. д. Вычисления в каждом такте основывается на значениях из предыдущего такта. В этом и суть дифференциальных уравнений. Задавая всё меньшие такты $\Delta t$, разница между дифференциалом $dt$ и приращением $\Delta t$ будет уменьшаться и решение будет всё точнее. Так можно решить любое уравнение. А вот символьное точное (в данном случае $x(t)=A\cos (\omega t)$) решение получить очень очень редко.

-- Сб окт 16, 2010 16:21:33 --

Код:
dt = 0.001
x=A; t=0; v=0
цикл {
    a = -w^2*x

    dv = a*dt
    v = v + dv

    dx = v*dt
    x = x + dx

    t = t + dt

    draw_ball(x)
    sleep(dt)
}

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 17:09 


06/10/10
106
Ааа... понял :)

У нас процесс вычисления состоит из трёх действий:
$a =-\omega^2 x$
$\Delta v=a\cdot \Delta t$
$\Delta x=v\cdot \Delta t$
На первом шаге $x(0)$ мы принимаем за определённую константу (А, например), а далее дойдя вычислением до третьей формулы мы получаем $x$, который уже можно подставить в первое уравнение, найдя новое значение ускорения, потом далее во второе, дальше снова икс получим и опять в первую формулу подставляем его..) Теперь так?)
И на каждом шаге цикла (этих трёх вычислений) мы смещаем t на одну еденицу шага вперёд, верно?

Цитата:
Всё будет полностью аналогично, если задать другие начальные условия: например оттянуть шарик подальше или пинуть его вначале в какую-то сторону. Для реальности можно ввести трение (например, сила трения о воздух, насколько я помню, пропорциональна второй степени скорости, т. е. $F_R=-c\dot x^2$, где $c$ -- некоторая константа, зависящая от формы шарика и др.), тогда колебания будут затухать (по экспоненте, но это вам знать не нужно, если вы решается уравнение численно).

О, это интересное усовершенствование задачи :) Но как тогда должны измениться уравнения с учётом такой силы?

-- Сб окт 16, 2010 18:11:55 --

caxap
О, отдельное спасибо за код! :)

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 18:10 
Заслуженный участник
Аватара пользователя


07/01/10
2015
JustAMan в сообщении #362735 писал(а):
Теперь так?)

да
JustAMan в сообщении #362735 писал(а):
Но как тогда должны измениться уравнения с учётом такой силы?

Запишите второй закон Ньютона и будет вам уравнение.

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 21:29 


06/10/10
106
Понятно. Кстати, а методом конечных разностей такую задачу ведь решать можно? Я сейчас просто эту тему изучаю, вот заодно и пытаюсь опробовать в задачах разные методы.. В методе: http://ru.wikipedia.org/wiki/%D0%9C%D0% ... 0%B5%D0%B9 описывалась замена производной первого порядка на разностное выражение. А если в моём случае производная второго порядка, как стоит поступать в таком случае, не подскажите?

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 22:06 
Заслуженный участник
Аватара пользователя


07/01/10
2015
JustAMan в сообщении #362803 писал(а):
А если в моём случае производная второго порядка, как стоит поступать в таком случае, не подскажите?

Так же. Вторая производная -- это первая производная от первой производной. И т. д.

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение16.10.2010, 22:32 


06/10/10
106
Я вот там формулу не могу понять :( Почему там идёт $x+h$? Вот эта формула: u(x+h) = u(x) + h(3u(x)+2)

Насколько понимаю, там следующий коэффициент вычисляться должен на основе предыдущего? И h - это ведь еденичный шаг? Если h постоянно возрастает (или он не возрастает, а всегда константа?), то получится, что:
u(0+1) = u(0) + ...;
u(0+2) = u(0) + ...;
u(0+3) = u(0) + ...;

Так что ли пойдёт этот процесс? Но у нас же x должен инкрементироваться, типа такого:
u(0+1) = u(0) + ...;
u(1+1) = u(1) + ...;
u(2+1) = u(2) + ...;
тогда я ещё понимаю эту формулу, но тут h у меня фиксирован, чувствую какой-то подвох здесь) Не пойму или и то, и другое одновременно должно вперёд идти?

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение17.10.2010, 20:14 


06/10/10
106
Мне, кстати, подсказали тут ответ. Оказывается, под h имелось ввиду любое фиксированное число, которое может быть и не еденицей. Всё оказалось проще :-) Спасибо ewert'у за подсказку!)

caxap, спасибо за помощь с темой!

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение17.10.2010, 21:10 
Заслуженный участник


27/04/09
28128
Если $h$ то же самое, что $\Delta t$, надо, чтобы оно было достаточно малым по сравнению с величинами скоростей и ускорений! Не забудьте, а то модель будет намного более неточной, чем могла бы. :-)

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение18.10.2010, 02:15 


06/10/10
106
:-)
спасибо за уточнение! Буду иметь ввиду!

 Профиль  
                  
 
 Re: Mathematica: дифференциальное уравнение на гарм. колебания..
Сообщение26.10.2010, 03:37 


06/10/10
106
Кстати, а можно ли в Математике посчитать только первую производную от того же x''[t]+w^2*x[t]==0?

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

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



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

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


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

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