我刚开始使用Python,有一堆代码我想从Matlab转换过来。我从一个简单的耦合微分方程开始,似乎不知道我做错了什么。看起来第二个微分方程几乎给了我合适的结果,但是第一个方程在整个时间跨度内都保持在初始状态。第一幅图像是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')
既然答案是这样的:
注意整数运算
如果您是从一种默认情况下不这样做的语言进行移植,您可能会惊讶于
等等。尝试将所有常量更改为双倍(
5
->;5.0
,等等),看看是否有帮助。你知道吗EDIT:@BenDundee指出python将把语法转换为
/
,意思是“实数除法”,整数除法是用//
操作符指定的。现在可以使用from __future__ import division
行切换到该行为,这也应该可以解决问题。你知道吗我只想指出,这个行为已经从Python2变成了Python3。如果需要Python3行为,可以将
from __future__ import division
添加到文件的顶部。你知道吗无论如何,这并没有给@zebediah49的答案增加任何内容(即,(s)他应该获得投票权),我只是需要比评论中更多的空间:)
相关问题 更多 >
编程相关推荐