将随机复数限制在给定范围内
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
添加到总和中,并在第二部分将 -
更改为 *
。
我可以让随机数的实部保持在给定范围内,但数字的复数部分不在我设置的范围内。 参见下面的 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
添加到总和中,并在第二部分将 -
更改为 *
。