我正在寻找一种在 excel-vba 中的一组复数中找到实数的方法。更具体地说,我有一组三个结果,其中一个已知是真实的,两个已知是复杂的,但是,我不知道哪个结果是真实的。由于中间计算步骤中的舍入误差,经常会发生实数的虚部不会完全抵消为 0(应该如此),这一事实使问题变得更加复杂。
我目前考虑使用的方法包括以下步骤:
- 确定三个结果中每一个的 Real 分量的值。
- 确定三个结果中每一个的虚部的绝对值。
- 确定这三个结果的最小值。
- 将每个绝对虚部与最小值进行比较。当这些匹配时,取对应的实分量作为最终结果。
代码如下所示:
Z1 = Application.WorksheetFunction.ImReal ( Application.WorksheetFunction.ImSum (xi1, x1i2, x1i3) )
Z2 = Application.WorksheetFunction.ImReal ( Application.WorksheetFunction.ImSum (xi1, x2i2, x2i3) )
Z3 = Application.WorksheetFunction.ImReal ( Application.WorksheetFunction.ImSum (xi1, x3i2, x3i3) )
ZIm1 = Abs ( Application.WorksheetFunction.Imaginary ( Application.WorksheetFunction.ImSum (xi1, x1i2, x1i3) ) )
ZIm2 = Abs ( Application.WorksheetFunction.Imaginary ( Application.WorksheetFunction.ImSum (xi1, x2i2, x2i3) ) )
ZIm3 = Abs ( Application.WorksheetFunction.Imaginary ( Application.WorksheetFunction.ImSum (xi1, x3i2, x3i3) ) )
ZImMin = Min (ZIm1, ZIm2, ZIm3)
If Zim1 = ZImMin Then
ZImID = Z1
ElseIf Zim2 = ZImMin Then
ZImID = Z2
Else ZImID = Z3
EndIf
我认为这应该可行,但是,我还没有尝试运行它。任何人都可以提出更好的方法来找到真正的解决方案吗?
此问题是根据此方法找到三次方程解的一部分:
谢谢!