gpt4 book ai didi

c++ - 有效地将络合物转化为其极性形式

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:30 26 4
gpt4 key购买 nike

很容易将 std::complex c 转换为其极坐标形式:

magnitude = abs(c)
phase = arg(c)

但是,这是获取幅度和相位的两个独立操作。如果标准库提供单一方法将 std::complex 转换为其极坐标形式,则算法或实现中的优化可能是可能的。

标准库是否提供了一种更有效的方法来将笛卡尔复形转换为其极坐标形式?我只找到了 polar方法相反。

最佳答案

如果工作的任何部分实际上可以在这两个结果的计算中共享,我会感到相当惊讶。请注意,不仅使用不同的函数,而且甚至使用不同的方法来计算幅度和相位。这与计算的情况非常不同,例如同时计算正弦和余弦,在这种情况下,同时获得两个结果并将它们分开实际上并不比只获得一个或另一个更难。

形式 z = r e^(iφ) 不以任何对称方式处理 rφ,不给出任何依据因为相信它的逆应该。实际上要求 r ≥ 0 是相当随意的开始;与角度的模糊性不同,角度的模糊性被定义为 2π 的整数倍,这不是分支选择的结果,而仅仅是几何直觉的结果。简而言之,极坐标形式在数学上并不是很有趣。

如果您对 s = log r 而不是 r 感到满意,情况就会完全不同,因为那时 z = e^(s + iφ) 和 s + iφ = log z。因此,“只是”概括复数的对数就可以了,您的两个答案存储在结果的实部和虚部中。 std::log <complex> 中扩展为复数.

尝试一些基准测试。可能是log + real + imag + expabs 更快(使用优化) + arg .

关于c++ - 有效地将络合物转化为其极性形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261887/

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