已知一個橢圓 在橢圓內隨機取點應該如何實現? 我用的fortran 其它語言有什麼方便的函式嗎?
加橢圓邊界條件,超出邊界重新取點。
在單位圓盤內均勻分佈的取樣方法之一,是生成均勻分佈的
:
把座標向分別兩個軸縮放,仍然保持均勻分佈,如下圖把
放大成兩倍:
補一個n維“橢球”裡uniform sample的方法。 以下加粗的量為vectors。
假設n維橢球是由n維單位球
由線性變換
得到。 那麼:
先sample一個n維standard normal distribution:
。 這一步其實就是每個component 獨立地sample一個1維standard normal:
再將
normalize:
, 得到n維單位球上的均勻分佈
再取
, 令
再令
, 得到n維單位球裡的均勻分佈
最後進行線性變換,
即為目標橢球內的均勻分佈。
猜題主的“隨機”二字指的是服從均勻分佈的含義。
方法如下。
前面的感覺不太對,有些透過判斷來生成的。。。。。
clc
clear
time=0;
start=[20,50];goal=[80,50];
cmin=norm(goal-start);
cbest=120;
axis([-20,120,-20,120])
hold on
time=0;
while time<4000
x_center=[(start+goal)/2,0];
x_center=x_center‘;
a_1=[(goal(1)-start(1))/cmin;(goal(2)-start(2))/cmin;0];
id_t=[1,0,0];
M=a_1*id_t;
[U,S,Vh]=svd(M);
C=(U*diag([1,1,det(U)*det(Vh’)]))*(Vh);
r=[cbest/2,sqrt(cbest。^2-cmin。^2)/2,sqrt(cbest。^2-cmin。^2)/2];
L=diag(r);
a=rand();
b=rand();