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, Супермодераторы



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

Сейчас этот форум просматривают: Andrei P


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

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