gpt4 book ai didi

python - 在 Python 中为 ODE 的耦合系统重现 Matlab 结果时出现问题

转载 作者:行者123 更新时间:2023-11-28 21:23:05 25 4
gpt4 key购买 nike

我刚开始使用 Python,有一堆代码想从 Matlab 转移过来。我从一个简单的耦合 diff eq 开始,似乎无法弄清楚我做错了什么。看起来第二个 diff eq 几乎给我适当的结果,但第一个方程在整个时间跨度内都保持在初始状态。第一张图片是 Python 结果,第二张图片是 Matlab 的正确结果。

1) 2)

from scipy.integrate import odeint
from pylab import *

minfH_ab = lambda v: 1/(1 + exp((v+70)/6))
taumH_ab = lambda v: 272 + 1499/(1 + exp(-(v+42.2)/8.73))


Csn = 9
I_ab_sn = 0
gL_ab_sn = 0.045
El_ab_sn = -50
gH_ab = 0.054
Eh_ab = -20

def dy_dt(y, t):
dy1 = (1/Csn)*(I_ab_sn -((gH_ab*y[1]*(y[0]-Eh_ab))+(gL_ab_sn*(y[0]-El_ab_sn))))
dy2 = (minfH_ab(y[0])-y[1])/taumH_ab(y[0])
return [dy1, dy2]


t = linspace(0,1000,10000)
y_init = [-50, .0004]

sol = odeint(dy_dt, y_init, t)
S0 = sol[:, 0]
S1 = sol[:, 1]

figure()
plot(t, S0)
xlabel('time')
ylabel('voltage')
title('H & L Current')

最佳答案

因为这就是答案:

注意整数运算。

如果您从默认情况下不执行此操作的语言移植,您可能会感到惊讶

x=50
y=6
z=5

x*y/z == 60
x*(y/z) == 50
x/y*z == 40
x*z/y == 41

等等。尝试将所有常量更改为 double 值(5 -> 5.0 等),看看是否有帮助。

编辑:@BenDundee 指出 python 将语法切换为 / 意思是“实数除法”,整数除法用 // 运算符指定。您现在可以使用 from __future__ import division 行切换到该行为,这也应该可以解决问题。

关于python - 在 Python 中为 ODE 的耦合系统重现 Matlab 结果时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18001180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com