গাণিতিক তত্ত্ব থেকে "opালু ইউনিফর্ম বিতরণ" থেকে এলোমেলো সংখ্যা তৈরি করুন


9

কিছু উদ্দেশ্যে, আমাকে "opালু ইউনিফর্ম" বিতরণ থেকে এলোমেলো সংখ্যা (ডেটা) তৈরি করতে হবে। এই বিতরণের "opeাল" কিছু যুক্তিসঙ্গত ব্যবধানে পরিবর্তিত হতে পারে এবং তারপরে আমার বিতরণটি uniformালের উপর ভিত্তি করে ইউনিফর্ম থেকে ত্রিভুজাকারে পরিবর্তিত হওয়া উচিত। এখানে আমার ব্যয়:

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

আসুন এটি সহজ করা যাক এবং থেকে তে ডেটা ফর্ম উত্পন্ন করুন (নীল, লাল একরকম বিতরণ)। নীল লাইনের সম্ভাব্যতা ঘনত্ব ফাংশনটি পেতে আমার কেবল সেই লাইনের সমীকরণ প্রয়োজন। এভাবে:0বি

(এক্স)=টি(φ)এক্স+ +ওয়াই(0)

এবং যেহেতু (ছবি):

টি(φ)=1/বি-ওয়াই(0)বি/2ওয়াই(0)=1বি-টি(φ)বি2

আমাদের তা আছে:

(এক্স)=টি(φ)এক্স+ +(1বি-টি(φ)বি2)

যেহেতু পিডিএফ, তাই সিডিএফ সমান:(এক্স)

এফ(এক্স)=টি(φ)এক্স22+ +এক্স(1বি-টি(φ)বি2)

এখন একটি ডেটা জেনারেটর তৈরি করা যাক। ধারণাটিটি হ'ল, আমি যদি , র্যান্ডম সংখ্যার করতে পারি তবে আমি এখানে বর্ণিত অভিন্ন বিতরণ থেকে নম্বর পেয়েছি যদি তা গণনা করা যায় । সুতরাং, যদি আমি নির্দিষ্ট সঙ্গে আমার বন্টন থেকে 100 র্যান্ডম সংখ্যা প্রয়োজন , যেকোনো জন্য সমবন্টন থেকে আছে "ঢালু বন্টন" থেকে, এবং হিসেবে নির্ণিত করা যেতে পারে:φ,বিএক্স(0,1)φ,বিটিআমি(0,1)এক্সআমিএক্স

টি(φ)এক্সআমি22+ +এক্সআমি(1বি-টি(φ)বি2)-টিআমি=0

এই তত্ত্বটি থেকে আমি পাইথনে কোড তৈরি করেছি যা দেখে মনে হচ্ছে:

import numpy as np
import math
import random
def tan_choice():
    x = random.uniform(-math.pi/3, math.pi/3)
    tan = math.tan(x)
    return tan

def rand_shape_unif(N, B, tg_fi):
    res = []
    n = 0
    while N > n:
        c = random.uniform(0,1)
        a = tg_fi/2
        b = 1/B - (tg_fi*B)/2
        quadratic = np.poly1d([a,b,-c])
        rots = quadratic.roots
        rot = rots[(rots.imag == 0) & (rots.real >= 0) & (rots.real <= B)].real
        rot = float(rot)
        res.append(rot)
        n += 1
    return res

def rand_numb(N_, B_):
    tan_ = tan_choice()
    res = rand_shape_unif(N_, B_, tan_)
    return res

তবে উত্পন্ন সংখ্যাগুলি rand_numbশূন্যের নিকটে বা বি এর (যা আমি 25 হিসাবে সেট করেছি) খুব কাছাকাছি। কোনও বৈকল্পিকতা নেই, যখন আমি 100 নম্বর উত্পন্ন করি তখন তাদের সমস্তগুলি 25 এর কাছাকাছি বা সমস্ত শূন্যের কাছাকাছি থাকে। এক রান:

num = rand_numb(100, 25)
numb
Out[140]: 
[0.1063241766836174,
 0.011086243095907753,
 0.05690217839063588,
 0.08551031241199764,
 0.03411227661295121,
 0.10927087752739746,
 0.1173334720516189,
 0.14160616846114774,
 0.020124543145515768,
 0.10794924067959207]

সুতরাং আমার কোড কিছু খুব অবশ্যই ভুল আছে। আমার উপার্জন বা কোড সম্পর্কে কেউ আমাকে সহায়তা করতে পারেন? আমি এখন এ সম্পর্কে পাগল, আমি কোনও ভুল দেখতে পাচ্ছি না। আমি মনে করি আর কোড আমার অনুরূপ ফলাফল দেবে।


2
আপনার যদি কেবল এলোমেলো সংখ্যা উত্পন্ন করার প্রয়োজন হয়, আপনার বিতরণটি একেবারে কাজ করার দরকার নেই। কেবল আপনার ছবিতে ডার্টগুলি ফেলে দিন এবং তাদের এক্স-স্থানাঙ্কগুলি বজায় রাখুন, তবে যখন একটি ডার্ট বাম ত্রিভুজটিতে " " লেবেলযুক্ত থাকে , তখন এর এক্স-স্থানাঙ্কটি থেকে । উদাহরণস্বরূপ, কোনও মান দিন এবং (একটি আসল প্যারামিটার যা এবং মধ্যে দেওয়া মানগুলি যখন আপনার বিতরণ তৈরি করে) এবং আপনাকে প্রয়োজনীয় এলোমেলো মান হিসাবে সেট করে। এখানে কোডটি রয়েছে:φএক্সবি-এক্সBtheta-11nRx<-runif(n,-1,1);x<-(ifelse(runif(n,-1,1)>theta*x,-x,x)+1)*(B/2)
শুক্রবার

উত্তর:


9

আপনার উদ্ভট ঠিক আছে। মনে রাখবেন যে একটি ইতিবাচক ঘনত্ব পেতে(0,বি), আপনি বাধা আছে

বি2কষাφ<2।
আপনার কোডে বি=25 সুতরাং আপনি গ্রহণ করা উচিত φ মধ্যে ±কষা-12625আপনার কোডটি ব্যর্থ হয়েছে।

আপনি (এবং হওয়া উচিত) চতুষ্কোণীয় solver ব্যবহার এড়াতে পারেন, এবং তারপরে 0 এবং এর মধ্যে শিকড় নির্বাচন করুন বি। চতুর্ভুজ বহুপদী সমীকরণ ইনএক্স সমাধান করা হয়

এফ(এক্স)=টি
সঙ্গে
এফ(এক্স)=12কষাφএক্স2+ +(1বি-বি2কষাφ)এক্স
নির্মাণ করে এফ(0)=0 এবং এফ(বি)=1; এছাড়াওএফ উপর বৃদ্ধি (0,বি)

এটি থেকে এটি যদি সহজে দেখা যায় তবে কষাφ>0, প্যারোবোলার যে অংশে আমরা আগ্রহী তা হ'ল প্যারোবোলার ডান দিকের একটি অংশ, এবং রাখার মূলটি দুটি মূলের সর্বোচ্চ, যা

এক্স=1কষাφ(বি2কষাφ-1বি+ +(বি2কষাφ-1বি)2+ +2কষাφটি)
বিপরীতে, যদি কষাφ<0, প্যারাবোলাটি উল্টো দিকে, এবং আমরা এর বাম অংশে আগ্রহী। রাখার মূলটি হ'ল সর্বনিম্ন। একাউন্টে সাইন ইনকষাφ এটি প্রদর্শিত হয় যে এটি একই মূল (যার সাথে এক) + +Δ) প্রথম ক্ষেত্রে তুলনায়।

এখানে কিছু আর কোড রয়েছে।

phi <- pi/8; B <- 2
f <- function(t) (-(1/B - 0.5*B*tan(phi)) + 
       sqrt( (1/B - 0.5*B*tan(phi))**2 + 2 * tan(phi) * t))/tan(phi)
hist(f(runif(1e6)))

হিস্টোগ্রাম ঘ

এবং সাথে φ<0:

phi <- -pi/8
hist(f(runif(1e6)))

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


1
আমি একটি ভুল করেছি, কারণ আমি আমার কোণটি সীমার বাইরে রেখেছি, আমি এটি পেয়েছি। তবে আপনার ব্যাখ্যাটি কেন আমি সংখ্যার দ্রাবক ব্যবহার করে উত্সাহ দেওয়া উচিতএফ(এক্স)এখনও আমার জন্য কুয়াশাচ্ছন্ন। আপনি কি আরও ব্যাখ্যা করার চেষ্টা করতে পারেন, দয়া করে? আইডি এটি পেতে ভালবাসা।
রবার্ট

@ রবার্ট আমি মনে করি আপনার কোডটির মান যদি ভাল হয় তবে φসঠিক. তবে এটি আপনাকে সম্ভাব্য সমস্যাগুলি ধরা থেকে বাধা দেয় (যদি কোনও সমাধান 0 এবং এর মধ্যে না হয় তবে কী হবেবি? নাকি উভয় সমাধান? বা যদি কোন বাস্তব সমাধান না থাকে?)। রেডিমেড সলভারটি ব্যবহার এড়াতে অতিরিক্ত কাজটি মূল্যবান।
এলভিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.