相关疑难解决方法(0)

有没有办法在python中求解耦合微分方程组?

我一直在研究sympy和scipy,但是找不到或弄清楚如何求解耦合微分方程组(非线性,一阶).

那么有没有办法解决耦合微分方程?

方程的形式如下:

V11'(s) = -12*v12(s)**2
v22'(s) = 12*v12(s)**2
v12'(s) = 6*v11(s)*v12(s) - 6*v12(s)*v22(s) - 36*v12(s)
Run Code Online (Sandbox Code Playgroud)

初始条件为v11(s),v22(s),v12(s).

python numpy sympy scipy enthought

17
推荐指数
2
解决办法
4万
查看次数

将sympy表达式转换为numpy数组的函数

我有一个同意写的ODE系统:

from sympy.parsing.sympy_parser import parse_expr

xs = symbols('x1 x2')
ks = symbols('k1 k2')
strs = ['-k1 * x1**2 + k2 * x2', 'k1 * x1**2 - k2 * x2']
syms = [parse_expr(item) for item in strs]
Run Code Online (Sandbox Code Playgroud)

我想这转换成向量量值函数,接受的x值,第k值的1D numpy的阵列的一维阵列numpy的,返回在那些点评估的方程的一个一维阵列numpy的.签名看起来像这样:

import numpy as np
x = np.array([3.5, 1.5])
k = np.array([4, 2])
xdot = my_odes(x, k)
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西的原因是给这个功能scipy.integrate.odeint,所以它需要快.

尝试1:潜艇

当然,我可以写一个包装器subs:

def my_odes(x, k):
    all_dict = dict(zip(xs, x))
    all_dict.update(dict(zip(ks, k)))
    return np.array([sym.subs(all_dict) for sym in syms])
Run Code Online (Sandbox Code Playgroud)

但这是超级慢的,特别是对于我的真实系统,它更大,并且运行了很多次.我需要将此操作编译为C代码.

尝试2:theano

我可以通过sympy …

python numpy sympy scipy

12
推荐指数
1
解决办法
3603
查看次数

标签 统计

numpy ×2

python ×2

scipy ×2

sympy ×2

enthought ×1