簡體   English   中英

如何獲取所需的VectorSpace的隱式實例?

[英]How do I get the implicit instance of the VectorSpace I need?

我正在嘗試使用尖頂使我編寫的線性插值函數更通用

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)

它說它找不到VectorSpace[Seq[Int],Double]的隱式。 有沒有辦法獲取所需的VectorSpace實例? 是否需要為每種類型手動定義一個?

我試圖定義一個隱式方法,該方法通過將Vector類型用作AdditiveAbGroup並將字段類型用作Field來產生VectorSpace,但是我無法對其進行編譯。

錯誤說,找不到VectorSpace[Seq[Int],Double]的實例,而這正是問題所在。 因為在向量空間中,向量必須被標量字段整除,所以在VectorSpace中不能有整數向量。 而且類型也必須相同,所以

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)

工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM