演習:振り子のアニメーション 担当:柳澤優香 「第8回演習問題」として,CourseN@viで提出.締め切り 6/10(金)13時まで 振り子運動 • 振り子とは,一点で支えられた糸や棒(伸び縮みしな い)の先に小さいおもりをつけたもの • 一度力を加えると揺れを繰り返し、摩擦や空気抵抗 がない場合永久に揺れ続ける.時計やメトロノームに 応用. • 二重振り子は角度が大きい場合,カオス現象(初期値 に対する鋭敏な依存性)が観察される 1 単振り子の運動方程式 • • 運動方程式より,重力を分解した力Fが復元力として単振動する. 赤矢印の向きは,半径lの円周の接線方向となり,円弧を描いて往復運動を行う 𝐹 = −𝑚𝑔sin𝜃 𝑚𝑎 = −𝑚𝑔sin𝜃 , θ l 𝑑 𝑠 𝑚 , = −𝑚𝑔sin𝜃 x 𝑑𝑡 s 𝑑, 𝜃 𝑔 = − sin𝜃 ( s=lθより) , 𝑑𝑡 𝑙 l:糸の長さ m:質量 θ:角度 t:経過時間 g:重力加速度(9.8) θが微小ならx∼s l θ 糸の長さ:l 質量:m mgsinθ 原点 θ mg 2 振れ角θの周期を計算 ・高次の微分方程式を1階の連立微分方程式に変換 𝑑𝜃 𝑦1 = 𝜃, 𝑦, = 𝑑𝑡 とすれば, 𝑦1 =𝑦, 𝑔 𝑦, = − sin(𝑦1 ) 𝑙 function dy = furiko(t,y,flag,l) g = 9.8; dy = zeros(2,1); dy(1) = y(2); dy(2) = - (g/l).*sin(y(1)); スクリプトで実行 ts=[0 20]; y0=[1;0];l=1.5; [T,Y]=ode45('furiko',ts,y0,[],l) ; plot(T,Y(:,1)) 3 アニメーションの作成 1,糸の長さとθから, おもりのx座標とy座標を計算 2,糸の描画は,plot([0 x],[0 y]) 3,描画範囲を設定 axis(plotsize); plotsize = l*[-1 1 -1 0]; xの範囲 yの範囲 4,おもりの描画 plot(px,py,'o','MarkerSize',20) 5,少し動きを止めたい場合は pauseを使う(ボール投げ参照) 6,1から5を繰り返す (0,0) θ 糸の長さ:l 質量:m (x,y) 4 時間がある人は 応用:二重振り子の運動方程式 (0,0) • ラグランジュの運動方程式より導出 θ 糸の長さ:l1 (x,y) 𝑚 1 + 𝑚 , 𝑙1 𝑙 1 𝑙, 67 8 7 69 67 8 6 97 + 𝑚, 𝑙, cos 𝜃 − 𝜑 67 : 6 97 7 ,6 : +𝑙 , 7 69 cos 𝜃 − 𝜑 6: +𝑚 , 𝑙, ( ), 𝑠𝑖𝑛(𝜃 − 𝜑)+(𝑚1 69 質量:m1 + 𝑚 , ) 𝑔𝑠𝑖𝑛(𝜃)=0 68 − 𝑙 1 𝑙, ( ), 𝑠𝑖𝑛(𝜃 − 𝜑)+ 𝑔𝑙 , 𝑠𝑖𝑛(𝜑)=0 69 長い。。。 φ 糸の長さ:l2 (x2,y2) 質量:m2 5 まずはこちらでやってみよう! • 𝜃 − 𝜑が著しく0に近いと考えると, 𝑠𝑖𝑛 𝜃 − 𝜑 = 0, cos 𝜃 − 𝜑 = 1, 𝑚 1 + 𝑚 , 𝑙1 67 8 6 97 + 𝑚, 𝑙, 67 : 6 97 𝑠𝑖𝑛 𝜃 ~𝜃 とでき, +(𝑚 1 + 𝑚 ,) 𝑔𝜃=0 67 8 7 ,6 : 𝑙 1 𝑙, 7 +𝑙 , +𝑔𝑙 , 𝜑=0 69 6 97 𝜃 = 𝑦, 68 69 = 𝑦, , 𝜑=𝑦@ , 6: 69 = 𝑦A とすれば, 𝑦1 =𝑦, 𝑚1 + 𝑚, 𝑙1𝑦,+𝑚, 𝑙, 𝑦A=- (𝑚1 + 𝑚,) g𝑦1 𝑦@ =𝑦A 𝑙1 𝑦,+𝑙, 𝑦A =- g𝑦@ 6 二重振り子のアニメーション作成 1:振れ角の周期を計算 - 4元一次方程式を解き,y1とy3を求める × = function dy = dblfuriko(t,y,flag,l1,m1,l2,m2) g = 9.8; F = zeros(4); %4×4のゼロ行列 F(1,1) = 1; F(2,2) = (m1 + m2)*l1; F(2,4) = m2*l2; F(3,3) = 1; F(4,2) = l1; F(4,4) = l2; b = zeros(4,1); b(1) = y(2); b(2) = -(m1 + m2)*g*y(1); b(3) = y(4); b(4) = -g*y(3); dy = F¥b; %ガウスの消去法 2:アニメーションの作成 y1とy3を基に作成.単振り子と同様の方法 7 参考:二重振り子のアニメーション dbl_furiko.m ts=[0 10]; y0=[0.1 0 0.1 1]'; l1=1; m1=8; l2=1; m2=1; [T,Y]=ode45('dblfuriko',ts,y0,[],l1,m1,l2,m2); dblfurikoplot(T,Y,l1,l2) %角度の周期を計算 plotsize = 1.2*(l1 + l2)*[-1 1 -1 0]; % 描画範囲 for i=1:length(T)-1 px1 = l1*sin(Y(i,1)); % ボール1のX座標 py1 = -l1*cos(Y(i,1)); % ボール1のY座標 px2 = px1 + l2*sin(Y(i,3)); % ボール2のX座標 py2 = py1 - l2*cos(Y(i,3)); % ボール2のY座標 hold on plot([0 px1],[0 py1]) % 糸1の描画 plot(px1,py1,'o','MarkerSize',20) % ボール1の描画 plot([px1 px2],[py1 py2]) % 糸1の描画 plot(px2,py2,'o','MarkerSize',20) % ボール1の描画 axis(plotsize); % 描画範囲の設定 pause(0.01) hold off plot(0) end 8 参考文献 • 青山貴伸,蔵本一峰,森口肇:「最新 使え る!MATLAB 」 9
© Copyright 2024 Paperzz