どのように適切にscipy.integrate.Radauを実装するには?

アンドレイ:

(私はこれまでのところ、私はいずれかを発見していない、例にしても、リンクをapreciateます。)

私が使用しようとしていますRadauを二階微分方程式を解くためにscipy.integrateから。今の私は、私はそれが(今のところ失敗して)どのように動作するかuderstandできるように、単純な例をしようとしています。

私は、次の式を持っていることをみましょうと言います:

D ^ 2Y / DT ^ 2 = C、

その手段は、Y =(CことT ^ 2)/ 2 + Bの T。

レッツ言う、例えば、Y(1)= 1とC Iをt = 10のためのyの値を検索すること= 2.レッツ・言います。

これは私のコードです:

from scipy.integrate import Radau
import numpy as np

C = 2.0
y = np.zeros(2)

def fun(t, y):
  #y[0] = C*t
  y[1] = C
  return y

t0 = 1.0
y0 = np.array([1., 1.])
t_bound = 10.0

eq = Radau(fun, t0, y0, t_bound)
print(eq.n)

while(True):
  print(eq.t)
  print(eq.y)
  print(eq.status)
  if eq.status == 'finished':
    break
  eq.step()

出力は間違っています。(Iコメントを解除した場合の1行コメントというfun定義が、それはまた、間違った答えを与える。しかし、私は、私も、右?私は通常、この値を知っていないことをソルバー伝える必要はないはずだと思います。)

私は私の最大の問題は、私はとして渡されるべきか本当にわからないということだと思いますfunドキュメントは、私がその一次微分がY [1]等のY [0]は、第二の導出であるべきであると考えて、それは、システムの右側でなければならないと言います

何が私が間違っているのでしょうか?これはどのように実装すべきですか?

ルッツレーマン:

あなたが解決されているATM

y0' = y0,  y0(1)=1
y1' = 2,   y1(1)=1

これは解決策を持っているy0(t)=exp(t-1)し、y1(t)=2*t-1それはあなたが望むものは確かではありません。あなたは、最初の注文システムをしたいです

y0' = y1
y1' = C

そう、あなたが必要とします

def fun(t,y): return [y[1], C]

次いで、溶液はあるy1(t)=C*t+B=2*t-1y0(t)=0.5*C*t^2+B*t+A=t^2-t+1し、統合はで正しく終わりますeq.y = [91. 19.]

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377812&siteId=1