Scilabで単振り子 その4 位相図

Scilabで単振り子 その1 解析解との比較Scilabで単振り子 その2 近似解との比較Scilabで単振り子 その3 ヤコビの楕円関数では、微分方程式による物理現象のモデル化(PDF)に従って計算をしてきました。今回は単振り子のシリーズの最後として元PDFの問題21の位相図の作成を行いました。

001_20130721164221.png

Fig.1: 単振り子の運動の位相図。横軸が角度θで縦軸が角速度q。θ=0から初角速度q0を与えて運動を開始させたばあい、ある一定の値(q0≒12.6)よりも大きな初角速度を与えると振り子ではなく、鉄棒の大車輪のようにグルグルと軸を中心に回る運動となる。(参考:単振り子の話(PDF))



これまで通りScilabの常微分方程式ソルバodeを用いて計算を行いました。
元PDFの問題21では、初角速度q0をパラメータとして変更して複数回の計算を行っています。
初角速度q0の導出は、既にその3で行いました。

今回はそのままプログラミングするだけです。

clear;

// *** 解析解とソルバ解の共通部分 ***
g = 9.8; // 重力加速度
l = g / (2 * %pi) ^ 2; // 糸の長さ

// *** 常微分方程式ソルバによる解 ***
// 解くべき微分方程式の定義
function dx = pend(t,x)
dx(1) = x(2);
dx(2) = - g / l * sin(x(1));
endfunction
T = linspace(0,2,200); // 時間ベクトル

X0 = [0; 3.1]; // 初期条件
TH = ode(X0, 0, T, pend); // 常微分方程式ソルバ
plot(TH(1,:),TH(2,:),'-r'); // プロット

X0 = [0; 6.3]; // 初期条件
TH = ode(X0, 0, T, pend); // 常微分方程式ソルバ
plot(TH(1,:),TH(2,:),'-g'); // プロット

X0 = [0; 9.4]; // 初期条件
TH = ode(X0, 0, T, pend); // 常微分方程式ソルバ
plot(TH(1,:),TH(2,:),'-b'); // プロット

X0 = [0; 12.6]; // 初期条件
TH = ode(X0, 0, T, pend); // 常微分方程式ソルバ
plot(TH(1,:),TH(2,:),'-m'); // プロット

X0 = [0; 15.7]; // 初期条件
TH = ode(X0, 0, T, pend); // 常微分方程式ソルバ
plot(TH(1,:),TH(2,:),'-c'); // プロット

// *** グラフの体裁 ***
legend("q0 = 3.1","q0 = 6.3","q0 = 9.4","q0 = 12.6","q0 = 15.7",4);
xlabel("$\theta \mathrm{[rad]}$");
ylabel("q [rad/s]");
zoom_rect([-2,-10,8,20]);
xgrid(color(128,128,128));


関連エントリ




参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 単振り子 位相図 

Scilabで単振り子 その3 ヤコビの楕円関数

Scilabで単振り子 その1 解析解との比較Scilabで単振り子 その2 近似解との比較と単振り子の運動を計算してきました(微分方程式による物理現象のモデル化(PDF)の例題5と問題20)。今回は、その1で計算した解析解を更に変形してヤコビの楕円関数で表したものを計算します(元PDF問題19)。

_\theta (t) = 2 \arcsin \left\{\sin\frac{\theta_0}{2} \mathrm{sn}\left(t\sqrt{\frac{g}{L}},\sin^2\frac{\theta_0}{2}\right) \right\}

ただし元PDFの説明が不親切なこともあり、2点ほど考えなければならない点があります。

一つ目は、元PDFの図21を見ても分かるとおりt=0(s)のときのθがθ0になっていない事です。プロットしてみれば分かりますが、ヤコビの楕円関数の式は、θ=0から最大振幅θ0となるような初角速度q0を与えたときの解となっています。

二つ目は、Scilabでヤコビの楕円関数をどのように呼び出すかということです。特に元PDFでは以下のように書かれているにもかかわらず、kが定義されていないので分かりづらいです。(それどころかリスト13 pendulum.mのなかで全く別の変数にkを使っていてとても紛らわしいです。)

Octave でJacobi の楕円関数を得るにはm = k2とおいて,以下のように呼び出します.
[sn, cn, dn] = ellipj(u,m)


これら2つの点について順に書きます。


初角速度q0の計算


001_20130720182725.png

Fig.1: 単振り子の問題設定


エネルギー保存則から

mgL(1-\cos\theta_0) = \frac{1}{2}mv_0^2

左辺はθ=θ0, q=0のときの(位置)エネルギーで、θ=0,q=q0のときの速度をv0とすると右辺はθ=0のときの(運動)エネルギーです。

従って初速度v0

v_0 = \sqrt{2gL(1-\cos\theta_0)}

初角速度は

q_0 = \frac{v_0}{L} = \sqrt{2\frac{g}{L}(1-\cos\theta_0)}

なお数値計算の常識によると倍角は使うな,半角を使えとのことなので、下記の倍角公式を使います。

\sin^2 x = \frac{1-\cos x}{2}

結局、θ=0から初角速度q0を与えたときに最大振幅がθ0となる初角速度q0

q_0 = 2 \sqrt{\frac{g}{L}}\sin^2\frac{\theta_0}{2}

となります。

ヤコビの楕円関数


単振り子の話(PDF)などをみると

\omega = \sqrt{\frac{g}{L}}

k = \sin \frac{\theta_0}{2}

というようにおくのが普通のようです。元PDFで定義されずに使われているkもこれだと思います。

Scilabではヤコビの楕円関数は%sn(x,m)で計算できます。(参考:%sn - ヤコビ楕円関数)

元PDFと同様に m=k2とおいて冒頭の式の形になります。

\theta(t) = 2 \arcsin \left\{ k \cdot \sin\left(\omega t, k^2\right)\right\}

計算結果


以上を踏まえて作成したプログラムがpendulum3_sce.txtです。

002_20130721152439.png

Fig.2: 最大振幅θ0=3のときの計算結果。常微分方程式ソルバで計算した結果(赤)とヤコビの楕円関数で計算した解析解(緑)が同じ結果を示している。


関連エントリ




参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 単振り子 

Scilabで単振り子 その2 近似解との比較

Scilabで単振り子 その1 解析解との比較では微分方程式による物理現象のモデル化(PDF)の例題5として単振り子の運動の厳密解を常微分方程式ソルバ、解析解に対する数値積分の二つの方法で計算するScilabプログラムを作成しました。

今回は振幅θが小さいときのみ成り立つ近似(sinθ≒θ)を用いた近似解と前回常微分方程式ソルバで求めた厳密解を比較し、振幅θが大きいときには近似解の誤差が大きくなってしまうことを確認しました。
また、前回は保留とした、単振り子の微分方程式の導出も行いました。

001_20130720204050.png 002_20130720204050.png


厳密な方程式と近似式


Scilabで単振り子 その1 解析解との比較で書いたとおり、単振り子の運動を表す厳密な微分方程式は以下の式で表されます。

\frac{\mathrm{d}\theta}{\mathrm{d}t} = q
\frac{\mathrm{d}^2\theta}{\mathrm{d}t^2} = - \frac{g}{L}\sin\theta

(θ: 振れ角, t: 時間, q: 角速度, g: 重力加速度, L: 糸の長さ)

しかしながら、これも前回触れた事ですが、この式は解析解を求めても、初等関数のみで表すことが出来ないため結局数値積分が必要となります。そこで振幅が小さいと仮定して近似を用います。

\sin\theta \simeq \theta

したがって、小振幅のときの微分方程式は以下のように書くことが出来ます。

\frac{\mathrm{d}^2 \theta}{\mathrm{d}^2 t} = - \frac{g}{L}\theta

これらの微分方程式を常微分方程式ソルバodeを使って解くプログラムがpendulum2_sce.txtです。

(なお小振幅のときの解析解は単振り子・単振動など)

計算結果


以下に計算結果を示します。
小振幅のときは近似が成り立っていますが、大振幅では誤差が大きくなります。

001_20130720204050.png

Fig.1: θ0=0.1(小振幅)のときの解。厳密解(赤)と近似解(緑)は同じ結果を示す。

002_20130720204050.png

Fig.2: θ0=2.9(大振幅)のときの解。厳密解(赤)と近似解(緑)には大きな誤差が存在す


Appendix: 微分方程式の導出


以下の単振り子の微分方程式を導出します。

\frac{\mathrm{d}^2\theta}{\mathrm{d}t^2} = - \frac{g}{L}\sin\theta

001_20130720182725.png

Fig.3: 単振り子の問題設定


点Pにおける座標は

x = L\sin\theta, y = L\cos\theta

です。

運動方程式 ma = F を水平(x)方向と鉛直(y)方向のそれぞれについて立てます。

ma_x = F_x, ma_y = F_y

加速度は、位置の2回微分なので

a_x = \frac{\mathrm{d}^2 x}{\mathrm{d}t^2}, a_y = \frac{\mathrm{d}^2 y}{\mathrm{d}t^2}

まず

\frac{\mathrm{d}x}{\mathrm{d}t} = \frac{\mathrm{d}x}{\mathrm{d}\theta} \frac{\mathrm{d}\theta}{\mathrm{d}t} = L\cos\theta\frac{\mathrm{d}\theta}{\mathrm{d}t}

\frac{\mathrm{d}y}{\mathrm{d}t} = \frac{\mathrm{d}y}{\mathrm{d}\theta} \frac{\mathrm{d}\theta}{\mathrm{d}t} = - L\sin\theta\frac{\mathrm{d}\theta}{\mathrm{d}t}


次に(f \cdot g)' = f' \cdot g + f \cdot g'より

texclip20130720211659.png

\begin{eqnarray*}<br />\frac{\mathrm{d}^2 y}{\mathrm{d}t^2} & = & \frac{\mathrm{d}}{\mathrm{d}t}\left(-L\sin\frac{\mathrm{d}\theta}{\mathrm{d}t} \right) \\& = & \left(-\frac{\mathrm{d}}{\mathrm{d}t}L\sin\frac{\mathrm{d}\theta}{\mathrm{d}t} \right)\frac{\mathrm{d}\theta}{\mathrm{d}t}- L\sin\theta \left(\frac{\mathrm{d}^2 \theta}{\mathrm{d}t^2} \right) \\& = & - L\cos\theta \left(\frac{\mathrm{d}\theta}{\mathrm{d}t} \right)^2 - L\sin \theta \frac{\mathrm{d}^2 \theta}{\mathrm{d}t^2}\end{eqnarray*}

同様に力も水平(x)方向と鉛直(y)方向両方に関して

F_x = S_x = -S\sin\theta

F_y = mg + S_y = mg - S\cos\theta

よって、運動方程式は

\begin{eqnarray}<br />mL\left\{\cos\theta\frac{\mathrm{d}^2\theta}{\mathrm{d}t^2}-\sin\theta\left(\frac{\mathrm{d}\theta}{\mathrm{d}t}\right)^2\right\} &=& -S\sin\theta\\-mL\left\{\sin\theta\frac{\mathrm{d}^2\theta}{\mathrm{d}t^2}+\cos\theta\left(\frac{\mathrm{d}\theta}{\mathrm{d}t}\right)^2\right\} &=& mg -S\cos\theta<br />\end{eqnarray}

(1)×cosθ-(2)×sinθより

mL\frac{\mathrm{d}^2 \theta}{\mathrm{d}t^2}(\sin^2\theta + \cos^2\theta) = -mg\sin\theta

sin2θ+cos2θ=1なので

\frac{\mathrm{d}^2\theta}{\mathrm{d}t^2} = - \frac{g}{L}\sin\theta


関連エントリ




参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 単振り子 

Scilabで単振り子 その1 解析解との比較

これまで微分方程式による物理現象のモデル化(PDF)から運動学の章で紹介されている微分方程式をScilabを用いて計算してきました。
今回から4回は単振り子の微分方程式をScilabで計算します。

001_20130720182725.png

Fig.1: 単振り子の問題設定



単振り子の微分方程式と解析解


導出は次回に回しますが、単振り子の運動を表す微分方程式は、以下のように書くことが出来ます。

\frac{\mathrm{d}\theta}{\mathrm{d}t} = q
\frac{\mathrm{d}^2\theta}{\mathrm{d}t^2} = - \frac{g}{L}\sin\theta

(θ: 振れ角, t: 時間, q: 角速度, g: 重力加速度, L: 糸の長さ)

この微分方程式は、解析的に解を求めることが出来ます。
例えば、初角度θ0から初角速度q0=0で振動を開始したとすると下記のようになります。

t(\theta) = - \sqrt{\frac{L}{2g}}\int^{\theta}_{\theta_0}\frac{\mathrm{d}\theta}{\sqrt{\cos\theta - \cos\theta_0}}

しかしながら、この積分は初等関数で表せる形に出来ないので、結局は数値積分をせざるを得ません。

今回は、これまでと同様にScilabの常微分方程式ソルバodeを用いて振りこの運動をシミュレーションするとともに、解析解に対する数値積分も行い、これら二つを比較します。

プログラミング


常微分方程式ソルバはode関数を使います。(参考:常微分方程式のタグが付いたエントリ)

解析解のほうの数値積分はintegrate関数を用いました。(参考:Scilabで数値積分: 固体の比熱,integrate - 求積法による積分)

// *** 解析解とソルバ解の共通部分 ***
// 初期振幅の入力
g = 9.8; // 重力加速度
l = g / (2 * %pi) ^ 2; // 糸の長さ
// 初期条件
th0 = input("th0 = "); // 初角度
q0 = 0; // 初角速度
X0 = [th0; q0];

// *** 常微分方程式ソルバによる解 ***
// 解くべき微分方程式の定義
function dx = pend(t,x)
dx(1) = x(2);
dx(2) = - g / l * sin(x(1));
endfunction
T = linspace(0,2,200); // 時間ベクトル
TH = ode(X0, 0, T, pend); // 常微分方程式ソルバ
plot(T,TH(1,:),'-r'); // プロット

// *** 解析解 ***
THanaly = linspace(- th0, th0, 20);
Tanaly = - sqrt(l / (2 * g)) * integrate('1 ./ sqrt(cos(th) - cos(th0))','th',th0,THanaly);
plot(Tanaly,THanaly,'og');

// *** グラフの体裁 ***
legend("o.d.e","integration",1);
xlabel("t[s]");
ylabel("$\theta \mathrm{[rad]}$");


計算結果


以下に、初角速度q0=0で初角度θ0を0.1ラジアン、2.9ラジアンの2通りの値で計算した結果を示します。

002_20130720182725.png

003_20130720182724.png

Fig.2-3: 厳密な単振り子の解。sinθ≒θの近似が成り立つときの周期が1秒となるように糸の長さLを調整している。振幅(初角度)が小さいとき(θ0=0.1; グラフ上)は周期が1秒となっているが、振幅(初角度)が大きいとき(θ0=2.9; グラフ下)は周期が1秒を大きく超えている。


関連エントリ




参考URL




付録


このエントリで使用したLTspiceのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab 常微分方程式 ode 数値積分 単振り子 

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRmachikaneyamaScilabKKRPSoCOPアンプCPAPIC強磁性モンテカルロ解析常微分方程式トランジスタode状態密度インターフェースecalj定電流スイッチング回路PDS5022DOS半導体乱数シェルスクリプトレベルシフトHP6632Aブレッドボード分散関係温度解析トランジスタ技術R6452A可変抵抗I2Cセミナー確率論反強磁性非線形方程式ソルバ絶縁偏微分方程式バンド構造熱設計数値積分バンドギャップカオスA/DコンバータフォトカプラシュミットトリガGW近似LEDLM358ISO-I2C三端子レギュレータ数値微分サーボ直流動作点解析カレントミラーマフィンティン半径TL431PC817C発振回路74HC4053USBアナログスイッチbzqltyFFTチョッパアンプ2ちゃんねる補間量子力学開発環境電子負荷標準ロジックパラメトリック解析アセンブラ基本並進ベクトルブラべ格子単振り子BSchLDAイジング模型繰り返しMaximaキュリー温度位相図状態方程式失敗談スピン軌道相互作用六方最密充填構造相対論FET抵抗コバルト不規則合金TLP621ewidthGGAQSGWgfortranランダムウォークラプラス方程式スイッチト・キャパシタcygwin熱伝導SMPスレーターポーリング曲線三角波格子比熱LM555条件分岐TLP552MCUNE555UPSTLP521QNAPマントルテスタFXA-7020ZR過渡解析詰め回路ガイガー管ダイヤモンド自動計測Writer509データロガー固有値問題VESTAスーパーセルOpenMP差し込みグラフ平均場近似起電力awk仮想結晶近似VCAubuntufsolveブラウン運動熱力学第一原理計算井戸型ポテンシャルシュレディンガー方程式面心立方構造fccウィグナーザイツ胞interp12SC1815L10構造非線型方程式ソルバFSMキーボードTeX結晶磁気異方性初期値OPA2277化学反応等高線ジバニャン方程式ヒストグラム確率論三次元フィルタRealforcePGAフェルミ面正規分布固定スピンモーメント全エネルギースワップ領域リジッドバンド模型edeltquantumESPRESSOルチル構造岩塩構造二相共存ZnOウルツ鉱構造BaOフォノンデバイ模型multiplotgnuplotc/aノコギリ波合金クーロン散乱ハーフメタル半金属CapSenseマンデルブロ集合マテリアルデザインSICGimpCK1026MAS830L円周率トランスPIC16F785凡例線種シンボルLMC662ヒストグラム不規則局所モーメント文字列疎行列TS-110TS-112Excel直流解析等価回路モデル入出力トラックボールPC軸ラベルAACircuitP-10フラクタル境界条件連立一次方程式Ubuntuifortパラメータ・モデルspecx.f関数フィッティング最小二乗法Crank-Nicolson法陰解法日本語EAGLEMBEグラフの分割負帰還安定性ナイキスト線図熱拡散方程式HiLAPW両対数グラフ片対数グラフ縮退

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ