Юлия интегрирует дифференциальные уравнения: Ошибка метода: нет соответствия метода

Я пытаюсь векторное дифференциальное уравнение в Юлии. Но я застрял в следующем предупреждении об ошибке:

MethodError: нет подходящих методов hDerivative(::Array{Float64,1},::Nothing, >::Float64) Ближайшими кандидатами являются: hDerivative(::Any,::Any) в In[8]:3 hDerivative(:: Любой) в В [13]:3

Я в основном не уверен в синтаксисе функции "hDerivative". Я попытался вернуть дифференциал, но также попытался принять "timederiv" в качестве аргумента функции hDerivative, аналогично тому, что я видел в tuturials о дифференциальных уравнениях в Julia, хотя это выглядит немного странно (я привык к python),

Это пример кода, который я использовал:

using DifferentialEquations

N=10
J=randn(Float64,N,N)
g=1

function hDerivative(h,timederiv)
    timederiv=zeros(Float64,N)
    for i=1:length(h)
        for j=1:length(h)
            timederiv[i]=timederiv[i]+J[i,j]*tanh(h[j])            
        end
    end  
end

hinit=zeros(Float64,N)
tspan=(0.0,1.0)
prob = ODEProblem(hDerivative,hinit,tspan)
solve(prob)

Может кто-нибудь мне помочь?

1 ответ

Решение

Комментарий @LutzL совершенно прав, что проблема с этим кодом состоит в том, что он не определяет производную функцию, как упомянуто в документации. Вместо этого следующий код, который использует (du,u,p,t) Форма работы:

using DifferentialEquations

N=10
J=randn(Float64,N,N)
g=1

function hDerivative(timederiv,h,p,t)
    for i=1:length(h)
        timeseriv[i] = 0
        for j=1:length(h)
            timederiv[i]=timederiv[i]+J[i,j]*tanh(h[j])            
        end
    end  
end

hinit=zeros(Float64,N)
tspan=(0.0,1.0)
prob = ODEProblem(hDerivative,hinit,tspan)
solve(prob)
Другие вопросы по тегам