ограничить случайное комплексное число заданным диапазоном - PullRequest
0 голосов
/ 04 января 2019

Я могу получить действительную часть случайного числа, чтобы он оставался в заданном диапазоне, но сложная часть числа не остается в пределах заданного мной диапазона. см. Код 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

Ответы [ 2 ]

0 голосов
/ 04 января 2019

У вас есть две ошибки:

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

Вы должны добавить xmin к сумме и изменить - на * во второй части.

0 голосов
/ 04 января 2019

Я добавил несколько пробелов в ваш код, чтобы разница стала более очевидной:

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