선형미분방정식(Linear Differential Equations)
다음 식 1은 가장 높은 차수가 1차 미분을 포함하는 전형적인 선형 1계 미분방정식입니다. 기본적으로 이 형태의 방정식을 풀기 위해서는 좌항 전체를 적분 가능한 형태로 전환해 줍니다.예)
다음 미분방정식의 해를 결정합니다.
t, C=symbols('t C') ans=(integrate(exp(0.196*t)*9.8, t)+C)/exp(0.196*t); ans
위 결과는 sympy의 dsolve()함수를 적용한 결과로 확인할 수 있습니다.
v=Function('v')(t) eq=Eq(v.diff(t), 9.8-0.196*v);eq
sol=dsolve(eq, v); sol
위 예의 초기조건 v(0)=8
C1=solve(Eq(ans.subs(t, 0), 8), C); C1
[-42.0000000000000]
dsolve(eq, v, ics={v.subs(t, 0):8})
예)
다음의 미분방정식의 해를 결정합니다.
x=symbols('x') mu=exp(integrate(tan(x), x)); mu
위 식을 정리하면
integrate(2*cos(x)*sin(x)-sec(x)**2, x)
그러므로 위 식을 정리하면
x=symbols('x') y=Function('y')(x) eq=Eq(y.diff(x)+tan(x)*y, 2*cos(x)**2*sin(x)-sec(x));eq
genSol=dsolve(eq, y) simplify(genSol)
genSol.rhs
sol=dsolve(eq, y, ics={y.subs(x, pi/4):3*sqrt(2)}); sol
sol.subs(x, 0).evalf(4)
y(0)=6.5
sol.rhs.subs(x, 0).evalf(4)
6.5
plt.figure(dpi=100) a=np.linspace(0, 20, 100) b=np.array([float(sol.rhs.subs(x, i).evalf(4)) for i in a]) plt.plot(a, b) plt.show()
예)
t=symbols('t') y=Function('y')(t) eq=Eq(t*y.diff(t)+2*y, t**2-t+1);eq
dsolve(eq, y, ics={y.subs(t, 1): Rational(1,2)})
예)
t=symbols('t') y=Function('y')(t) eq=Eq(y.diff(t)-2*y/t, t**4*sin(2*t)-t**2+4*t**3) dsolve(eq, y, ics={y.subs(t, pi):3*pi**4/2})
댓글
댓글 쓰기