将随机复数限制在给定范围内

limit random complex number to a given range

我可以让随机数的实部保持在给定范围内,但数字的复数部分不在我设置的范围内。 参见下面的 matlab/octave 代码。

xmin=-.5
xmax=1
n=3
x=xmin+rand(1,n)*(xmax-xmin)+(rand(1,n)-(xmax-xmin))*1i
x=x(:)

实数部分有效但复数部分不限于-0.5到1

0.2419028288441536 - 0.6579427654754871i
0.2712527227134944 - 1.451964497492678i
0.3245051849394858 - 1.107556052779179i

我在您的代码中添加了一些空格,因此区别更加明显:

x =  xmin+rand(1,n)*(xmax-xmin)  +  (  rand(1,n)-(xmax-xmin)  )*1i
     ^^^ correct                       ^^^ not correct: missing `xmin+`
                                           (and as OmG noted, also a `-` instead of a `*`)

减少错误数量的一个好方法是避免代码重复。例如,您可以这样写:

rand_sequence = @(m,xmin,xmax) xmin+rand(1,n)*(xmax-xmin);
x = rand_sequence(n,xmin,xmax) + 1i*rand_sequence(n,xmin,xmax)

(这个看起来代码比较多,但是比较复杂的代码逻辑没有重复。)

或者像这样:

x = xmin + (rand(1,n)+1i*rand(1,n)) * (xmax-xmin);

你有两个错误:

 x=xmin+rand(1,n)*(xmax-xmin)+(xmin + rand(1,n)*(xmax-xmin))*1i

您应该将 xmin 添加到总和中,并在第二部分将 - 更改为 *