шенням даже при невелікій кількості кроків (з Швидко спадної практично до нуля похібкою).
Рішення ж для координати при малому чіслі кроків відрізняліся від точних РІШЕНЬ на значення порядку декількох відсотків, однак зі збільшенням числа кроків похібка помітно знизу - аж до сотих часток відсотка при 10.000 кроків.
Метод Рунге-Кутті показавши собі як очень Точний и просто в реализации у задачі для решение диференціальних рівнянь.
Список використаних джерел
1. О.Г. Ревінская, Н.С. Кравченко; Томський політехнічний університет. Рух тіла у в'язкому середовищі - Томськ: Вид-во Томського політехнічного університету, 2011 р
. Савельєв І.В. Курс загальної фізики - М.: Наука - 2008
. Мишенков В.І., Мишенков Є.В. Чисельні методи.- 2009
. Керниган Б., Рітчі Д. Мова програмування Сі - 2-е вид.- М .: Вільямс, 2007. - С. 304.
. Мак-Кракена Д.Чісленние методи та програмування.- 1990
Додаток А
Текст програми
# include lt; windows.h gt;
# include lt; stdio.h gt;
# include lt; stdlib.h gt;
# include lt; math.h gt;
# define g 9.80665
double ro_fluid=10, ro_body=100; teta=100;
double R=2;
double f (double x, double V)
{g * (1.0 - ro_fluid/ro_body) - 4.5 * teta * V/(ro_body * R * R);
}
double * RungeCuttaV (double t0, double tend, double h, double Y0, double V0) {tn, Vn=V0;
//Функція f з диф. Рівняння
//Знаходження швідкості методом Рунге-Кутті
double tau=ro_body * R * R/(4.5 * tetaU=(1 - ro_fluid/ro_body) * g * tau;
N=(tend - t0)/h; * VArr=(double *) malloc (N * sizeof (double));
i=0;
//Коефіціенті з диф. Рівняння
//Створюємо масив
//Лічільнік елементів
for (tn=t0; tn lt; tend; tn +=h)
{k1, k2, k3, k4Vn1;=f (tn, Vn);=f (tn + h/2, Vn + k1 * h/2);=f (tn + h/ 2, Vn + k2 * h/2);=f (tn + h, Vn + k3 * h);=Vn + h * (k1 + 2 * k2 + 2 * k3 + k4)/6.0;
//КОЕФІЦІЄНТИ методу Рунге-Кутті ( V (runge) (% lf) =% lf, V (real) (% lf) =% lf n raquo ;, tn, Vn, tn , U * (1 - exp (- tn/tau)));
виводимо значення швідкості, знайдені методом Рунге та Із точної формули.
VArr [i ++]=Vn1;
=Vn1;
} VArr;
} RungeCuttaY (double t0, double tend, double h, double Y0, double V0)
{// Запісуємо значення у масив.
//Знаходімо координату методом Рунге Із Рівняння dY/dt=V, де V - це значення знайдені функцією RungeCuttaV
double * VArr=RungeCuttaV (t0, tend, 0.5 * h, Y0, V0); i=0; tn, Yn=Y0; tau=ro_body * R * R/(4.5 * teta) ; U=(1 - ro_fluid/ro_body) * g * tau;
( n time | Y (runge) | Y (pres.form) n
----------- + ------------- + -------------- n );
(tn=t0; tn lt; tend; tn +=h, i ++)
{k1, k2, k3, k4; Yn1;
//У методі нужно вікорістаті значення у момент годині кратні НЕ лишь інтервалу, та и его половіні, того треба найти значення швідкості у дві разї більшім чіслі точок (шаг робимо у дві разї меншим)
k1=VArr [i * 2]
k2=k3=VArr [i * 2 + 1]
k4=VArr [i * 2 + 2];=Yn + h * (k1 + 2 * k2 + 2 * k3 + k4)/6.0;// VArr - значення швідкості у потрібні моменти годині.
Парні Елементи - у моменти, кратні інтервалу.
printf (% 9.5lf |% 10.6lf |% 10.6lf n raquo ;, tn, Yn, U * (tn - tau * (1 - exp (-tn/tau))) );
=Yn1;
}
}
//виводимо значення координат, знайденіх методом Рунге-Кутті ТА значення Із точної формули.
void ReadData ()
{( Plotnost jitkosti (kg/m ^ 3): ); (% lf raquo ;, amp; ro_fluid); ( Plotnost tela (kg/m ^ 3):); (% lf raquo ;, amp; ro_body); ( Koeficient vyazkosti (Pa * c): ); (% lf raquo ;, amp; teta); ( Radius shara ( m): ); (% lf raquo ;, amp; R);
}//Фізичні параметри.
//Щільність Р...