我有一段Python代码(我只放了一部分):
from __future__ import division
import numpy as np
from pylab import *
from numpy import linalg as LA
a = [[5/36,2/9-sqrt(15)/15,5/36-sqrt(15)/30],[5/36+sqrt(15)/24,2/9,5/36-sqrt(15)/24],[5/36+sqrt(15)/30,2/9+sqrt(15)/15,5/36]]
treshold = 10**(-12)
h = 0.01
def sho(x, t=None):
k = 1.
t = float(t)
x = array(x)
return array([ x[1],
- x[0]])
def iterate_Z(func,Z,y,h,t):
crit = 1
Z = transpose(Z)
while crit > treshold:
T = []
for i in range(len(Z)):
sum = 0
for j in range(len(Z)):
sum = sum + a[i][j]*f(y[-1]+Z[j],t[-1])
T = T + [h*sum]
crit = norm(Z-T)
Z = np.array(T)
return(Z)
iterate_Z(sho,[[0,0,0],[0,0,0]],[[1,2],[2,3]],0.01,[0,1])
所以我要做的是用辛龙格库塔解简谐振子。(我使用的公式来自一本书,我检查了一下,并正确地复制了它们)。所以在iterate_Z中,我为Z选取一些初始值,然后进行一些迭代,以便得到一个更好的值,从这个值进入Runge-Kutta的下一步。当我运行程序(并在函数中添加打印)时,它会给出几个步骤的输出,然后我得到以下错误:
File "mtrand.pyx", line 2093, in mtrand.RandomState.f (numpy/random/mtrand/mtrand.c:23649)ValueError: dfnum <= 0
指向这条线:
sum = sum + a[i][j]*f(y[-1]+Z[j],t[-1])
有人能告诉我这个错误是什么意思吗?我怎样才能纠正它?谢谢您!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐