标签: complex-numbers

使用scipy.integrate.quad来集成复数

我现在正在使用scipy.integrate.quad来成功整合一些真正的整数.现在出现了我需要整合复杂的被积函数的情况.quad似乎无法做到这一点,因为其他scipy.integrate例程,所以我问:有没有办法使用scipy.integrate集成复杂的被积函数,而不必分离实部和虚部的积分?

python numpy scipy complex-numbers

27
推荐指数
2
解决办法
2万
查看次数

在Java中将double转换为BigDecimal

我写了一个Java程序来计算Riemann Zeta函数的值.在程序内部,我创建了一个库来计算必要的复杂函数,如atan,cos等.两个程序中的所有内容都通过doubleBigDecimal数据类型访问.这在评估Zeta函数的大值时会产生重大问题.

Zeta函数参考的数值近似

s具有较大复杂形式的情况下,以高值直接评估此近似会产生问题,例如s = (230+30i).我非常感谢在这里获得有关这方面的信息.S2.minus(S1)由于我在adaptiveQuad方法中写错了,因此创建错误的评估.

例如,Zeta(2+3i)通过这个程序生成

Calculation of the Riemann Zeta Function in the form Zeta(s) = a + ib.

Enter the value of [a] inside the Riemann Zeta Function: 2
Enter the value of [b] inside the Riemann Zeta Function: 3
The value for Zeta(s) is 7.980219851133409E-1 - 1.137443081631288E-1*i
Total time taken is 0.469 seconds.
Run Code Online (Sandbox Code Playgroud)

这是正确的. …

java double bigdecimal complex-numbers

24
推荐指数
2
解决办法
2556
查看次数

在Mathematica中绘制复杂函数

如何创建一个Mathematica图形来复制sage 中complex_plot的行为?即

...获取一个变量的复杂函数,并在指定的xrange和yrange上绘制函数的输出,如下所示.输出的大小由亮度表示(零为黑色,无穷大为白色),而参数由色调表示(红色为正实,红色增加,黄色,......随着参数增加) .

这是zeta函数的一个例子(从中性漂移的M.Hilton那里偷来的),其覆盖的绝对值轮廓:

zeta函数complex_plot

在数学文档页面功能复杂的变量,它说,你可以使用可视化复杂的功能ContourPlotDensityPlot"潜在的阶段着色".但问题在于两种类型的图,ColorFunction只需要一个等于该点的轮廓或密度的变量 - 所以在绘制绝对值时,似乎不可能使相位/参数着色.请注意,这不是传递Plot3D所有3个参数的问题.(x,y,z)ColorFunction

我知道还有其他方法来可视化复杂的功能 - 例如Plot3D文档中的"简洁示例" ,但这不是我想要的.

此外,我确实有一个解决方案(实际上已经用于生成维基百科中使用的一些图形),但它定义了一个相当低级别的功能,我认为应该可以使用像ContourPlot或的高级函数DensityPlot.并不是说这应该阻止你提供你最喜欢的方法,使用较低级别的结构!


编辑: Michael Trott在Mathematica杂志上发表了一些很好的文章:
可视化代数函数的黎曼曲面,IIa,IIb,IIc,IId.
可视化黎曼曲面演示.
黎曼曲面的返回(Mma v6的更新)

当然,Michael Trott编写了Mathematica指南书,其中包含许多漂亮的图形,但似乎已经落后于加速的Mathematica发布时间表!

plot visualization wolfram-mathematica complex-numbers

22
推荐指数
3
解决办法
2万
查看次数

相当于NumPy中的j

j在NumPy中,Octave的等价物是什么?我如何j在Python中使用?

在Octave:

octave:1> j
ans =  0 + 1i
octave:1> j*pi/4
ans =  0.00000 + 0.78540i
Run Code Online (Sandbox Code Playgroud)

但是在Python中:

>>> import numpy as np
>>> np.imag
<function imag at 0x2368140>
>>> np.imag(3)
array(0)
>>> np.imag(3,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: imag() takes exactly 1 argument (2 given)
>>> np.imag(32)
array(0)
>>> 
>>> 0+np.imag(1)
1
Run Code Online (Sandbox Code Playgroud)

python numpy complex-numbers

21
推荐指数
2
解决办法
4万
查看次数

复杂的文字'i'用于函数参数

似乎有一个问题,使用C++中的文字istd::complex.

请考虑以下代码:

std::complex<double> a = -1.0i * 42.0;
std::complex<double> b = a + 1.0i;
Run Code Online (Sandbox Code Playgroud)

第二行无法编译: error: no match for ‘operator+’ (operand types are ‘std::complex<double>’ and ‘__complex__ double’)

在函数调用中使用复杂文字时也会出现这种情况,例如

std::exp<std::complex<double>>( 1.0i * 3.14159 );
Run Code Online (Sandbox Code Playgroud)

为什么复杂的字面值1.0i不能转换为std::complex<double>

我必须明确地构建一个std::complex1.0i

c++ std complex-numbers

20
推荐指数
1
解决办法
1151
查看次数

Python中复数的格式

我想知道Python(3.3.0)打印复数的方式.我正在寻找解释,而不是改变印刷品的方法.

例:

>>> complex(1,1)-complex(1,1)
0j
Run Code Online (Sandbox Code Playgroud)

为什么不打印"0"?我的猜测是:保持类型复杂的输出.

下一个例子:

>>> complex(0,1)*-1
(-0-1j)
Run Code Online (Sandbox Code Playgroud)

好吧,一个简单的"-1j"或"( - 1j)"就可以了.为什么"-0"?? 和+0不一样吗?它似乎不是一个舍入问题:

>>> (complex(0,1)*-1).real == 0.0
True
Run Code Online (Sandbox Code Playgroud)

当假想部分变为正数时,-0消失:

>>> complex(0,1)
1j
>>> complex(0,1)*-1
(-0-1j)
>>> complex(0,1)*-1*-1
1j
Run Code Online (Sandbox Code Playgroud)

又一个例子:

>>> complex(0,1)*complex(0,1)*-1
(1-0j)
>>> complex(0,1)*complex(0,1)*-1*-1
(-1+0j)
>>> (complex(0,1)*complex(0,1)*-1).imag
-0.0
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

python complex-numbers

19
推荐指数
1
解决办法
1万
查看次数

大多数内存有效的方法来计算复杂numpy ndarray的abs()**2

我正在寻找最节省内存的方法来计算复杂numpy ndarray的绝对平方值

arr = np.empty((250000, 150), dtype='complex128')  # common size
Run Code Online (Sandbox Code Playgroud)

我还没有找到一个完全可以做到的ufunc np.abs()**2.

由于该大小和类型的数组占用大约半GB,我正在寻找一种主要的内存效率方式.

我也希望它是可移植的,所以理想情况下是ufuncs的一些组合.

到目前为止,我的理解是,这应该是最好的

result = np.abs(arr)
result **= 2
Run Code Online (Sandbox Code Playgroud)

它将不必要地计算(**0.5)**2,但应该**2就地计算.总的来说,峰值内存要求只是原始数组大小+结果数组大小,应该是1.5*原始数组大小,因为结果是真实的.

如果我想摆脱无用的**2电话,我必须做这样的事情

result = arr.real**2
result += arr.imag**2
Run Code Online (Sandbox Code Playgroud)

但如果我没有记错,这意味着我将不得不为分配内存实部和虚部的计算,因此峰值内存使用量是2.0*原始数组的大小.这些arr.real属性还返回一个非连续的数组(但这个问题不太重要).

有什么我想念的吗?有没有更好的方法来做到这一点?

编辑1:我很抱歉没有说清楚,我不想覆盖arr,所以我不能用它作为出来.

python numpy complex-numbers memory-efficient numpy-ufunc

19
推荐指数
2
解决办法
6950
查看次数

为什么abs(complex <int>)总是返回零?

以下代码与VS2010打印0,与我的期望相反:

#include <complex>
#include <iostream>

using namespace std;

int main(void)
{
    complex<int> z(20, 200);
    cout << abs<int>(z) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的类型是正常的double.

c++ math stl std complex-numbers

18
推荐指数
2
解决办法
1930
查看次数

实现允许使用不支持的类型实例化 std::complex 是否有原因

编辑说明:最初的问题说非法,现在说未指定

感谢最近 Jason Turner 视频的视频评论部分,我了解到这std::complex<int>是未指定的。

但所有(AFAIK)实现似乎都可以愉快地编译

std::complex<int>
Run Code Online (Sandbox Code Playgroud)

但有些功能如std::abs()已被破坏std::complex<int>,因此它实际上在那些主流实现中不可用。


我想知道是否有某种原因导致从未实现“不良”类型的检测。我知道 std lib 实现需要与较旧的标准一起工作,因此它们不能只是std::floating_point在各处停留概念,但即使在 C++20 之前,我们也有方法来约束模板。

换句话说:这只是“很好,但我们没有时间”问题,还是存在某些兼容性原因来保持此编译。我唯一能想到的是,有些人正在使用 std::complex 和 std lib“制造商”不想明显破坏他们已经损坏的代码。

c++ complex-numbers language-lawyer unspecified-behavior c++20

18
推荐指数
2
解决办法
695
查看次数

如何使用numpy.savetxt保存和加载复数的数组?

我想用来numpy.savetxt()将复数的数组保存到文本文件中.问题:

  • 如果使用默认格式字符串保存复杂数组,则会丢弃虚部.
  • 如果您使用fmt='%s',则numpy.loadtxt()除非您指定,否则无法加载它dtype=complex, converters={0: lambda s: complex(s)}.即使这样,如果阵列中有NaN,加载仍然失败.

它看起来像有人询问这多个 的numpy的邮件列表上,甚至提交了错误,但一直没有得到答复.在我自己整理东西之前,有没有一种规范的方法可以做到这一点?

python numpy complex-numbers

17
推荐指数
2
解决办法
1万
查看次数