Введение в моделирование



Дифференциальные уравнения – очень мощный метод моделирования происходящих процессов.


Возьмем наиболее простой пример – попробуем смоделировать падение на землю мяча, брошенного вверх.


Первое уравнение очевидно – изменение координаты (в нашем случае будет только координата Y) пропорционально скорости.
В дифференциальном виде это будет уравнением


`(dY)/dt = v`

С другой стороны, при полете мяча на него постоянно действует сила земного тяготения, которая ежесекундно изменяет скорость на константу g=9.8 м/с2 – константу свободного падения.


`(dv)/dt = -g`

(-g, т.к. будем считать, что тяготение направлено против оси Y)


Запишем данные уравнения в форме нашей модели


function dydt():Number {
  return v;
}
 
function dvdt():Number {
  return -g;
}


и запустим их в нашей моделирующей программе (V 0 = 60, Y 0 = 0):


Показать интерактивную модель

Моделирование упругого отскока


Усложним задачу – попробуем смоделировать упругий отскок.


Для этого вспомним о силе реакции опоры – она пропорциональна погружению тела в глубину опоры.


Это можно сформулировать следующим образом:


В случае, если `Y >= 0`, то 


`(dv)/dt = -g`

если `Y < 0`, то 


`(dv)/dt = -g + (-y) * sopr`

где sopr – константа, определяющая сопротивление среды.


Запишем это в нашей модели


function dydt():Number {
  return v;
}
 
function dvdt():Number {
  var res:Number; // промежуточная переменная, содержащая результат вычисления
  if(y >= 0) {
    res = -g;
  } else {
    res = -g + (-y) * sopr;
  }
  return res;
}


и запустим в нашей моделирующей программе


Показать интерактивную модель

Моделирование неупругого отскока


В завершении мы попробуем смоделировать неупругий отскок.
Здесь нам придется пойти на хитрость, так как точно учесть деформации тела в столь простом дифференциальном уравнении мы не можем.


Поэтому сделаем следующее предположение о падении в среду, которое легко записать в уравнении:


Когда `Y < 0` и `v < 0`, то 


`(dv)/dt = -g + (-y) * sopr`

т.е. тело нормальным образом преодолевает сопротивление среды


Но, если `Y < 0` и `v >= 0` (т.е. в момент выталкивания) учтем, что не все сжатие среды пойдет на выталкивание тела.


`(dv)/dt = -g + (-y) * sopr * (1-degr)`

где degr [0,1] – константа, определяющая какой, по сути, процент энергии будет средой поглощен.


Запишем это в виде нашей модели:


function dydt():Number {
  return v;
}
 
function dvdt():Number {
  var res:Number; // промежуточная переменная, содержащая результат вычисления
  if(y >= 0) {
    res = -g;
  } else {
    if(v < 0) { 
      res = -g + (-y) * sopr;
    } else {
      res = -g + (-y) * sopr * (1 - degr);
    }
  }
  return res;
}


и запустим в нашей моделирующей программе


Показать интерактивную модель