[英]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.