Я решил систему двух дифференциальных уравнений второго порядка, используя реализацию метода Эйлера в Джулии. Приведенный ниже код показывает, как был вызван метод Эйлера для решения рассматриваемой системы.
θ1 = 1.1900518004210798; θ2 = 0.3807445263738167
f(t, y) = [y[2], -2(y[1] - θ1) - 4y[2] + 0.5sin(3pi*t),
y[4], -2(y[3] - θ2) - 4(y[4] + abs(y[2])) + 0.5sin(3pi*t)]
y0 = [pi/2, 0, pi/6, 0]; t0 = 0; tFinal = 50; h = 0.001
res = euler(f, y0, t0, tFinal, h)
Результат, res
, представляет собой вектор из четырех чисел
1.18798735437173
-0.0458294959470722
0.31530569612003573
-0.049213402534541074
Первая запись - это угол, который образует нижний сегмент линии с осью X, а третья запись - это угол, который образуют два отрезка линии друг с другом (см. Рисунок ниже).
Для создания этого сюжета я назвал plot_robotarm([res[1], res[3]])
, который реализован в соответствии с приведенным ниже кодом.
function plot_robotarm(thetav)
# Plots a robotarm with angles thetav
R = 1;
xv=zeros(length(thetav)+1)
yv=zeros(length(thetav)+1)
for i in 1:length(thetav)
xv[i+1]=xv[i]+R*cos(thetav[i])
yv[i+1]=yv[i]+R*sin(thetav[i])
end
# Plot with colors
opts = (:circle, 10, 1., :blue, stroke(7, 1., :red))
plt = plot(xv, yv,
marker = opts,
c = :red,
w = 5,
legend = false,
xlims = (0, 2.0),
ylims = (0, 2.0))
display(plt)
end
Как я могу создать анимацию, которая визуализирует, как последовательные итерации метода Эйлера заставляют манипулятор робота (то есть два отрезка) двигаться к конечной точке в t = 50
? (Мне не нужно составлять график каждой итерации, достаточно того, чтобы она создавала анимацию, которая фиксирует движение руки робота.)