当前位置:  开发笔记 > 编程语言 > 正文

Sympy二阶颂歌

如何解决《Sympy二阶颂歌》经验,为你挑选了0个好方法。

我有一个简单的二阶ODE的同类解决方案,当我尝试使用Sympy求解初始值时,返回相同的解决方案.它应该替代y(0)和y'(0)并产生没有常数的解,但不能.这是设置方程的代码(它是弹簧平衡方程,k =弹簧常数,m =质量).我在其他地方使用的一些冗余符号,抱歉.

%matplotlib inline
from sympy import *
m,k, x,t,s,T, omega,A,B = symbols('m k x t s T omega A B',float=True)
a = symbols('a', positive=True)
f,y,g,H,delta,S=symbols('f y g H delta S',cls=Function)
Eq1 = Eq(m*diff(y(t),t,2)+k*y(t))
Eq1

结果是(正确):$ y {\ left(t\right)} = C_ {1} e ^ { - t\sqrt { - \frac {k} {m}}} + C_ {2} e ^ { t\sqrt { - \frac {k} {m}}} $

y(t)= C1e ^( - t√( - k/m))+ C2e ^(t√( - km)),也有y_n = c1.cos(√( - k/m)t)+ c2 .sin(√(-k /米)T).

当该方程被解析地求解并且使用具有omega = sqrt(-k/m)的正弦和余弦转换为解时,则c1 = y(0)并且c2 = y'(0)/ omega.因此,虽然解决方案部分涉及复数,但是,当然,dsolve只返回原始的齐次方程.我在y(0)和y'(0)处评估ODE的代码是:

Eq1_soln_IVP =dsolve(Eq1,y(t),x0=0, ics={y(0): a, y(t).diff(t).subs(t, 0): a})

我很欣赏dsolve可能无法通过分析处理这个IVP,但如果基于其他容量,我会感到惊讶.关于如何解决这个问题以及因此可以解决其他分析二阶问题的任何帮助都将非常感激.问题的核心是:

ics={y(0): a, y(t).diff(t).subs(t, 0): a}

所以Dietrich确认的解决方案是:

 #Create IVP for y(0)
 expr = Eq(Eq1_soln_IVP.rhs.subs(sqrt(-k/m),I*omega),y(0))
 #Create IVP for y'(0)
 expr2 = Eq(diff(y(t),t).subs(t,0),expr.lhs.diff(t))
 #Maps all free variables and solves for each where t = 0.
 solve([expr.subs(t,0),expr2.subs(t,0)])

虽然它是"一个"解决方案,但这似乎是一种非常复杂的方法来找到y(t)= y(0)cos(omega*t - phi)...它回答了关于这个求解器和直接的某些局限性的隐含问题.关于如何解决ics arg的问题.谢谢.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有