2012-04-25 22 views
2

振り子の初期角度(x)、重力加速度(g)、線の長さ(l)、および時間ステップを考慮して、振り子運動の微分方程式を解こうとしていますh)。私はオイラー法を使ってこれを試してみました。しかし、今私はGSLで実装されたRunge-Kuttaメソッドを使用します。私はgslのマニュアルから学習を実装しようとしましたが、私は1つの問題で立ち往生しています。振り子は止めたくありません。私が最初の角度1radで始めるとしましょう。何回スイングしても、常に1radでピークの傾きがあります。ここで私はGSLにそれを与えるために使用する方程式や関数があります:振り子運動のためのODEを解決するGSL

x''(t) + g/l*sin(x(t)) = 0 

それを変換:

x''(t) = -g/l*sin(x(t)) 

と分解:

y(t) = x'(t) 
y'(t) = -g/l*sin(x(t)) 

それが十分でない場合はここでは、コードスニペットは、です私はプログラム全体を投稿することができます(それほど長くはありません)が、おそらくどこかに問題があります:

​​

パラメータglが関数に正しく渡されているので、すでにチェックしています。

+5

摩擦がない場合、これはまさにあなたが期待するべきことです。 –

+0

ええと、このように考えることはありませんでしたが、あなたはおそらく正しいでしょう。なぜそれを解決する他の方法(オイラー法を用いる)がそれを最終的に停止させるのか?多分私はどこかで間違いを犯しましたが、はい、あなたは完全に正しいと思います。他のプログラムが盗聴されているようですが、これはそうではありません。私はとてもばかげている...私はこのプログラムを最初に実行し、次にもう1つを実行すると、多分振り子の最終的な停止に影響されず、ここに書き込む前にそれを考えるようになるだろう。ありがとうございました! – Wojtek

+0

大きな質問です。前提は間違っていましたが、私はそれから多くを学びました!ありがとう! –

答えて

6

バートン・チッテンデン(Barton Chittenden)がコメントで指摘したように、振り子が摩擦のない状態で続けるべきです。これは予想されます。

オイラー法を使用するとゆっくりと停止する理由は、微妙で興味深い問題に触れています。物理的な振り子(理想的で摩擦のない)は、システム内のエネルギーが保存されているという性質を持っています。異なる統合スキームは、その特性を異なる程度に保持する。いくつかの統合スキームでは、システム内のエネルギーはとなり、となり、振り子はますます大きくなります。他の人とは、エネルギーが失われ、振り子は止まる。これらのいずれかが発生する速度は、メソッドの順序に部分的に依存します。より正確な方法はエネルギーをよりゆっくりと失うことが多い。

異なる統合スキームでシステムの全エネルギー(潜在的+動的)をプロットすることで、これを容易に確認できます。

最後に、シンプレクティックメソッドと呼ばれるこのようなシステムの特定の保存量を保持する統合メソッドの完全なサブフィールドがあります。

+0

うわー、それは素晴らしい説明です。私は先生に、なぜこれらの2つのプログラムが違うのか説明しているようです。オイラー法を使用するときに、このエネルギー損失について何かを見つけようとします。どうもありがとうございました! – Wojtek

関連する問題