2017-11-26 3 views
1

sympyを使って微分方程式を解くことを試みているので、ここに来ました。残念ながら、これまで成功していませんでした。私がこれまでにやったことです:sympy微分方程式の方程式

1)、微分方程式を挿入する値を割り当てて、それを解決:その後

import sympy as sp 
from IPython.display import display 
import numpy as np 
import matplotlib.pyplot as plt 
sp.init_printing() 

F0=sp.symbols('F0') 
Wd=sp.symbols('Wd') 
A=sp.symbols('A') 
B=sp.symbols('B') 
x=sp.Function('x') 
t=sp.symbols('t') 

eq=sp.Eq(x(t).diff(t,2)+A*x(t).diff(t)+(B**2)*x(t),F0*sp.cos(Wd*t)) 
display(eq) 

Equation 1

sol=sp.dsolve(eq,x(t)).rhs 
display(sol) 

Contents of <code>sol</code>

2)私はすべての宣言されたシンボルの値を代入し、初期条件を設定して式をクリアできるようにします

consts = {A: 0.1, 
     B: 0.01, 
     F0: 0.0, 
     Wd: 0.01, 
     } 

sol=sp.simplify(sol.subs(consts)) 
display(sol) 

x0=5 

#to evaluate initial conditions - x(0) 
cnd0=sp.Eq(sol.subs(t,0),x0) 
C1 = sp.symbols("C1") 
sol_c1=sp.solve([cnd0],(C1)) 

display(sol_c1) 

C2s=sp.simplify(sol.subs(sol_c1)) 
display(C2s) 

C2s

3)それから最初誘導体に同様の処理を繰り返します。この点は、x(0)とX '(0)からC1とC2の値を計算することです。ここでは、コード

sold=sp.diff(sol,t) 
display(sold) 

xd0=0 
#to evaluate initial conditions - derivative x'(0) 
cnd1=sp.Eq(sold.subs(t,0),xd0) 
sold_c1=sp.solve([cnd1],(C1)) 

display(sold_c1) 

C2d=sp.simplify(sol.subs(sold_c1)) 
display(C2d) 

C2d

4)私はC2類とC2dとして式を構築し、最終的にはC2をtの依存している方程式を得るためにそれを解決しようとすると、Pythonはエラーをスローで行きます。私が間違っていることを教えてください。

ありがとうございます!

答えて

2

F0 = 0を設定すると、微分方程式は同次方程式になります。 C1およびC2は、のインテグレーションである。だから、私は彼らがtの機能でなければならないとは思わない。 x(0)x'(0)の2つの初期条件は、我々が解決できるC1C2に2つの式を与えます。

import sympy as sp 
from IPython.display import display 
import numpy as np 
import matplotlib.pyplot as plt 
sp.init_printing() 

F0=sp.symbols('F0') 
Wd=sp.symbols('W_d') 
A=sp.symbols('A') 
B=sp.symbols('B') 
x=sp.Function('x') 
t=sp.symbols('t') 

eq=sp.Eq(x(t).diff(t,2)+A*x(t).diff(t)+(B**2)*x(t),F0*sp.cos(Wd*t)) 
display(eq) 

sol=sp.dsolve(eq,x(t)).rhs # x(t) 
display(sol) 

sold=sp.diff(sol,t) # x'(t) 
display(sold) 

consts = {A: 0.1, 
     B: 0.01, 
     F0: 0.0, 
     Wd: 0.01, 
     } 

sol=sp.simplify(sol.subs(consts)) 
display(sol) 

sold=sp.simplify(sold.subs(consts)) 
display(sold) 

x0=5 
#to evaluate initial conditions - x(0) 
cnd0=sp.Eq(sol.subs(t,0),x0) 

xd0=0 
#to evaluate initial conditions - derivative x'(0) 
cnd1=sp.Eq(sold.subs(t,0),xd0) 

c1c2 = sp.linsolve([cnd0,cnd1],sp.var('C1,C2')) 
display(c1c2) 

私は微分方程式について何か誤解しているかどうか教えてください。

+0

こんにちは。はい、それはまさに私が探していたものです。私はC1とC2と本当に混同されましたが、あなたの答えは私の質問をクリアしました。どうもありがとう ! –

+0

あなたは大歓迎です。 –

関連する問題