19.12.2014, 21:28 | #1 (permalink) |
Новичок
Регистрация: 19.12.2014
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Составить программу интегрирования методом второго порядка. Pascal
|
19.12.2014, 21:28 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ваша тема схожа с этими, рекомендую внимательно прочитать Полосовой фильтр второго порядка Решение уравнения методом Рунге-Кутты 4-го порядка |
20.12.2014, 11:51 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И Вам не хворать.Спасибо.Это вряд ли. Тут такой матёрый жирный курсовик на недельку работы проглядывает.Замечательно!Дык... для этого надо было присутствовать на лекциях по теории колебаний, к которым Вас адресуют, или по крайней мере располагать конспектом этих лекций, да еще и разобраться в этой науке. А в лекциях наверняка прописано, как обращаться с такими вот экзотическими осцилляторами. И формулы даны.
Но если так, схематично... 1. Имеем существенно-нелинейное дифференциальное уравнение второго порядка с граничными условиями, каковое нужно решить. 2. Решение сводится прежде всего к преобразованию уравнения второго порядка к системе уравнений первого порядка. Делается это так. а) Исходное уравнение: d²q/dt² = exp(-q)(exp(-q)-1) б) Вводим новую переменную v = dq/dt в) Записываем систему dv/dt = exp(-q)(exp(-q)-1) = f(q) dq/dt = v = g(v) 3. Решаем систему численно. Поскольку Вам предлагается использовать простой метод второго порядка, то воспользуемся простым (немодифицированным) методом Эйлера. Тут так. а) Задаем шаг по времени Δt. б) Допустим, мы знаем значения функций q(t) и v(t) для какого-то i-того значения t, т.е. мы знаем q(ti) и v(ti). Тогда мы определяем значения q(ti+Δt) и v(ti+Δt), как v(ti+Δt) = v(ti) + f(q(ti))*Δt q(ti+Δt) = q(ti) + g(v(ti))*Δt в) Стартуя от данных начальных условий, строим функции и графики q(t) и v(t). Вот как-то так. Там еще требуется провести исследование устойчивости равновесных точек, а вот что под этим понимается и как оно делается - извините, просто не знаю. |
20.12.2014, 15:51 | #4 (permalink) | |
Новичок
Регистрация: 19.12.2014
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
20.12.2014, 23:38 | #5 (permalink) |
Новичок
Регистрация: 19.12.2014
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Блин, похоже я с математикой совсем раздружился. Я совсем не догоняю, как решать это =(
Можно как нибудь на примере. Куда что подставить надо. Весь день сижу понять не могу( |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
21.12.2014, 10:19 | #6 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Одно замечание. Чтобы осциллятор начал реально осциллировать, исходную скорость следует задавать отрицательной. В противном случае получится просто однонаправленное движение с выходом скорости на некую константу. Итак: Код:
Const Dt=0.1; V=-0.5; Q=0.0; Var f:Text; V_old,V_new,Q_old,Q_new,t:Real; i:Word; Begin Assign(f,'D:\Result1.dat'); Rewrite(f); t:=0; Q_old:=Q; V_old:=V; Writeln(f,t:5:1,Q:15:3,V:15:3); for i:=1 to 350 do begin t:=Dt*i; Q_new:=Q_old+V_old*Dt; V_new:=V_old+Exp(-Q_old)*(Exp(-Q_old)-1)*Dt; Writeln(f,t:5:1,Q_new:15:3,V_new:15:3); Q_old:=Q_new; V_old:=V_new; end; Close(f); End. Результат: А вот как там "исследовать точки равновесия на устойчивость" - это я не в курсе. |
|
21.12.2014, 14:46 | #7 (permalink) |
Новичок
Регистрация: 19.12.2014
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
ух, спасибо большое. А то уже не знал что делать. Выручили =)
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|