朱莉娅与函数-NoMethodError

时间:2019-08-17 17:07:01

标签: julia

我不明白为什么下面的代码片段在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。

1 个答案:

答案 0 :(得分:2)

下次,请再次发布错误消息并进行详细处理,以便您尝试自己发现错误。

我不太了解Calculus软件包,但看来您使用的是错误的。您的phi是一个数字,而不是一个函数。您不能只从一个数字中得到一个导数。将其更改为

phi = x -> exp( -x^2 / 4.0*nu ) + exp( -(x - 2.0*pi)^2 / 4.0*nu ) 

an然后在参数phi处调用derivativex,因此phi(x)derivative(phi,x)dphi_x(x)。由于我对Calculus软件包了解不多,因此您应该再次查看其文档,以验证派生命令完全按照您的意愿进行操作。

一点额外的功能:Julia中还有一些元素级操作(例如类似于Matlab)将函数应用于整个数组。除了[init(x0,nu,t) for x0 in x],您还可以编写init.(x,nu,t)