0
我试图在F#中编写一个函数,用于将2个矩阵相乘。它使用转置函数来查找给定矩阵的转置。F#中的乘法函数总是返回failwith
let rec transpose = function
| [] -> failwith "Error, no matrix supplied"
| xs when List.head xs = [] -> []
| xs -> List.map (fun n -> List.head n) xs :: transpose
(List.map(fun n -> List.tail n) xs);;
let rec multiply = function
|([], []) -> []
|([], ys) -> failwith "Empty matrix"
|(xs, []) -> failwith "empty matrix"
|(x::xs, ys) -> let t = transpose ys
List.map(fun n -> inner x n) t :: multiply(xs,ys);;
不管输入的是什么,我的乘法函数始终执行“failwith”假如我跟[0]然而,代替failwith,功能完美的作品返回。但是当我将一个矩阵与一个空矩阵相乘时,我觉得0是不正确的,所以我想解决这个问题,并且如果是这样的话能够输出错误。
不知道你的应用是什么,但MathNet.Numerics拥有出色的线性代数库,可与英特尔数学核心函数中使用用于快速矩阵操作的库。 http://numerics.mathdotnet.com/ – mpeac