簡體   English   中英

如何在Haskell中添加兩個矩陣

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

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