0

我正在尝试使用 spire 来制作我写的更通用的线性插值函数

def interpolate(pointA: (Double,Double), pointB: (Double,Double), point: Double): Double = {
    ((pointB._1 - pointA._1) / (pointB._2 - pointA._2) * (point - pointA._2)) + pointA._1
}

我意识到这可以更通用,因为您可以通过这种方式插入任何向量空间的元素。所以我把它改成这样:

def interpolate[V,F](pointA: (V,F), pointB: (V,F), point: F)(implicit vs: VectorSpace[V,F]): V = {
    import spire.implicits._
    implicit val field: algebra.Field[F] = vs.scalar

    ((pointB._1 - pointA._1) :/ (pointB._2 - pointA._2) * (point - pointA._2)) + pointA._1
}

但是,当我尝试像这样使用它时:

import spire.implicits._
private val ints = interpolate((Vector(1,2,3),2.0),(Vector(4,5,6),3.0),7.0)

它说它找不到隐含的 for VectorSpace[Seq[Int],Double]。有没有办法获得我需要的 VectorSpace 实例?我必须为我需要的每种类型手动定义一个吗?

我试图定义一个隐式方法,该方法将通过为 Vector 类型采用 AdditiveAbGroup 并为字段类型采用 Field 来生成 VectorSpace,但我无法编译它。

4

1 回答 1

0

错误说,找不到实例VectorSpace[Seq[Int],Double],这正是问题所在。因为在向量空间中,向量必须能被标量域整除,所以向量空间中不能有整数向量。类型也需要相同,所以

import spire.implicits._
private val ints = interpolate((Vector(1.0,2.0,3.0),2.0),(Vector(4.0,5.0,6.0),3.0),7.0)

工作正常。

于 2018-03-15T23:15:43.047 回答