使用 MathNet.Numerics 的矩阵求逆
Matrix Inverse using MathNet.Numerics
我正在编写一些使用 MathNet.Numerics.LinearAlgebra 的 C# 代码,并尝试将结果与教科书示例相匹配。代码的一部分对 complex32 数组 "Ybus" 进行了反转,并将其存储在另一个数组 "Zbus" 中:
Matrix<Complex32> Ybus = Matrix<Complex32>.Build.Dense(numBuses, numBuses);
Matrix<Complex32> Zbus = Matrix<Complex32>.Build.Dense(numBuses, numBuses);
我的Ybus和书上的例子一模一样
Ybus = j[ -13 5 4 0
5 -13.5 2.5 2
4 2.5 -9 2.5
0 2 2.5 -4.5]
但是当我进行反转时
Zbus = Ybus.Inverse();
Zbus的结果都是NaN
而书中的正确结果是这样的:
Zbus = j[ .15 .09 .12 .11
.09 .15 .12 .13
.12 .12 .25 .19
.11 .13 .19 .39]
有人知道问题出在哪里吗?也许复数矩阵的求逆有一些问题?
经验教训:不要让你的数组太大以至于它们的行都是 0,否则倒数会爆炸 :) ...这是正确的答案:
正如杰森所说,这似乎工作正常。例如:
var y = Complex32.ImaginaryOne * CreateMatrix.Dense(4, 4, new Complex32[] {-13f,5f,4f,0f,5f,-13.5f,2.5f,2f,4f,2.5f,-9f,2.5f,0f,2f,2.5f,-4.5f});
y.ToString("F3");
y.Inverse().ToString("F3");
提供以下输出,匹配您的书本结果(书本中的四舍五入除外):
DenseMatrix 4x4-Complex32
(0.000, -13.000) (0.000, 5.000) (0.000, 4.000) (0.000, 0.000)
(0.000, 5.000) (0.000, -13.500) (0.000, 2.500) (0.000, 2.000)
(0.000, 4.000) (0.000, 2.500) (0.000, -9.000) (0.000, 2.500)
(0.000, 0.000) (0.000, 2.000) (0.000, 2.500) (0.000, -4.500)
DenseMatrix 4x4-Complex32
(0.000, 0.153) (0.000, 0.097) (0.000, 0.126) (0.000, 0.113)
(0.000, 0.097) (0.000, 0.153) (0.000, 0.124) (0.000, 0.137)
(0.000, 0.126) (0.000, 0.124) (0.000, 0.256) (0.000, 0.197)
(0.000, 0.113) (0.000, 0.137) (0.000, 0.197) (0.000, 0.393)
我正在编写一些使用 MathNet.Numerics.LinearAlgebra 的 C# 代码,并尝试将结果与教科书示例相匹配。代码的一部分对 complex32 数组 "Ybus" 进行了反转,并将其存储在另一个数组 "Zbus" 中:
Matrix<Complex32> Ybus = Matrix<Complex32>.Build.Dense(numBuses, numBuses);
Matrix<Complex32> Zbus = Matrix<Complex32>.Build.Dense(numBuses, numBuses);
我的Ybus和书上的例子一模一样
Ybus = j[ -13 5 4 0
5 -13.5 2.5 2
4 2.5 -9 2.5
0 2 2.5 -4.5]
但是当我进行反转时
Zbus = Ybus.Inverse();
Zbus的结果都是NaN
而书中的正确结果是这样的:
Zbus = j[ .15 .09 .12 .11
.09 .15 .12 .13
.12 .12 .25 .19
.11 .13 .19 .39]
有人知道问题出在哪里吗?也许复数矩阵的求逆有一些问题?
经验教训:不要让你的数组太大以至于它们的行都是 0,否则倒数会爆炸 :) ...这是正确的答案:
正如杰森所说,这似乎工作正常。例如:
var y = Complex32.ImaginaryOne * CreateMatrix.Dense(4, 4, new Complex32[] {-13f,5f,4f,0f,5f,-13.5f,2.5f,2f,4f,2.5f,-9f,2.5f,0f,2f,2.5f,-4.5f});
y.ToString("F3");
y.Inverse().ToString("F3");
提供以下输出,匹配您的书本结果(书本中的四舍五入除外):
DenseMatrix 4x4-Complex32
(0.000, -13.000) (0.000, 5.000) (0.000, 4.000) (0.000, 0.000)
(0.000, 5.000) (0.000, -13.500) (0.000, 2.500) (0.000, 2.000)
(0.000, 4.000) (0.000, 2.500) (0.000, -9.000) (0.000, 2.500)
(0.000, 0.000) (0.000, 2.000) (0.000, 2.500) (0.000, -4.500)
DenseMatrix 4x4-Complex32
(0.000, 0.153) (0.000, 0.097) (0.000, 0.126) (0.000, 0.113)
(0.000, 0.097) (0.000, 0.153) (0.000, 0.124) (0.000, 0.137)
(0.000, 0.126) (0.000, 0.124) (0.000, 0.256) (0.000, 0.197)
(0.000, 0.113) (0.000, 0.137) (0.000, 0.197) (0.000, 0.393)