質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

二元連立一階微分方程式と二階微分方程式のコラボ

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 942

score 6

前提・実現したいこと

二元連立一階微分方程式を関係式として持つ変数を含む、二階微分方程式を四元連立一階微分方程式として解きたい。

発生している問題・エラーメッセージ

二元連立一階微分方程式は解かれているが、二階微分方程式だけ解けていないようです。エラーは出ていませんが二階微分方程式の方の変数(コード中ではx1)と時間tのグラフも一直線で、x1の値も全て同じ値になっていて明らかにおかしいのです。

何が起こっているのか、どうすればよいのか、どなたかアドバイスお願い致します。

エラーメッセージ

該当のソースコード

import math
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt



t_min = 0.0
t_max = 10**4


N = 10**4


def func(u, t, k, n, a, e):

    r = u[0]
    f = u[1]
    x1 = u[2]             # γ
    x2 = u[3]             # dγ/dt

    drdt = k*e*np.sin(f)
    dfdt = k*(1+e*np.cos(f))/r
    dx1dt = x2
    dx2dt = -0.02*n*n*pow(a/r, 3)*np.sin(2*x1-2*f)

    return [drdt, dfdt, dx1dt, dx2dt]



if (__name__ == '__main__'):

    t = np.linspace(t_min, t_max, N)  # 時間刻み

    n = 200/360       # 平均運動 n≡2π/T ~200, 100, 50, etc...[°/日]
    a = 4*10**6        # 衛星の軌道長半径 [km]
    e = 0.1
    k = n*a*pow(1-e*e, -1/2)

    u0 = [a, 0.0, 0.0, 1.0]     # r,f,γ,dγ/dtの初期値

    u = odeint(func, u0, t, args=(k, n, a, e))

試したこと

補足情報(FW/ツールのバージョンなど)

Python3をAnacondaで使っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

t_max = 10**2
N = 10**6

刻み幅が大きいことが原因

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/24 01:12

    GradMaisonTokyo 様
    またも助けて頂きありがとうございます!見たいものによってどれほどのスケールにするかが大事だということは漠然とわかってはいるのですが、結局具体的な値はどうするかとなると経験不足もあるのか見当がつきません。今後もいろいろと試しながら慣れていこうと思います。

    キャンセル

  • 2020/01/24 07:21

    計算時間幅 t_maxを出来る限り小さくとることがポイントです。

    キャンセル

  • 2020/01/25 19:13

    GradMaisonTokyo 様
    そうなんですか…!!このコードは惑星・衛星の相互作用による衛星の周回運動への影響を見るというの課題だったので時間もつい長くとらないといけないと思ってしまったのですが、そういうわけでもなかったのかも知れません(ケースバイケースかも知れませんが)。勉強になります。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る