【问题标题】:2nd order ODE function not callable Sympy二阶 ODE 函数不可调用 Sympy
【发布时间】:2021-06-21 06:44:51
【问题描述】:

我是 Python 编程的新手,我已经在 sympy 库上苦苦挣扎了 2 天。

我一直在 stackoverflow 上浏览,但找不到答案。

我想求解具有初始条件的二阶微分方程。

import sympy as sp 
import numpy as np
import math

#setting parameters 

I1 = 0.0004 #m4
E = math.pow(40,9) #Pa
RA = 875 #N
l1 = 4 #m
r = E*I1

#declaration of symbolique variable and function 

x = sp.symbols('x') 
y1 = sp.Function('y1')

#equation and solving

diffeq1 = sp.Eq(sp.diff(y1(x),x,2), (RA*x)/r)

y1_sol = sp.dsolve(diffeq1, y1(x))

print('y1_sol =', y1_sol)

我有两个问题:

  1. 据说 sympy.Function 是不可调用的,即使程序可以运行并给我正确的结果。

  2. 尽管到目前为止我已经尝试过所有初始条件的语法,但它们都不起作用(在我看来,这可能与第一个问题有关)。 您能否向我发送一份有关其工作原理的清晰文档。

Sympy 版本:1.6.2

感谢 stackoverflow 社区。​​p>

【问题讨论】:

  • 当您尝试运行此代码时收到的错误消息是什么?这段代码在我这边运行良好
  • 代码运行良好,但我收到警告“y1 不可调用”。我不知道它到底是什么意思。

标签: python sympy ode


【解决方案1】:

我没有看到你提到的 wanring,但我使用的是最新的 sympy。

二阶 ODE 的 IC 语法有点奇怪:

In [28]: dsolve(diffeq1, y1(x), ics={y1(0): 1, y1(x).diff(x).subs(x, 0): 0})
Out[28]: 
                            3       
           278155008951823⋅x        
y₁(x) = ──────────────────────── + 1
        200000000000000000000000 

这取决于您如何定义 y1,例如:

In [38]: x = Symbol('x')

In [39]: y1 = Function('y1')(x)

In [40]: y1p = y1.diff()

In [41]: y1pp = y1p.diff()

In [42]: eq = Eq(y1pp, RA*x/r)

In [43]: dsolve(eq, y1, ics={y1.subs(x, 0): 1, y1p.subs(x, 0): 0})
Out[44]: 
                            3       
           278155008951823⋅x        
y₁(x) = ──────────────────────── + 1
        200000000000000000000000 

ics 参数在文档中(简洁地)进行了解释: https://docs.sympy.org/latest/modules/solvers/ode.html#sympy.solvers.ode.dsolve

SymPy 的文档可以改进,但我建议在 stackoverflow 之前先查看那里。

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多