Редактирование: Сравнение методов Рунге-Кутта и Липфрога

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
[[Виртуальная лаборатория]]>[[Сравнение методов Рунге-Кутта и Липфрога]] <HR>
+
[[Виртуальная лаборатория]]>[[Сравнение методов Рунге-Кутта и leapfrog]] <HR>
 
 
Перед прочтением статьи рекомендуется просмотреть раздел "Обсуждение"
 
  
 
== '''Постановка задачи ''' ==
 
== '''Постановка задачи ''' ==
Строка 89: Строка 87:
 
   //  Задание констант
 
   //  Задание констант
 
     const Pi = 3.1415926;                  // число "пи"
 
     const Pi = 3.1415926;                  // число "пи"
 +
    const m0 = 1;                          // масштаб массы
 
     const T0 = 1;                          // масштаб времени (период колебаний исходной системы)
 
     const T0 = 1;                          // масштаб времени (период колебаний исходной системы)
 
     const a0 = 1;                          // масштаб расстояния (диаметр шара)
 
     const a0 = 1;                          // масштаб расстояния (диаметр шара)
  
 +
    const g0 = a0 / T0 / T0;                // масштаб ускорения (ускорение, при котором за T0 будет пройдено расстояние a0)
 
     const k0 = 2 * Pi / T0;                // масштаб частоты
 
     const k0 = 2 * Pi / T0;                // масштаб частоты
 +
    const C0 = m0 * k0 * k0;                // масштаб жесткости
 +
    const B0 = 2 * m0 * k0;                // масштаб вязкости
  
 
     // *** Задание физических параметров ***
 
     // *** Задание физических параметров ***
  
 
     const Ny = 5;                          // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
 
     const Ny = 5;                          // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
 +
    const m = 1 * m0;                      // масса
 +
    const Cwall = 10 * C0;                  // жесткость стен
 +
    const  B = 0.01 * B0;                  // вязкость среды
 +
    const  B1 = 0.03 * B0;                  // вязкость на стенках
 +
    var    mg = 0.25 * m * g0;              // сила тяжести
 +
    const  r = 0.5 * a0;                    // радиус частицы в расчетных координатах
 +
var stiff = 1 * C0;                    // "жесткость" пружинки
  
 
var vx0 = 1 * a0 / T0;
 
var vx0 = 1 * a0 / T0;
Строка 109: Строка 118:
 
     const spf = 100;                        // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
 
     const spf = 100;                        // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
 
     var dt  = 0.2 * T0 / fps;  
 
     var dt  = 0.2 * T0 / fps;  
var n = 40; // шаг интегрирования  
+
var n = 100; // шаг интегрирования  
 
slider_n.value = parseInt(n);
 
slider_n.value = parseInt(n);
 
number_n.value = parseInt(n);
 
number_n.value = parseInt(n);
Строка 117: Строка 126:
 
        function setN(new_n) {
 
        function setN(new_n) {
 
                 n = new_n;
 
                 n = new_n;
for (var z = 0; z < n; z++) {
 
b[z] = [];
 
a[z] = [];
 
}
 
 
for (var i = 0; i< n; i++) {
 
for (var i = 0; i< n; i++) {
 
for (var j = 0; j < n; j++) {
 
for (var j = 0; j < n; j++) {
 
c = [];
 
c = [];
 
d = [];
 
d = [];
c.x = w / 3 / n * i;
+
c.x = w / 2 + w / 7.1 / n * i;
c.vx = 2 * vx0 / n * j;
+
c.vx = vx0 / 1.7 / n * j;
d.x = w / 3 / n * i;
+
d.x = 0.28 / n * i;
d.vx = 2 * vx0 / n * j;
+
d.vx = vx0 / 1.7 / n * j;
 
b[i][j] = c;
 
b[i][j] = c;
 
a[i][j] = d;
 
a[i][j] = d;
Строка 143: Строка 148:
 
c = [];
 
c = [];
 
d = [];
 
d = [];
c.x = w / 3 / n * i;
+
c.x = w / 2 + w / 7.1 / n * i;
c.vx = 2 * vx0 / n * j;
+
c.vx = vx0 / 1.7 / n * j;
d.x = w / 3 / n * i;
+
d.x = 0.28 / n * i;
d.vx = 2 * vx0 / n * j;
+
d.vx = vx0 / 1.7 / n * j;
 
b[i][j] = c;
 
b[i][j] = c;
 
a[i][j] = d;
 
a[i][j] = d;
Строка 196: Строка 201:
 
c = [];
 
c = [];
 
d = [];
 
d = [];
c.x = w / 3 / n * i;
+
c.x = w / 2 + w / 7.1 / n * i;
c.vx = 2 * vx0 / n * j;
+
c.vx = vx0 / 1.7 / n * j;
d.x = w / 3 / n * i;
+
d.x = 0.28 / n * i;
d.vx = 2 * vx0 / n * j;
+
d.vx = vx0 / 1.7 / n * j;
 
b[i][j] = c;
 
b[i][j] = c;
 
a[i][j] = d;
 
a[i][j] = d;
Строка 225: Строка 230:
 
for (var k = 0; k < n; k++) {
 
for (var k = 0; k < n; k++) {
 
for (var p = 0; p < n; p++) {
 
for (var p = 0; p < n; p++) {
+
k1v = dt*(-( b[k][p].x - w/2));
k1v = dt*(-( b[k][p].x));
+
k2v = dt*(-( b[k][p].x - w/2)  + k1v/2);
k2v = dt*(-( b[k][p].x)  + k1v/2);
+
k3v = dt*(-( b[k][p].x - w/2)  + k2v/2);
k3v = dt*(-( b[k][p].x)  + k2v/2);
+
k4v = dt*(-( b[k][p].x - w/2) + k3v);
k4v = dt*(-( b[k][p].x) + k3v);
 
 
   
 
   
 
k1r = dt* b[k][p].vx;
 
k1r = dt* b[k][p].vx;
Строка 287: Строка 291:
 
for (var m = 0; m < n; m++) {
 
for (var m = 0; m < n; m++) {
 
context_gr.beginPath();
 
context_gr.beginPath();
context_gr.arc((b[l][m].x + w/2)* scale, (-b[l][m].vx + h / 2) * scale, 1, 0, 2 * Math.PI, false);                  //рисуем шар
+
context_gr.arc(b[l][m].x * scale, (-b[l][m].vx + h / 2) * scale, 1, 0, 2 * Math.PI, false);                  //рисуем шар
 
context_gr.fill();
 
context_gr.fill();
 
context_gr.closePath();
 
context_gr.closePath();
 
 
 
context_gr1.beginPath();
 
context_gr1.beginPath();
context_gr1.arc((a[l][m].x + w/2)* scale, (-a[l][m].vx + h / 2) * scale, 1, 0, 2 * Math.PI, false);                  //рисуем шар
+
context_gr1.arc(a[l][m].x * 300 + 300, (-a[l][m].vx + h / 2) * scale, 1, 0, 2 * Math.PI, false);                  //рисуем шар
 
context_gr1.fill();
 
context_gr1.fill();
 
context_gr1.closePath();
 
context_gr1.closePath();
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)