[英]how to add two matrices in haskell
我正在嘗試使用Haskell的線性代數庫來計算一些特征值,但是首先我需要首先嘗試添加矩陣。
import Numeric.LinearAlgebra.Data
matrix 3 [1,2,3,4,5,6,7,8,9 ] + matrix 3 [1,2,3,4,5,6,7,8,9 ]
(3><3)
[ 2.0, 4.0, 6.0
, 8.0, 10.0, 12.0
, 14.0, 16.0, 18.0 ]
但是,如果我嘗試代表另一種方式,則會收到錯誤消息
( 3 >< 3 ) [1,2,3,4,5,6,7,8,9 ] + ( 3 >< 3 ) [1,2,3,4,5,6,7,8,9 ]
No instance for (Element a0) arising from a use of ‘print’
The type variable ‘a0’ is ambiguous
我什至不確定matrix 3 [1,2,3,4,5,6,7,8,9 ]
因為我想指定我想要一個3×3的矩陣。 其他三個去哪兒了?
問題來自類型簽名的差異。
matrix :: Int -> [ℝ] -> Matrix ℝ
(><) :: Storable a => Int -> Int -> [a] -> Matrix a
因此,實際上matrix 3 [1,2,3,4,5,6,7,8,9 ]
具有Matrix ℝ
type類型,而( 3 >< 3 ) [1,2,3,4,5,6,7,8,9 ]
類型為(Num a, Foreign.Storable.Storable a) => Matrix a
。 然后,問題突然解決了。 除非指定a
是什么,否則您不知道(+)
是什么,因此您實際上無法評估矩陣的總和(僅產生重擊),因此無法打印。
一個快速的解決方法是指定矩陣的類型
(3 >< 3) ([1..9] :: [ℝ]) + (3 >< 3) ([1..9] :: [ℝ])
哪些輸出(給定正確的進口):
(3><3)
[ 2.0, 4.0, 6.0
, 8.0, 10.0, 12.0
, 14.0, 16.0, 18.0 ]
我想做(3 >< 3) ([1..9] :: [Integer]) + (3 >< 3) ([1..9] :: [Integer])
,但要注意Num
實例Matrix
(Container Matrix a, Num (Vector a)) => Num (Matrix a)
所以我們需要Vector a
也要有Num
實例。 但是,您可以檢查Vector Integer
是否沒有num聲明。 可行的替代方法:
Num (Vector Double)
Num (Vector Float)
Num (Vector (Complex Double))
Num (Vector (Complex Float))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.