J. *_*abe 5 c# matrix math.net
我正在编写一些使用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);
Run Code Online (Sandbox Code Playgroud)
我的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]
Run Code Online (Sandbox Code Playgroud)
但是当我做倒置时
Zbus = Ybus.Inverse();
Run Code Online (Sandbox Code Playgroud)
Zbus的结果都是NaN
而本书的正确结果如下:
Zbus = j[ .15 .09 .12 .11
.09 .15 .12 .13
.12 .12 .25 .19
.11 .13 .19 .39]
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法可能是什么问题?也许复杂矩阵的反演有一些问题?
获得的经验:不要让你的数组太大,以致它们有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");
Run Code Online (Sandbox Code Playgroud)
提供以下输出,与您的书籍结果相匹配(除了书籍中的错误舍入之外):
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2161 次 |
| 最近记录: |