我不明白为什么下面的代码片段在Julia中返回NoMethodError
using Calculus
nx = 101
nt = 101
dx = 2*pi / (nx - 1)
nu = 0.07
dt = dx*nu
function init(x, nu, t)
phi = exp( -x^2 / 4.0*nu ) + exp( -(x - 2.0*pi)^2 / 4.0*nu )
dphi_dx = derivative(phi)
u = ( 2.0*nu /phi )*dphi_dx + 4.0
return u
end
x = range(0.0,stop=2*pi,length=nx)
t = 0.0
u = [init(x0,nu,t) for x0 in x]
我在这里的目的是使用函数init计算的值填充名为u的数组的元素。 u数组应包含nx个元素,每个x值在0.0和2 * pi之间的范围内计算u。
答案 0 :(得分:2)
下次,请再次发布错误消息并进行详细处理,以便您尝试自己发现错误。
我不太了解Calculus
软件包,但看来您使用的是错误的。您的phi
是一个数字,而不是一个函数。您不能只从一个数字中得到一个导数。将其更改为
phi = x -> exp( -x^2 / 4.0*nu ) + exp( -(x - 2.0*pi)^2 / 4.0*nu )
an然后在参数phi
处调用derivative
和x
,因此phi(x)
和derivative(phi,x)
或dphi_x(x)
。由于我对Calculus
软件包了解不多,因此您应该再次查看其文档,以验证派生命令完全按照您的意愿进行操作。
一点额外的功能:Julia中还有一些元素级操作(例如类似于Matlab)将函数应用于整个数组。除了[init(x0,nu,t) for x0 in x]
,您还可以编写init.(x,nu,t)
。