Julia 多元拟合函数的误差

Julia 多元拟合函数的误差,julia,Julia,我有点需要为我最近开始的博士学位编写julia,当我试图使用多项式软件包中的polyfit函数时,我遇到了这个错误,这让我非常恼火: DomainError Stacktrace: [1] polyfit(::StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}, ::Array{Int64,1}, ::Int64, ::Symbol) at /home/jrun/.julia/v0.6

我有点需要为我最近开始的博士学位编写
julia
,当我试图使用
多项式
软件包中的
polyfit
函数时,我遇到了这个错误,这让我非常恼火:

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)
有人知道那是什么意思吗


谢谢

请在您的问题中包含一个我们可以复制的独立示例。同样值得一提的是
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}
。当您编写
x=[]
时,您正在定义类型为
Any
的一维空数组。然后,向其添加值。定义抽象类型的容器(
Any
是所有
julia
类型都是其子类型的抽象类型)对于效率来说是不好的。此外,以这种方式附加到向量也不是一种好的做法。除了效率问题外,
x
应该是一些
Number
类型的
Vector
。简而言之,如果您将代码更改为以下内容:

x = collect(1:9)
typeof(x)
y = [1,2,3,4,3,4,2,3,1]
typeof(y)
p = polyfit(x, y)
您可能会看到
x
y
变量都是
Int64
Vector
s。此外,您将获得多项式


请通读这本书的内容。如果您来自这些语言中的一种,那么该部分尤其有用。

函数
polyfit
来自哪里?请在您的问题中加入一个。正确,但是
polyfit
功能在这里的工作方式可能会有点不同,以使此方法起作用(cf)@jverzani,我已经在您的PR下开始了评论。太好了。这不是我的贡献,我的调整是次要的,但似乎应该有一个更惯用的方式来做到这一点。