首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Polyfit函数Julia出错

Polyfit函数Julia出错
EN

Stack Overflow用户
提问于 2018-06-13 16:45:13
回答 1查看 666关注 0票数 0

我需要为我最近开始的Phd用julia编写代码,当我尝试使用Polynomials包中的polyfit函数时,我遇到了这个错误,这真的让我很困扰:

代码语言:javascript
复制
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)

我尝试了各种不同的测试,但即使是这样简单的代码,我也一直在尝试:

代码语言:javascript
复制
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)

有人知道这是什么意思吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 18:30:14

请在你的问题中包含一个完整的例子,我们可以复制我们自己。将versioninfo()的输出放在这里也是值得的,因为问题可能是由不同的版本/平台组合造成的。

为了回答你的问题,我将首先在我的平台上运行你的代码:

代码语言:javascript
复制
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)

您的代码的输出结果是:

代码语言:javascript
复制
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。简而言之,如果您将代码更改为如下所示:

代码语言:javascript
复制
x = collect(1:9)
typeof(x)
y = [1,2,3,4,3,4,2,3,1]
typeof(y)
p = polyfit(x, y)

您可能会看到xy变量都是Int64Vector。此外,您将获得您的多项式。

请通读Julia Documentation的内容。如果您来自这些语言中的一种,那么Noteworthy Differences from other Languages部分将特别有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50832823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档