提取齐次二阶线性 ODE 的两个函数解

问题描述 投票:0回答:1

我有一个齐次二阶 ODE,其通解是

ur(r) = C1*u1(r) + C2*u2(r)

如何通过分别设置

u1(r)
u2(r)
来获得
(C1=1, C2=0)
(C1=0, C2=1)
作为单独的函数?

这是我尝试过的(以及其他变体)

import IPython.display as disp
import sympy as sym
sym.init_printing(latex_mode='equation')

r = sym.symbols('r', real=True, positive=True)
ur = sym.Function('ur', real=True)
def Naxp(ur):
    return r**2 * sym.diff(ur(r), r, 2) + r * sym.diff(ur(r), r) - ur(r)
Naxp_ur = Naxp(ur)
EqNaxpur = sym.Eq(Naxp_ur)
#print('Radial ODE:')
#display(Naxp_ur)
ur_sol = sym.dsolve(Naxp_ur, ur(r))
ur_sol1 = ur_sol.rhs
#display(sym.Eq(ur(r), ur_sol1))

# I still have to find how to extract the two basis functions
#u1 = sym.Function('u1', real=True)
C1, C2 = sym.symbols('C1, C2', real=True)
u1 = ur_sol1.subs([(C1, 1), (C2, 0)])
print(u1)

我总是得到一个结果,就好像

subs
被忽略了

C1/r + C2*r
python sympy differential-equations
1个回答
1
投票

Sympy 无法识别它生成的常量与您生成的常量之间的相等性。这似乎是由于用

real=True
设置了常量。删除它,代码就可以工作了。

C1, C2 = sym.symbols("C1 C2")
print(ur_sol1.subs({C1:1, C2:0}))  # 1/r
print(ur_sol1.subs({C1:0, C2:1}))  # r

可能有一种方法可以提取常量并避免自己定义它们,但我不确定最好的方法。它可能涉及

ur_sol1.free_symbols
,但也会返回
r
。编辑: sympy 文档 似乎建议您自己创建变量,但可能还有更好的方法。

此外,您可能需要考虑设置 ODE 的初始条件以获得特定的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.