我可以得到随机数的实部以保持在给定范围内,但数字的复杂部分不在所设定的范围内。 请参见下面的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
答案 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
,然后在第二部分中将-
更改为*
。