Julia 茱莉亚及;函数-命名错误

Julia 茱莉亚及;函数-命名错误,julia,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.

我不明白为什么下面的代码片段在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元素,u在0.0和2*pi范围内的每个x值处计算。

下次请发布错误消息,并在之前对其进行详细说明,以便您可以尝试自己发现错误

我真的不知道
演算
软件包,但似乎你用错了。您的
phi
是一个数字,而不是一个函数。你不能只从一个数字上求导数。换成

phi = x -> exp( -x^2 / 4.0*nu ) + exp( -(x - 2.0*pi)^2 / 4.0*nu ) 
然后在参数
x
处调用
phi
导数
,因此
phi(x)
导数(phi,x)
dphi_x(x)
。由于我对
calculation
包了解不多,您应该再次查看它的文档,以验证派生命令是否正是您想要的那样


额外说明:Julia中还有一些元素操作(类似于Matlab),可以将函数应用于整个数组。您也可以编写
init.(x,nu,t)
,而不是
[init(x0,nu,t)表示x中的x0]
,您是对的,我遇到的问题是由于在微积分包中不正确地使用了导数函数。将phi和dphi_dx的定义更改为
phi(x)=exp(-x^2/4.0*nu)+exp(-x-2.0*pi)^2/4.0*nu)
dphi_dx=导数(phi)
似乎解决了这个问题,因此当我将值x0传递给函数init时,u的计算结果是正确的。谢谢你指出我的错误。