Суббота, 04.04.2026, 21:47Приветствуем вас Гость | RSS
Решение задач в среде R
Главная | задача сани | Регистрация | Вход
» Меню сайта

» R практикум

» R кодинг

» Rmatem

» Опрос
Сколько вам лет?
Всего ответов: 9

» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Решаем школьную задачу по механике с помощью R тремя способами: с интегралом, дифференциальным уравнением и графически.

 Задача. Мальчик, съехав с горки на санях развил скорость в конце спуска 8 м/с и проехав по горизонтальному участку остановился через 5 секунд определить это расстояние.

Анализируем исходные данные.

Скорость в конце спуска с горки равна 8 метрам в секунду, это и есть начальная скорость (v0 = 8м/с), далее по мере движения по горизонтальной поверхности скорость будет уменьшаться, пока не достигнет через 5 секунд нулевого значения. Уравнение изменения скорости при ускоренном движении всем хорошо известно: v = v0 + at, и подставив в него известные данные мы можем вычислить чему равно ускорение. Получаем следующее выражение: 0 = 8 -a*5 откуда выразив ускарение a = 8/5 получим в итоге a = 1.6. Таким образом нам известны следующие параметры:

  1. начальная скорость - (v0 = 8м/с)
  2. ускорение – (a = -1.6 м/с^2) со знаком минус, так как в нашей задаче движение равнозамедленное
  3. время движения t = 5 секунд

А теперь ответим и на вопрос задачи: найдем путь, которые проехал мальчик на санях, с момента когда он съехал с горки до полной остановки.

Первый способ решения мы воспользуемся интегралом.

Здесь все очень просто: у нас есть функция изменения скорости по времени v(t) = 8 - 1.6*t. Поскольку скорость это и есть производная пути по времени, то интеграл этой функции является функцией пути по времени. Пределы интегрирования это время от 0 до 5 (по условию задачи), и наша конструкция на языке R примет вид:

# мальчик съехав с горки на санях развил скорость в конце спуска 8 м/с 
# и проехав по горизонтальному участку остановился  через 5 секунд
# определить это расстояние
# v = v0 + at ; 0 = 8 -a*5 ; a = 8/5 ; a = 1.6
v0 = 8
a = 1.6
# v(t) = 8 - 1.6*t
# Integrate!
st=function(t) 8 - 1.6*t
# Integrate from 0 to 5
integrate(st, 0, 5)

> v0 = 8
> a = 1.6
> # v(t) = 8 - 1.6*t
> # Integrate!
> st=function(t) 8 - 1.6*t
> # Integrate from 0 to 5
> integrate(st, 0, 5)
20 with absolute error < 2.2e-13

Ответ: 20 метров. 

Второй способ решение с помощью дифференциального уравнения.

По сути мы создаем снова функцию (  ds.dt = 8 - 1.6*t):

f1 = function(t, s, parms ){

  ds.dt = 8 - 1.6*t

  return ( list ( ds.dt ))}

И подставляя начальные условия решаем ДУ:

s0 = 0; t0 = seq(0, 5, 0.5)

sol = ode(y = s0, t = t0, func = f1, parms = NULL)

Полный скрипт (включая построения графика зависимости в данном случае пути по времени):

library(deSolve)

f1 = function(t, s, parms ){
  ds.dt = 8 - 1.6*t 
  return ( list ( ds.dt ))}
s0 = 0; t0 = seq(0, 5, 0.5)
sol = ode(y = s0, t = t0, func = f1, parms = NULL)
sol
plot(sol[ ,1], sol[ ,2], type = "l", xlab =" t ", ylab =" y( t )",
     col =" red ", lwd =4)
grid(col = 'black')

 

> f1 = function(t, s, parms ){
+ ds.dt = 8 - 1.6*t 
+ return ( list ( ds.dt ))}
> s0 = 0; t0 = seq(0, 5, 0.5)
> sol = ode(y = s0, t = t0, func = f1, parms = NULL)
> sol
 time 1
1 0.0 0.0
2 0.5 3.8
3 1.0 7.2
4 1.5 10.2
5 2.0 12.8
6 2.5 15.0
7 3.0 16.8
8 3.5 18.2
9 4.0 19.2
10 4.5 19.8
11 5.0 20.0

Ответ в 11 строке: 5 секунд и пройденный путь за это время 20 метров. А выполнив скрипт до конца получим и симпатичный график:

Третий способ решения графический.

Сначала мы построим одновременно два графика: зависимости скорости (первый график) и пути (второй график) от времени. Далее по графику изменения скорости найдем тот момент времени, когда скорость будет равна нулю), и лишний раз убедимся, что это будет в момент t=5 секундам. Далее опустим перпендикуляр от 5 на график зависимости пути от времени, и определим пройденное расстояние. Результат будет тот же самый: 20 метров.

# v(t) = 8 - 1.6*t
# s(t) = 8 -1.6*t^2/2
t = seq(0, 6, 0.1)
vt = 8 - 1.6*t
st = 8*t -1.6*t^2/2
plot(t, st, 'l', lwd = 2)
lines(t, vt, lwd = 2, col ='red')
abline(h = 0, lty = "dashed")
abline(h = 20, lty = "dashed")
abline(v = 5, lty = "dashed")
points(5, 20, lwd = 2, col ='red')
grid()

» Вход на сайт

» Поиск

» Работа с файлами

» Вся графика

» Гистогра́мма

» Теория вероятности

» Сравнение групп

» Дисперс анализ

» Блог

» Календарь
«  Апрель 2026  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930

» Архив записей


Copyright MyCorp © 2026
uCoz