将随机复数限制为给定范围

时间:2019-01-04 17:36:35

标签: matlab octave complex-numbers

我可以得到随机数的实部以保持在给定范围内,但数字的复杂部分不在所设定的范围内。 请参见下面的matlab /八度代码。

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

2 个答案:

答案 0 :(得分:1)

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

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);

答案 1 :(得分:1)

您有两个错误:

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

您应在总数中加上xmin,然后在第二部分中将-更改为*