Ошибка с функцией Полифит Юлия - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно набрать код julia для моего недавно запущенного Phd, и у меня возникает эта ошибка при попытке использовать функцию polyfit из пакета Polynomials, которая действительно вызывает ошибки:

DomainError

Stacktrace:
 [1] polyfit(::StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}, ::Array{Int64,1}, ::Int64, ::Symbol) at /home/jrun/.julia/v0.6/Polynomials/src/Polynomials.jl:700 (repeats 2 times)

Я перепробовал все виды различных видов тестирования, но продолжаю получать его даже с помощью простого кода:

Pkg.add("Polynomials")
using Polynomials

x = []
for i in 1:9
  append!(x, i)
end
y = [1,2,3,4,3,4,2,3,1]
polyfit(x, y)

Кто-нибудь знает, что это значит?

Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Пожалуйста, включите в свой вопрос отдельный пример того, что мы можем воспроизвести сами.Также стоит указать значение versioninfo(), так как проблемы могут быть вызваны различными комбинациями версий / платформ.

Чтобы ответить на ваш вопрос, я сначала запустите ваш код на своей платформе:

versioninfo()
Julia Version 0.6.3
Commit d55cadc350 (2018-05-28 20:20 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-3720QM CPU @ 2.60GHz
  WORD_SIZE: 64
  BLAS: libopenblas (NO_AFFINITY SANDYBRIDGE MAX_THREADS=8)
  LAPACK: liblapack
  LIBM: libopenlibm
  LLVM: libLLVM-3.9.1 (ORCJIT, ivybridge)

Вывод вашего кода дает мне:

Pkg.add("Polynomials")
using Polynomials

x = []
for i in 1:9
  append!(x, i)
end
y = [1,2,3,4,3,4,2,3,1]
polyfit(x, y)

ERROR: `float` not defined on abstractly-typed arrays; please convert to a more specific type
Stacktrace:
 [1] float at ./float.jl:848 [inlined]
 [2] polyfit(::Array{Any,1}, ::Array{Int64,1}, ::Int64, ::Symbol) at /home/aytekin/.julia/v0.6/Polynomials/src/Polynomials.jl:708
 [3] polyfit(::Array{Any,1}, ::Array{Int64,1}) at /home/aytekin/.julia/v0.6/Polynomials/src/Polynomials.jl:700
 [4] eval(::Module, ::Any) at ./boot.jl:235

Ошибка возникает из-за того, как вы определяете переменную x.Если вы напишите typeof(x), вы поймете, что это Array{Any,1}.Вы определяете одномерный пустой массив типа Any, когда пишете x = [].Затем вы добавляете значения к нему.Определение контейнеров абстрактных типов (Any - это абстрактный тип, все типы которого julia являются подтипами) не подходит для целей эффективности.Более того, добавление к вектору, как вы делаете, также не является хорошей практикой.Помимо вопросов эффективности, x должен быть Vector типа Number.Короче говоря, если вы измените свой код следующим образом:

x = collect(1:9)
typeof(x)
y = [1,2,3,4,3,4,2,3,1]
typeof(y)
p = polyfit(x, y)

Вы, вероятно, увидите, что обе переменные x и y равны Vector с Int64.Кроме того, вы получите свой полином.

Пожалуйста, ознакомьтесь с содержанием Документация Джулии .Особенно полезным будет раздел Примечательные отличия от других языков , если вы используете один из этих языков.

...