Câu trả lời:
Giá trị trung bình mong muốn của bạn được đưa ra bởi phương trình:
từ đó suy ra rằng xác suất của các 1s
nên.525
Trong Python:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
Bằng chứng:
x.mean()
0.050742000000000002
1'000 thí nghiệm với 1'000'000 mẫu 1s và -1s:
Vì lợi ích của sự hoàn chỉnh (mũ cho @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1'000 thí nghiệm với 1'000'000 mẫu 1s và -1s:
Và cuối cùng rút ra từ phân phối đồng đều, như được đề xuất bởi @ ukasz Deryło (cũng, trong Python):
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1'000 thí nghiệm với 1'000'000 mẫu 1s và -1s:
Cả ba trông giống hệt nhau!
BIÊN TẬP
Vài dòng trên định lý giới hạn trung tâm và sự lan truyền của các phân phối kết quả.
Trước hết, các phương tiện thực sự tuân theo Phân phối chuẩn.
Thứ hai, @Elvis trong nhận xét của mình cho câu trả lời này đã thực hiện một số tính toán tốt về mức độ lan truyền chính xác của phương tiện được rút ra từ hơn 1000 thí nghiệm (khoảng (0,048; 0,052)), khoảng tin cậy 95%.
Và đây là kết quả mô phỏng, để xác nhận kết quả của anh ấy:
mn = []
for _ in range(1000):
mn.append((2*st.binom(1, .525).rvs(1000000) - 1).mean())
np.percentile(mn, [2.5,97.5])
array([ 0.0480773, 0.0518703])
Tạo mẫu đồng nhất từ , mã hóa lại các số thấp hơn 0,525 đến 1 và phần còn lại thành -1.
Sau đó, giá trị mong đợi của bạn là
Tôi không phải là người dùng Matlab, nhưng tôi đoán nó sẽ bị lừa
2*(rand(1, 10000, 1)<=.525)-1
Chỉ trong trường hợp bạn muốn có CHÍNH XÁC 0,05 nghĩa là bạn có thể thực hiện tương đương với mã R sau trong MATLAB:
sample(c(rep(-1, 95*50), rep(1, 105*50)))