У меня проблема со следующей структурой:
struct OdeSol{typ, rng, n}
t::rng
x::Array{typ}
v::Array{typ}
end
OdeSol(typ, rng, n) = OdeSol(rng, Array{typ}(undef, n, length(rng)), Array{typ}(undef, n, length(rng)))
где t_range=tlim[1]:Δt:tlim[2]
, typeof(x0[1])
— это Float64
, а size(x0)[1]
— целое число (size(x0)[1]
=2
).
Когда я запускаю sol = OdeSol(typeof(x0[1]), t_range, size(x0)[1])
, я получаю следующую ошибку:
MethodError: no method matching Array{0.0:0.01:10.0,N} where N(::UndefInitializer, ::Array{Float64,2}, ::Int64)
Closest candidates are:
Array{0.0:0.01:10.0,N} where N(::UndefInitializer, !Matched::Int64, ::Int64) where T at boot.jl:421
Array{0.0:0.01:10.0,N} where N(::UndefInitializer, !Matched::Int64, ::Int64, !Matched::Int64) where T at boot.jl:422
Array{0.0:0.01:10.0,N} where N(::UndefInitializer, !Matched::Integer, ::Integer) where T at baseext.jl:17
...
Stacktrace:
[1] OdeSol(::StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}, ::Array{Float64,2}, ::Array{Float64,2}) at ./In[10]:8 (repeats 2 times)
[2] top-level scope at In[11]:1
[3] include_string(::Function, ::Module, ::String, ::String) at ./loading.jl:1091
Кто-нибудь может мне помочь?
Вы также действительно хотите, чтобы эти аннотации типа Array были Vector, иначе тип поля будет абстрактным, поскольку количество измерений не указано.
Кажется, вы смешиваете параметрические типы со значениями полей в struct
.
Кроме того, стоит использовать заглавные буквы для имен типов.
Глядя на параметры, также кажется, что вы ищете матрицы (то есть двумерные массивы)/
Возможно, вы имеете в виду следующее:
struct OdeSol{T, R}
t::R
x::Matrix{T}
v::Matrix{T}
end
OdeSol{T,R}(rng::R, n) where {T,R} = OdeSol{T,R}(rng, Matrix{T}(undef, n, length(rng)), Matrix{T}(undef, n, length(rng)))
А теперь пример использования:
julia> OdeSol{Int, Vector{Int}}([1,2,3],4)
OdeSol{Int64,Array{Int64,1}}([1, 2, 3], [0 0 0; 0 0 0; 0 0 0; 0 0 0], [0 0 0; 0 0 0; 0 0 0; 0 0 0])
Ваша ошибка не соответствует тому, что вы утверждаете. Вы передаете диапазон как
top
, матрицу какrng
и матрицу как вашn
. Ни один из этих типов не соответствует тому, с чем вы его называете. Это вообще не имеет ничего общего с определениемstruct
; сделайте шаг назад и убедитесь, что вы знаете, что такое каждый аргумент.