matlabで振り子を動かしてみる
運動方程式などの細かい話は次回
% パラメータ設定
g = 9.81; % 重力加速度 (m/s^2)
L = 1.0; % 振り子の長さ (m)
theta0 = 0.1; % 初期角度 (ラジアン)
omega0 = 0; % 初期角速度 (rad/s)
dt = 0.01; % タイムステップ (秒)
T = 10; % シミュレーション時間 (秒)
% 時間ベクトル
t = 0:dt:T;
% 初期条件
theta = zeros(size(t));
omega = zeros(size(t));
theta(1) = theta0;
omega(1) = omega0;
% 振り子運動のシミュレーション (オイラー法)
for i = 1:length(t)-1
% 運動方程式の差分方程式
theta(i+1) = theta(i) + dt * omega(i);
omega(i+1) = omega(i) - (g / L) * sin(theta(i)) * dt;
end
% アニメーションの作成
figure;
hold on;
axis equal;
xlim([-1.2*L 1.2*L]);
ylim([-1.2*L 1.2*L]);
lineHandle = line([0 0], [0 0], 'LineWidth', 2);
pendulumHandle = plot(0, 0, 'o', 'MarkerSize', 10, 'MarkerFaceColor', 'r');
for i = 1:length(t)
% 振り子の位置を計算
x = L * sin(theta(i));
y = -L * cos(theta(i));
% 振り子の位置を更新
set(lineHandle, 'XData', [0 x], 'YData', [0 y]);
set(pendulumHandle, 'XData', x, 'YData', y);
% アニメーションを更新
drawnow;
% 一時停止(アニメーションの速度調整)
pause(dt);
end
コメント