ডিস্কে অভিন্ন বিতরণ সিমুলেট করুন


24

আমি বৃত্তের মধ্যে এলোমেলো পয়েন্টগুলির ইঞ্জেকশন অনুকরণ করার চেষ্টা করছিলাম, যেমন বৃত্তের কোনও অংশে ত্রুটি থাকার সম্ভাবনা একই থাকে has আমি বৃত্তটিকে সমান আয়তক্ষেত্রগুলিতে বিভক্ত করে দিলে ফলাফল বিতরণের প্রতিটি ক্ষেত্রফল গণনা পোইসন বিতরণ অনুসরণ করবে।

যেহেতু এটিতে একটি বৃত্তাকার ক্ষেত্রের মধ্যে কেবল পয়েন্টিং পয়েন্টগুলির প্রয়োজন হয়, তাই আমি পোলার স্থানাঙ্কগুলিতে দুটি অভিন্ন র্যান্ডম বিতরণ ইঞ্জেকশন করি: (ব্যাসার্ধ) এবং (মেরু কোণ)।θRθ

তবে এই ইনজেকশনটি করার পরে, আমি প্রান্তের তুলনায় বৃত্তের কেন্দ্রে পরিষ্কারভাবে আরও পয়েন্ট পেয়েছি।

এখানে চিত্র বর্ণনা লিখুন

বৃত্ত জুড়ে এই ইনজেকশনটি সম্পাদন করার সঠিক উপায় কী হবে যাতে পয়েন্টগুলি এলোমেলোভাবে সর্ল জুড়ে বিতরণ করা হয়?


: এই প্রশ্নের জ্যামিতি ফোরামে একটি সঠিক এনালগ হয়েছে math.stackexchange.com/questions/87230/...
Aksakal

উত্তর:


35

আপনি পয়েন্টের অনুপাতটি মূলের দূরত্বের চেয়ে ক্ষেত্রের সমানুপাতিক হতে চান । অঞ্চলটি স্কোয়ার দূরত্বের সমানুপাতিক হওয়ায় ইউনিফর্ম এলোমেলো রেডিয়াই উত্পন্ন করুন এবং তাদের বর্গাকার শিকড় নিন। একটি সমান মেরু কোণ দিয়ে একত্রিত করুন।

এটি কোডে দ্রুত এবং সহজ, কার্যকরকরণে দক্ষ (বিশেষত একটি সমান্তরাল প্ল্যাটফর্মের উপর), এবং ঠিক নির্ধারিত পয়েন্টগুলির সংখ্যা তৈরি করে।

উদাহরণ

এটি Rঅ্যালগরিদম চিত্রিত করতে কোড কাজ করছে ।

n <- 1e4
rho <- sqrt(runif(n))
theta <- runif(n, 0, 2*pi)
x <- rho * cos(theta)
y <- rho * sin(theta)
plot(x, y, pch=19, cex=0.6, col="#00000020")

এখানে চিত্র বর্ণনা লিখুন


3

প্রত্যাখ্যান স্যাম্পলিং ব্যবহার করা যেতে পারে। এর অর্থ আমরা 2D ইউনিফর্ম বিতরণ থেকে নমুনা নিতে পারি এবং ডিস্কের শর্ত পূরণ করে এমন নমুনা নির্বাচন করতে পারি।

এখানে একটি উদাহরণ।

x=runif(1e4,-1,1)
y=runif(1e4,-1,1)

d=data.frame(x=x,y=y)
disc_sample=d[d$x^2+d$y^2<1,]
plot(disc_sample)

এখানে চিত্র বর্ণনা লিখুন


3
এটি ওপি কর্তৃক গৃহীত পদ্ধতির একটি ভাল বিকল্প। সহজ এবং দক্ষ। এটি প্রকৃতপক্ষে প্রশ্নটির দিকে নজর দেয় না, যা সমানভাবে বিতরণ করা বৈকল্পিকগুলি উত্পাদন করার জন্য পোলার স্থানাঙ্ক পদ্ধতিতে কীভাবে পরিবর্তন করতে পারে তা উদ্বেগ করে। কেন আমরা যত্ন নিতে পারি? কারণ প্রভাব: একবার আপনি কি জানেন কিভাবে পোলার স্থানাঙ্ক অবিশেষে বিতরণ পয়েন্ট জেনারেট করতে, আপনি প্রত্যাখ্যান স্যাম্পলিং (এবং অন্যান্য পরিচিত পদ্ধতি) ব্যবহার করতে পারেন পোলার স্থানাঙ্ক নমুনা অঞ্চলে যে নিষেধাজ্ঞামূলকভাবে কার্টিজিয়ান স্থানাঙ্ক নমুনা জটিল হতে পারে থেকে (hypocycloids মনে , এই ক্ষেত্রে).
whuber

1
π/4

@ আমার উত্তর মন্তব্য করে আমাকে শিক্ষিত করার জন্য ধন্যবাদ!
হাইটাও ডু

3

আমি আপনাকে একটি সাধারণ এন-ডাইমেনশনাল উত্তর দেব যা অবশ্যই দ্বি-মাত্রিক ক্ষেত্রে খুব কার্যকর। তিন মাত্রায় একটি ডিস্কের এনালগ হ'ল একটি শক্ত বল (গোলক) এর আয়তন।

আমি আলোচনা করতে যাচ্ছি দুটি পন্থা আছে। এর মধ্যে একটিকে আমি "সুনির্দিষ্ট" বলব এবং আপনি এটির সাথে আর এর সাথে একটি সম্পূর্ণ সমাধান পেয়ে যাবেন second দ্বিতীয়টি যাকে আমি হিউরিস্টিক বলি , এবং এটি কেবল ধারণা, কোনও সম্পূর্ণ সমাধান সরবরাহ করা হয় না।

"যথাযথ" সমাধান

আমার সমাধান মার্সাগলিয়া এবং মুলারের কাজের উপর ভিত্তি করে । মূলত, এটি এমনটি ঘটে যাতে গৌসিয়ান ভেক্টর তার আদর্শ হিসাবে স্বাভাবিক হয়ে যায় আপনাকে একটি দ্বিমাত্রিক হাইপারস্পিয়ারে অভিন্ন বিতরণ পয়েন্ট দেয়:

এখানে চিত্র বর্ণনা লিখুন

1/

n <- 1e4
rho <- sqrt(runif(n))
# d - # of dimensions of hyperdisk
d = 2
r = matrix(rnorm(n*d),nrow=n,ncol=d)
x = r/rep(sqrt(rowSums(r^2))/rho,1)
plot(x[,1], x[,2], pch=19, cex=0.6, col="#00000020")

এখানে চিত্র বর্ণনা লিখুন

এখানে 3 ডি কেসের জন্য একটি কোড স্নিপেট, যেমন একটি শক্ত বল:

library(scatterplot3d)
n <- 1e3
# d - # of dimensions of hyperdisk

d=3
rho <- (runif(n))^(1/d)
r = matrix(rnorm(n*d),nrow=n,ncol=d)
x = r/rep(sqrt(rowSums(r^2))/rho,1)

scatterplot3d(x[,1], x[,2], x[,3])

এখানে চিত্র বর্ণনা লিখুন

তাত্ত্বিক পদ্ধতির

ভীএন(আর)=πএন2Γ(এন2+ +1)আরএন
আরএন

Σআমি=1এক্সআমি2<আর2

1+ +2


@ সিলভারফিশ, আপনি ঠিক বলেছেন, আমি ভাষাটি ঠিক করেছি
আকসকল

@ সিলভারফিশ, গাউসিয়ান বৈচিত্রগুলি ব্যবহারের কারণে এটি ধীরগতি সম্পন্ন তবে উচ্চ মাত্রিক ক্ষেত্রে সাধারণ প্রত্যাখ্যানের নমুনার চেয়ে দ্রুততর হতে পারে, এটি অনেকের কাছে স্পষ্ট নয় যদিও এটি ভিন্ন বিষয়
আকসাকাল

1/,

@ হুবার, আমি কপি করার সময় অনুলিপি করছিলাম, কিউব পাওয়ারের উপর একটি টাইপো সংশোধন করছিলাম। আমরা যদি গউসিয়ান ব্যবহার করি তবে প্রত্যাখ্যানের নমুনা নেওয়া ভাল নয়, সুতরাং গাউসের চেয়ে দ্রুততর বেল আকারের কিছু ব্যবহার করতে হবে, আপনি ঠিক বলেছেন
আকসকল

0

এখানে বিকল্প সমাধান রয়েছে R:

n <- 1e4
## r <- seq(0, 1, by=1/1000)
r <- runif(n)
rho <- sample(r, size=n, replace=T, prob=r)
theta <- runif(n, 0, 2*pi)
x <- rho * cos(theta)
y <- rho * sin(theta)
plot(x, y, pch=19, cex=0.6, col="#00000020")

এখানে চিত্র বর্ণনা লিখুন


4
আপনি এই উত্তরটি সরল ইংরেজিতে ব্যাখ্যা করতে পারেন? আমরা আসলে কোনও কোড সহায়তা সাইট নই, এবং কোড-উত্তরগুলির উত্তর নিরুৎসাহিত করা উচিত।
গুং - মনিকা পুনরায়

5
01r <- seq(0, 1, by=1/10)

1
@ হুবুকার এটি উল্লেখ করার জন্য ধন্যবাদ। এটি আসলে আমার সমাধানটির মূল ধারণা। আমার দৃষ্টিভঙ্গি ছিল ভিন্ন ভিন্ন রেডিয়ি সহ অনেকগুলি অভিন্ন বৃত্ত তৈরি করা এবং প্রতিটি বৃত্তের জন্য পয়েন্টের সংখ্যা তার ব্যাসার্ধের দৈর্ঘ্যের সাথে সমানুপাতিক। অতএব, বিভিন্ন রেডিয়ি সহ বৃত্তগুলির একক দৈর্ঘ্যে, পয়েন্টগুলির সংখ্যা একই। পৃথক প্রকৃতি এড়াতে, আমরা rইউনিফর্ম (0,1) থেকে নমুনা নিতে পারি ।
Q_Li
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.