gpt4 book ai didi

c# - MathNET 矩阵转换

转载 作者:行者123 更新时间:2023-11-30 22:10:20 33 4
gpt4 key购买 nike

我最近开始使用 MathNET 库,它很棒。我正在大量使用矩阵和向量。该库运行良好,但我发现我必须一直使用转换;这方面的一个例子是:

using MathNet.Numerics.LinearAlgebra.Double;
...
Matrix P = (DenseMatrix)(T.Multiply(P.TransposeAndMultiply(T)) +
R.Multiply(Q.TransposeAndMultiply(R)));

using MathNet.Numerics.LinearAlgebra.Double;
...
Vector a, v, y;
Matrix F, K, Z;
...
Matrix FI = (DenseMatrix)F.Inverse();
if (FI != null)
K = (DenseMatrix)K.Multiply(FI);
...
v = (DenseVector)(y - Z.Multiply(a));

为什么我必须使用 ((DenseMatrix)/(DenseVector)) 进行转换,有没有办法避免每次操作都必须这样做?

最佳答案

类型层次结构:Matrix<double> <- Double.Matrix <- Double.DenseMatrix

您是否真的需要显式使用特殊类型(如 Double.Matrix 或 Double.DenseMatrix)而不是通用矩阵和向量类型?

对于 v3,我们建议始终使用通用类型。这样在大多数情况下根本不需要转换。您的示例将如下所示:

using MathNet.Numerics.LinearAlgebra;
Matrix<double> P = T*P.TransposeAndMultiply(T) + R*Q.TransposeAndMultiply(R);

var FI = F.Inverse();
K = K*FI
v = y - Z*a

您还可以使用新的构建器 ( Matrix<double>.Build ) 直接使用通用类型构造矩阵和向量,因此唯一要打开的命名空间是 MathNet.Numerics.LinearAlgebra .

关于c# - MathNET 矩阵转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20879550/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com