gpt4 book ai didi

c# - 使用 MathNet.Numerics 的矩阵求逆

转载 作者:太空狗 更新时间:2023-10-29 23:36:52 30 4
gpt4 key购买 nike

我正在编写一些使用 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]

任何人都知道问题可能是什么?也许复数矩阵的求逆有一些问题?

enter image description here

经验教训:不要让你的数组太大以至于它们的行都是 0,否则倒数会爆炸 :) ...这是正确的答案:

enter image description here

最佳答案

正如 Jason 所提到的,这似乎工作正常。例如:

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)

关于c# - 使用 MathNet.Numerics 的矩阵求逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617137/

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