2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 m y'' + k2 y' + k1 y = f(t)
Сообщение21.12.2010, 18:14 


21/12/10
2
Есть задача.

Твердое тело подвешено на пружине с амортизатором. На это тело действует вертикальная сила f(t) и его движение в вертикальной плоскости описывается следующим уравнением
m y'' + k2 y' + k1 y = f(t) где y – вертикальная координата тела, y' – производная y по по времени, y'' — вторая производная y по времени, m — масса тела, k2 – коэффициент амортизации.
С помощью языка Си++ проимитируйте 60 с движения тела с целью получения графика движения тела по вертикали при m = 1; k=0,1; k2=0,3; f(t) =1,0; при любом t.

Нужен примерный алгоритм.

-- Вт дек 21, 2010 18:19:30 --

Хотя бы подскажите в какую сторону копать.

 Профиль  
                  
 
 Re: m y'' + k2 y' + k1 y = f(t)
Сообщение21.12.2010, 22:46 
Заслуженный участник
Аватара пользователя


13/08/08
14495
составьте разностную схему, задайте начальные условия и шаг и заполняйте массив. Можно в два раза уменьшать шаг и наблюдать за точностью. Может быть предполагалось использовать какие-то структуры, но это самый простой способ.

 Профиль  
                  
 
 Re: m y'' + k2 y' + k1 y = f(t)
Сообщение22.12.2010, 15:03 
Аватара пользователя


22/12/10
264
Мнээ... Так при постоянном f(t) это уравнение же аналитически решается :) Решите на бумажке, получите формулу для y(t) и считайте по ней :)

 Профиль  
                  
 
 Re: m y'' + k2 y' + k1 y = f(t)
Сообщение23.12.2010, 20:17 
Заслуженный участник


26/07/09
1559
Алматы
2logarithm
Есть простой (но практически непригодный) способ численного интегрирования таких уравнений. Сначала нужно выразить $y''=(f(t)-k_2 y'-k_1 y)/m$. Понятно, что $y'$ теперь можно получить просто проинтегрировав $y''$, например, по-Эйлеру; аналогично получается искомая $y$.

Псевдокод:
Код:
dt=0.1; // "Infinitesimal" time interval.
t=0;
// Your initial conditions here.

while(t<=60)
{
    ddy=(f(t)-k2*dy-k1*y)/m; // Calculate second derivative of y.

    dy+=ddy*dt; // Integrate it using Euler method.
    y+=dy*dt; // In the same way, get y.
    // Plot(t, y);

    t+=dt; // Update the time position.
}


А вообще, гляньте в какую-нибудь книжку по численным методам, подыщите что-нибудь вроде метода Рунге-Кутта... Можно посмотреть для начала хотя-бы в H.Press et al., Numerical Recipes in C, там упрощенное изложение.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

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



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

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


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

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