Модули в физических вычислениях

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

Введение

Представьте, как десантник выпрыгивает из самолета. Предположим, что на десантника действуют только две силы: гравитационная сила и противоположная сила сопротивления от парашюта. Сила сопротивления пропорциональна скорости в квадрате десантника.

Сетевая сила, действующая на десантника, может быть выражена как

massacceleration=dragforcegravitationalforce,

mtv(t)=cdv(t)2mg,

где

  • m - масса десантника

  • g - ускорение свободного падения

  • v(t)- скорость десантника;

  • cd - константа перетаскивания

Задайте и решите уравнение движения

Задайте дифференциальное уравнение, описывающее уравнение движения.

syms g m c_d
syms v(t)
eq = m*diff(v(t),t) + m*g == c_d*v(t)^2
eq = 

mt v(t)+gm=cdv(t)2m * diff (v (t), t) + g * m = = c_d*v (t) ^ 2

Предположим, что парашют открывается сразу при t=0 так что уравнение eq действителен для всех значений t0. Решить дифференциальное уравнение аналитически используя dsolve с начальным условием v(0)=0. Решение представляет скорость десантника как функцию времени.

velocity = simplify(dsolve(eq, v(0) == 0))
velocity = 

-gmtanh(cdgtm)cd- (sqrt (g) * sqrt (m) * tanh ((sqrt (c_d) * sqrt (g) * t )/sqrt (m) )/sqrt (c_d)

Поиск модуля константы перетаскивания

Найдите модуль СИ константы перетаскивания cd.

Силовой модуль СИ является Ньютон (N). С точки зрения базовых модулей, Newton is (kgms2). Поскольку они эквивалентны, они имеют единичный коэффициент преобразования 1.

u = symunit;
unitConversionFactor(u.N, u.kg*u.m/u.s^2)
ans = 1sym (1)

Сила перетаскивания cdv(t)2 должно иметь тот же модуль в Ньютоне (N) как гравитационная сила mg. Используя размерный анализ, решите для модуля cd.

syms drag_units_SI
drag_units_SI = simplify(solve(drag_units_SI * (u.m / u.s)^2 == u.N))
drag_units_SI = 

1kg"kilogram - a physical unit of mass."m"meter - a physical unit of length."1 * (symunit ('kg' )/symunit ('m'))

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

Опишите движение десантника путем определения следующих значений.

  • Масса десантника m=70kg

  • Ускорение свободного падения g=9.81m/s2

  • Коэффициент перетаскивания cd=40kg/m

Замените эти значения в скоростное уравнение и упростите результат.

vel_SI = subs(velocity,[g,m,c_d],[9.81*u.m/u.s^2, 70*u.kg, 40*drag_units_SI])
vel_SI = 

-tanh(t40kg"kilogram - a physical unit of mass."m"meter - a physical unit of length."981100m"meter - a physical unit of length."s"second - a physical unit of time."270kg"kilogram - a physical unit of mass.")70kg"kilogram - a physical unit of mass."981100m"meter - a physical unit of length."s"second - a physical unit of time."240kg"kilogram - a physical unit of mass."m"meter - a physical unit of length."- (tanh ((t * sqrt (40 * (symunit ('kg') )/symunit ('m')) * sqrt (sym (981/100) * (symunit ('m' )/symunit ('s ') ^ 2)) )/sqrt (70 * symunit (' kg ')) * sqrt

vel_SI = simplify(vel_SI)
vel_SI = 

-3763tanh(3763t351s"second - a physical unit of time.")20m"meter - a physical unit of length."s"second - a physical unit of time."- ((3 * sqrt (sym (763)) * tanh (((3 * sqrt (sym (763)) * t )/35) * (1/symunit ('s ')) )/20) * (symunit (' m ')/symunit (' s '))

Вычислите численное приближение скорости к 3 значащим цифрам.

digits(3)
vel_SI = vpa(vel_SI)
vel_SI = 

-4.14tanh(2.37t1s"second - a physical unit of time.")m"meter - a physical unit of length."s"second - a physical unit of time."-vpa ('4.14') * tanh (vpa ('2.37') * t * (1/symunit ('s ')) * (symunit (' m ')/symunit (' s '))

Десантник приближается к постоянной скорости, когда сила тяжести уравновешивается силой сопротивления. Это называется конечной скоростью и происходит, когда сила сопротивления от парашюта отменяет силу свободного падения (дальнейшее ускорение отсутствует). Найдите конечную скорость, взяв предел t.

vel_term_SI = limit(vel_SI, t, Inf)
vel_term_SI = 

-4.14m"meter - a physical unit of length."s"second - a physical unit of time."-vpa ('4.14') * (symunit ('m' )/symunit ('s '))

Преобразуйте скорость в имперские модули

Наконец, преобразуйте функцию скорости из модулей СИ в имперские модули.

vel_Imperial = rewrite(vel_SI,u.ft)
vel_Imperial = 

-13.6tanh(2.37t1s"second - a physical unit of time.")ft"foot - a physical unit of length."s"second - a physical unit of time."-vpa ('13.6') * tanh (vpa ('2.37') * t * (1/symunit ('s ')) * (symunit (' ft ')/symunit (' s '))

Преобразуйте конечную скорость.

vel_term_Imperial = rewrite(vel_term_SI,u.ft)
vel_term_Imperial = 

-13.6ft"foot - a physical unit of length."s"second - a physical unit of time."-vpa ('13.6') * (symunit ('ft' )/symunit ('s '))

Скорость графика по времени

Чтобы построить график скорости как функции времени, выразите время t в секундах и замените t по T s, где T является безразмерной символьной переменной.

syms T
vel_SI = subs(vel_SI, t, T*u.s)
vel_SI = 

-4.14tanh(2.37T)m"meter - a physical unit of length."s"second - a physical unit of time."-vpa ('4.14') * tanh (vpa ('2.37') * T) * (symunit ('m' )/symunit ('s '))

vel_Imperial = rewrite(vel_SI, u.ft)
vel_Imperial = 

-13.6tanh(2.37T)ft"foot - a physical unit of length."s"second - a physical unit of time."-vpa ('13.6') * tanh (vpa ('2.37') * T) * (symunit ('ft' )/symunit ('s '))

Разделите выражение от модулей при помощи separateUnits. Постройте график выражения с помощью fplot. Преобразуйте модули в строки для использования в качестве меток графика при помощи symunit2str.

[data_SI, units_SI] = separateUnits(vel_SI);
[data_Imperial, units_Imperial] = separateUnits(vel_Imperial);

Скорость десантника приближается к установившемуся состоянию, когда t>1. Покажите, как скорость приближается к конечной скорости путем построения графика скорости в области значений 0T2.

subplot(1,2,1)
fplot(data_SI,[0 2])
title('Velocity in SI Units')
xlabel('Time in s')
ylabel(['Velocity in ' symunit2str(units_SI)])
subplot(1,2,2)
fplot(data_Imperial,[0 2])
title('Velocity in Imperial Units')
xlabel('Time in s')
ylabel(['Velocity in ' symunit2str(units_Imperial)])

Figure contains 2 axes. Axes 1 with title Velocity in SI Units contains an object of type functionline. Axes 2 with title Velocity in Imperial Units contains an object of type functionline.