Tạo số ngẫu nhiên quanh 1 số mà trung bình cộng bằng chính số đó ? (2 người xem)

  • Thread starter Thread starter vtv6
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

vtv6

Thành viên mới
Tham gia
11/2/09
Bài viết
22
Được thích
2
Chào các bạn !
Mình đang muốn tạo ra 1 dãy số ngẫu nhiên dao động xung quanh 1 giá trị cho trước, với điều kiện: tổng trung bình của các số ngẫu nhiên đúng bằng giá trị cho trước
Cám ơn các bạn nhiều !/-*+//-*+/
 
Chào các bạn !
Mình đang muốn tạo ra 1 dãy số ngẫu nhiên dao động xung quanh 1 giá trị cho trước, với điều kiện: tổng trung bình của các số ngẫu nhiên đúng bằng giá trị cho trước
Cám ơn các bạn nhiều !/-*+//-*+/

xin cho biết tổng trung bình nghĩa là gì ?
 
Xin hỏi:
- Dãy gồm bao nhiêu số?
- Có thể trùng với số cho trước/hoặc trùng nhau hay k?
 
Hạch toán số ma để làm báo cáo?
 
Nếu xem vấn đề này bằng cái nhìn hồn nhiên -\\/., thì đây là một bài toàn tương đối phổ biến khi lập trình giả lập. Chẳng hạn tôi giả lập dữ liệu điểm thi quanh điểm trung bình nhằm tạo dữ liệu chạy thử phần mềm tuyển sinh...

Bài này ngoài ý niệm về ngẫu nhiên, thì chỉ cần nắm vững kiến thức toán cấp 1 là đủ để giải quyết.

Nguyên lý cũng khá đơn giản. Gọi dãy muốn tạo là dãy số kỳ vọng có chiều dài n (H1, H2...., Hn) với giá trị trung bình là TB:
Bước 1: Cứ thản nhiên tạo ra n số ngẫu nhiên (X1, X2,... Xn)
Bước 2: Tính tỷ số giữa tổng các số kỳ vọng với tổng các số vừa tạo : (TB*n)/(X1+X2+...+Xn).
Bước 3: Nhân từng số trong dãy ngẫu nhiên này với tỷ số trên sẽ ra từng số của dãy số kỳ vọng.

Minh họa 1 ví dụ như sau:
Giả sử số trung bình của tôi là 5, độ dài dãy số quanh (5) đó là 4.
B1: Tôi tạo ra 4 số ngẫu nhiên: 8, 4, 16, 12; có tổng là 8+4+16+12=40
B2: Tỷ số giữa tổng dãy số kỳ vọng 5*4 = 20 với tổng các số ngẫu nhiênsẽ là 20/40 = 0.5
B3: Nhân lần lượt mỗi số trong dãy ngẫu nhiên với tỷ số 0.5 thì ra từng số trong dãy kỳ vọng.
8*0.5, 4*0.5, 16*0.5, 12*0.5 tương đương (4, 2, 8, 6)

Bình quân của dãy (4, 2, 8, 6) có phải bằng 5 không? Quá đơn giản phải không quý vị? Cũng nói luôn là trong giả lập dữ liệu còn nhiều ràng buộc khác nữa (ngoài con số trung bình ở trên) nhưng trình độ có hạn nên xin phép không lan man ạ.
 
Lần chỉnh sửa cuối:
Cám ơn các bạn đã quan tâm. Đặc biệt là bác Vô danh Tiểu tốt
Bài viết của bác em phải nghiên cứu thêm đã, vì giờ phải về đón con rồi :D
Đêm đến khi các con đi vào giấc ngủ em mời mò dậy để thử mới đc.

Em đưa ra cái ví dụ cái mà em muốn để ai chưa hiểu thì hiểu ạ:
Khi em nhập số: 10,3892 thì nó sẽ sinh ra 3 số ngẫu nhiên tương ứng là A; B; C (A;B;C trùng nhau hay không cũng được ạ)
và trung bình cộng của A; B; C đúng bằng 10,3892 ạ
__--__
 
Giả sử số cho trước tại A1

Các số ngẫu nhiên nằm tại B1,B2,B3

Mã:
B1=RANDBETWEEN(0,A1*10^4*2)*10^-4
B2=RANDBETWEEN(0,A1*10^4*2-B1*10^4)*10^-4
B3=A1*2-B1-B2
 
Chào các bạn !
Mình đang muốn tạo ra 1 dãy số ngẫu nhiên dao động xung quanh 1 giá trị cho trước, với điều kiện: tổng trung bình của các số ngẫu nhiên đúng bằng giá trị cho trước
Cám ơn các bạn nhiều !/-*+//-*+/
[C1] : Average Value
[A1]=[A2]=...[An-1]=ROUND(RAND()+INT([C1]),2)
[An]=n*[C1]-SUM([A1]+[A2]+....[An-1])
 
Chào các bạn !
Mình đang muốn tạo ra 1 dãy số ngẫu nhiên dao động xung quanh 1 giá trị cho trước, với điều kiện: tổng trung bình của các số ngẫu nhiên đúng bằng giá trị cho trước
Cám ơn các bạn nhiều !/-*+//-*+/


A1=Giá trị trung bình
B2 =RANDBETWEEN(1,$A$1*ROWS($A$1:A1)-SUM($B$1:B1))+RANDBETWEEN(1,10^6)/10^6-1 , rồi kéo xuống Bn-1 (tuỳ theo bạn lấy bao nhiêu số, nếu bạn lấy n thì kéo xuống Bn-1)
Bn=n*A1-SUM(B2:Bn-1)

P/s: RANDBETWEEN(1,10^6)/10^6-1 để lấy số lẻ, nếu bạn không cần số lẻ có thể bỏ nó đi!!
 
Lần chỉnh sửa cuối:
Hay quá, nhiều cách để làm quá. Các bác thật tuyệt.
Em muốn phát triển hơn nữa: Các số ngẫu nhiên sẽ xoay quanh giá trị cho trước vơi 1 biên độ chọn trước có được ko ạ ?
Ví dụ:
Số cho trước là 23,5
Độ lệch cho trước là 0,3
số ngẫu nhiên sinh ra trong khoảng 23,5 +/- 0,3
[TABLE="width: 77"]
[TR]
[TD="align: right"]23,8[/TD]
[/TR]
[TR]
[TD="align: right"]23,1[/TD]
[/TR]
[TR]
[TD="align: right"]23,5[/TD]
[/TR]
[/TABLE]
Như thế thì làm thế nào ạ ? Em thử phát triển từ các công thức các bác đưa nhưng thú thực khoản này hơi dốt nên chưa tìm ra ạ.
 
A1 = số cho trước (23.5)
B1 = độ lệch (0.3)
Công thức A2:
=ROUND($A$1-$B$1+RAND()*$B$1*2,1)
Copy xuống
 
Hay quá, nhiều cách để làm quá. Các bác thật tuyệt.
Em muốn phát triển hơn nữa: Các số ngẫu nhiên sẽ xoay quanh giá trị cho trước vơi 1 biên độ chọn trước có được ko ạ ?
Ví dụ:
Số cho trước là 23,5
Độ lệch cho trước là 0,3
số ngẫu nhiên sinh ra trong khoảng 23,5 +/- 0,3
[TABLE="width: 77"]
[TR]
[TD="align: right"]23,8[/TD]
[/TR]
[TR]
[TD="align: right"]23,1[/TD]
[/TR]
[TR]
[TD="align: right"]23,5[/TD]
[/TR]
[/TABLE]
Như thế thì làm thế nào ạ ? Em thử phát triển từ các công thức các bác đưa nhưng thú thực khoản này hơi dốt nên chưa tìm ra ạ.

A1=25.3, B1=0.3, C1=RANDBETWEEN(($A$1-$B$1)*10, ($A$1+$B$1)*10)/10 rồi fill xuống
 
Lần chỉnh sửa cuối:
A1 = 23.5 , B1 = 0.3
C1
= A1*3 - SUM(C2:C3)
C2 = ROUND($A$1-RAND()*$B$1,1)
C3 = ROUND($A$1+RAND()*$B$1,1)
A1 là trung bình cộng của C1, C2, C3
 
Cám ơn các bạn, mình đã làm được !}}}}}}}}}}}}}}}
 
Web KT

Bài viết mới nhất

Back
Top Bottom