Sympy求解二阶常微分方程f''(x)+k*f(x)=0结果异常,求排查
常微分方程f''(x)+kf(x)=0求解问题排查建议
核心问题分析
你的代码存在几处关键错误,导致无法得到预期的正弦余弦形式解,且代入边界条件后结果为0:
排查与修正步骤
未定义目标微分方程
代码中直接使用Eq1.subs(k,-k),但Eq1从未被定义。必须先构建你要解的方程:Eq1 = Eq(Fxx + k*f(x), 0)错误替换k的符号
你当前调用dsolve(Eq1.subs(k,-k)),实际求解的是f''(x) - kf(x) = 0,该方程的解为指数/双曲函数形式,而非正弦余弦。若要得到三角函数解,直接对原方程Eq1调用dsolve即可(当k>0时,sympy会自动给出正弦余弦形式的通解)。边界条件未正确应用
你仅定义了BC1=0和BC2=L,但未明确边界条件的位置(如x=0时f(x)=BC1),也未将其代入通解求解常数C1、C2。示例代码如下:# 求通解 general_sol = dsolve(Eq1, f(x)) # 假设边界条件为x=0时f(x)=BC1,x=L时f(x)=BC2 constants = solve([general_sol.subs(x, 0).rhs - BC1, general_sol.subs(x, L).rhs - BC2], (C1, C2)) # 代入常数得到特解 particular_sol = general_sol.subs(constants)若边界条件为齐次(如两端均为0),仅当k取特定本征值(如
k=(nπ/L)^2,n为正整数)时才有非零解,否则解为0是正常结果。移除冗余代码
代码中g(t)、Gtt、Gt等变量未被使用,可直接删除以简化代码。
完整修正示例代码
from sympy import symbols, Function, Eq, dsolve, solve, display x, k, L, C1, C2 = symbols("x k L C1 C2") f = symbols('f', cls=Function) # 构建二阶导数与目标微分方程 Fxx = f(x).diff(x, x) Eq1 = Eq(Fxx + k*f(x), 0) # 求解通解 general_sol = dsolve(Eq1, f(x)) display("通解", general_sol) # 定义并应用边界条件(示例:x=0时f(x)=0,x=L时f(x)=0) BC1 = 0 BC2 = 0 constants = solve([general_sol.subs(x, 0).rhs - BC1, general_sol.subs(x, L).rhs - BC2], (C1, C2)) particular_sol = general_sol.subs(constants) display("特解", particular_sol)
内容的提问来源于stack exchange,提问作者Lopehert
相关产品推荐
相关产品推荐

