用于Python模块中的循环
我在为一个隐式格式写一个函数,用来解一个特殊的微分方程。函数如下所示:用于Python模块中的循环,python,function,module,for-loop,numpy,Python,Function,Module,For Loop,Numpy,我在为一个隐式格式写一个函数,用来解一个特殊的微分方程。函数如下所示: 将numpy导入为np def方案(N,T): 隐式格式的y=np.zeros(N+1)#数组 h=T/N#步长 对于范围(N)中的i: y[i+1]=y[i]+h*(1+4*y[i]) 打印y 我保存文件,然后以通常的方式导入它,但是当我运行scheme函数时,y=[0…0]其中…是N-1零。这些值似乎丢失在for循环的范围内 如果我改为在解释器中编写整个函数(在我的例子中是Spyder),那么一切都会正常工作 为什么从
将numpy导入为np
def方案(N,T):
隐式格式的y=np.zeros(N+1)#数组
h=T/N#步长
对于范围(N)中的i:
y[i+1]=y[i]+h*(1+4*y[i])
打印y
我保存文件,然后以通常的方式导入它,但是当我运行scheme函数时,y=[0…0]
其中…
是N-1
零。这些值似乎丢失在for循环的范围内
如果我改为在解释器中编写整个函数(在我的例子中是Spyder),那么一切都会正常工作
为什么从模块导入函数时不起作用
h = T/N
是否可能T
和N
都是整数和T
?在这种情况下,h=0
(并且y
保持全零),因为它是一个整数除法(1/2==0
)
试着把这条线换成
h = 1. * T / N
看看结果
y[i+1] = y[i] + h*(1+4*y[i])
可以重写为
y[i+1] = y[i] + h + 4 * h * y[i]
^^^
这意味着对于y[i]=0
,新的y[i+1]
将是h
。如果整数除法T/N
使其为零,则得到的结果就是零
是否可能T
和N
都是整数和T
?在这种情况下,h=0
(并且y
保持全零),因为它是一个整数除法(1/2==0
)
试着把这条线换成
h = 1. * T / N
看看结果
y[i+1] = y[i] + h*(1+4*y[i])
可以重写为
y[i+1] = y[i] + h + 4 * h * y[i]
^^^
这意味着对于
y[i]=0
,新的y[i+1]
将是h
。如果整数除法T/N
使其为零,则得到的结果就是零。通常,如果在python中除法两个整数,则整数也将向负无穷大舍入。
所以
在您的示例中,如果T和N是整数且Tfloat(1)/3 == 0.333
就你而言:
h = float(T)/N
虽然不熟悉Spyder,但快速查看文档表明,它是为科学家设计的。
可能这个解释器总是使用浮点除法。通常,如果在python中对两个整数进行除法,那么整数也将向负无穷大舍入。 所以 在您的示例中,如果T和N是整数且T
float(1)/3 == 0.333
就你而言:
h = float(T)/N
虽然不熟悉Spyder,但快速查看文档表明,它是为科学家设计的。
可能这个解释器总是使用浮点除法。
y
在每次调用scheme
时都会初始化;这完全是意料之中的。@莱姆,你所说的值在for循环的范围内丢失是什么意思?y
在每次调用scheme
时都会初始化;这完全是意料之中的。@lame,您所说的在for循环的范围内丢失值是什么意思?