我现在正在使用scipy.integrate.quad来成功整合一些真正的整数.现在出现了我需要整合复杂的被积函数的情况.quad似乎无法做到这一点,因为其他scipy.integrate例程,所以我问:有没有办法使用scipy.integrate集成复杂的被积函数,而不必分离实部和虚部的积分?
我写了一个Java程序来计算Riemann Zeta函数的值.在程序内部,我创建了一个库来计算必要的复杂函数,如atan,cos等.两个程序中的所有内容都通过double和BigDecimal数据类型访问.这在评估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)
这是正确的. …
如何创建一个Mathematica图形来复制sage 中complex_plot的行为?即
...获取一个变量的复杂函数,并在指定的xrange和yrange上绘制函数的输出,如下所示.输出的大小由亮度表示(零为黑色,无穷大为白色),而参数由色调表示(红色为正实,红色增加,黄色,......随着参数增加) .
这是zeta函数的一个例子(从中性漂移的M.Hilton那里偷来的),其覆盖的绝对值轮廓:

在数学文档页面功能复杂的变量,它说,你可以使用可视化复杂的功能ContourPlot和DensityPlot"潜在的阶段着色".但问题在于两种类型的图,ColorFunction只需要一个等于该点的轮廓或密度的变量 - 所以在绘制绝对值时,似乎不可能使相位/参数着色.请注意,这不是传递Plot3D所有3个参数的问题.(x,y,z)ColorFunction
我知道还有其他方法来可视化复杂的功能 - 例如Plot3D文档中的"简洁示例" ,但这不是我想要的.
此外,我确实有一个解决方案(实际上已经用于生成维基百科中使用的一些图形),但它定义了一个相当低级别的功能,我认为应该可以使用像ContourPlot或的高级函数DensityPlot.并不是说这应该阻止你提供你最喜欢的方法,使用较低级别的结构!
编辑: Michael Trott在Mathematica杂志上发表了一些很好的文章:
可视化代数函数的黎曼曲面,IIa,IIb,IIc,IId.
可视化黎曼曲面演示.
黎曼曲面的返回(Mma v6的更新)
当然,Michael Trott编写了Mathematica指南书,其中包含许多漂亮的图形,但似乎已经落后于加速的Mathematica发布时间表!
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) 似乎有一个问题,使用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::complex与1.0i?
我想知道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)
我在这里错过了什么吗?
我正在寻找最节省内存的方法来计算复杂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,所以我不能用它作为出来.
以下代码与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.
编辑说明:最初的问题说非法,现在说未指定。
感谢最近 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
我想用来numpy.savetxt()将复数的数组保存到文本文件中.问题:
fmt='%s',则numpy.loadtxt()除非您指定,否则无法加载它dtype=complex, converters={0: lambda s: complex(s)}.即使这样,如果阵列中有NaN,加载仍然失败.它看起来像有人询问这多个 倍的numpy的邮件列表上,甚至提交了错误,但一直没有得到答复.在我自己整理东西之前,有没有一种规范的方法可以做到这一点?
complex-numbers ×10
python ×5
numpy ×4
c++ ×3
std ×2
bigdecimal ×1
c++20 ×1
double ×1
java ×1
math ×1
numpy-ufunc ×1
plot ×1
scipy ×1
stl ×1