এক্সেল - এলোমেলো সংখ্যা ফাংশনের জন্য গড় নির্ধারণ করুন


3

আমি ভাবছি যে কেউ এক্সেল-এ র্যান্ডমবাইটওয়ান ফাংশনটি ব্যবহার করার উপায় আছে কিনা তা যদি জানে তবে এক্সেলটিতে এলোমেলো সংখ্যার একটি সিরিজ উত্পন্ন করতে পারে তবে সেই এলোমেলো সংখ্যাগুলি একটি নির্দিষ্ট গড়ের সমান হয়ে আসে। আমি একটি মূল্যের শিটটি পূরণ করতে এটি ব্যবহার করব, উদাহরণস্বরূপ, যদি আমি 100 টি সারি পূরণের জন্য RANDBETWEEN ব্যবহার করি এবং আমার গড় গড় প্রয়োজন $ 50 তবে আমি জানি যে আমি RANDBETWEEN (25,75) ব্যবহার করে সারিগুলি পূরণ করতে পারি could এবং এটিকে 100 টি সারিতে টেনে আনুন তবে এটি আমার প্রয়োজনীয় গড় দামের বাইরে আসবে না। কেউ কি জানেন যে এটি আমাকে গড় গড় নির্ধারণের অনুমতি দিয়ে সংশোধন করা সম্ভব? কোন সাহায্যের জন্য ধন্যবাদ


এলোমেলো সংখ্যার গড় টার্গেট গড়ে তোলার আসলে একটি উপায় রয়েছে তবে এর জন্য দুটি এলোমেলো পদক্ষেপ প্রয়োজন। মধ্যম = লক্ষ্য দিয়ে শুরু করুন। আপনার উদাহরণে, RANDBETWEEN (25,75) এর 50 এর মাঝারি হওয়া উচিত a বিশাল সংখ্যক মানগুলির জন্য, এটি নিকটে হবে। পদক্ষেপ 2: আপনি ত্রুটি ("সমাধানের জন্য" বা ভিবিএ) অপসারণ না করা পর্যন্ত এলোমেলোভাবে মানগুলিতে পেনি অ্যাডজাস্টমেন্ট বরাদ্দ করুন।
ফিক্সার 1234

উত্তর:


2

একটি লটারির কথা বিবেচনা করুন যেখানে স্পনসর একগুচ্ছ টিকিট বিক্রি করে (আসুন 100 বলুন), সেগুলি একটি পাত্রে রাখুন (আসুন একে একটি টুপি বলুন) এবং তারপরে এলোমেলোভাবে কে টুর্নামেন্টটি টিকিট নির্বাচন করে কে পুরস্কার জিতবে তা নির্ধারণ করার জন্য। এখন ধরুন এখানে একাধিক পুরষ্কার রয়েছে; স্পনসর প্রথম পুরস্কার বিজয়ী আঁকেন, তারপরে দ্বিতীয় এবং তার পরে তৃতীয়। স্বাভাবিকভাবেই, বিজয়ী টিকিটগুলি টানা টানা টুপির পরে পুনরায় স্থাপন করা হয় না, কারণ এটি তাদের আবার নির্বাচিত হতে দেয়, ফলস্বরূপ একক টিকিট একাধিক পুরষ্কার জিততে পারে, যা নিয়ম বিরোধী। সুতরাং, প্রথমটির পরে সমস্ত নির্বাচন সীমাবদ্ধ । এক অর্থে, গেমটি কারচুপি করা হয়েছে, যাতে পরবর্তী বিজয়ীরা কেবল কোনও বিজয়ী পুল থেকে আসতে পারে, কোনও একক টিকিটে একাধিক পুরষ্কার না দেওয়ার লক্ষ্যে পৌঁছানোর ব্যবস্থা হিসাবে।

এখন ধরুন যে 100 টি পুরষ্কার রয়েছে - প্রত্যেকে কিছু না কিছু জিতবে। চূড়ান্ত টিকিটটি টুপি থেকে টেনে আনার সময় সেখানে কেবলমাত্র একটি টিকিট রয়েছে। নির্বাচন পূর্ব নির্ধারিত হওয়ার পয়েন্টে সীমাবদ্ধ। এবং আপনি জানেন যে 100 তম বিজয়ী কে - এই যে দুঃখের লোকটি ভিড়ের মধ্যে দাঁড়িয়ে তার নাম ডাকার অপেক্ষায়; সর্বশেষ অবশিষ্ট বিজয়ী।

আপনার সমস্যাটি একই কৌশল দ্বারা সমাধান করা যেতে পারে:

  • "সত্যিকারের" এলোমেলো সংখ্যার সাথে শুরু করুন (যার দ্বারা আমি সংখ্যার পরিসংখ্যানগতভাবে আপনার পছন্দগুলির সম্ভাব্য বন্টন, যেমন, 25-75 পরিসরের উপরে অভিন্ন বিতরণ অনুযায়ী বিতরণ করেছি) এবং তারপরে শুরু করুন
  • নির্ধারিত গড়ের লক্ষ্যে পৌঁছানোর ব্যবস্থা হিসাবে পরবর্তী সংখ্যাগুলি (বিতরণ সামঞ্জস্য করে) সীমাবদ্ধ করুন।

এবং সম্ভাব্যতা বন্টনকে সীমাবদ্ধ করার পক্ষে যুক্তিটি সহজ: লক্ষ্যটি পৌঁছানো অসম্ভব করে তোলে এমন কোনও সংখ্যা উত্পন্ন করবেন না (এবং দামের শীটে প্রবেশ করুন)।

নির্দিষ্ট গড়ের চেয়ে নির্দিষ্ট মোট অর্জন হিসাবে লক্ষ্যটি ভাবা আমার পক্ষে সহজ মনে হয় । অবশ্যই এগুলি যৌক্তিকভাবে সমতুল্য। উদাহরণস্বরূপ, ধরুন যে আপনি 100 এর পরিবর্তে মাত্র 4 নম্বর চান You আপনি গড়টি 50 হতে চান, সুতরাং মোটটি 4 × 50 = 200 হতে হবে। ধরা যাক আপনি প্রথম দুটি সংখ্যা তৈরি করেছেন, v 1 = 68 এবং v 2 = 70। এই 138 পর্যন্ত যোগ, তাই বনাম 3 + + V 4 62. হওয়া আবশ্যক যদি বনাম 3 50 হয়, তাহলে বনাম 4 12 হতে, যা 25-75 বৈধ সীমার বাইরে থাকবে। 68 + 70 + ভি 3 + 25 = 200 ফলন সমাধান করা v3 = 200− (68 + 70 + 25) = 37, সুতরাং আমরা ভি 3 কে 25 এবং 37 এর মধ্যে মিথ্যাবলি।একবার ভি 3 বেছে নেওয়া হলে, ভি 4 নির্ধারিত হয়; এটি 62− v 3 হওয়া আবশ্যক; অর্থাৎ 200− ( ভি 1 + ভি 2 + ভি 3 )। এটি 100 তম লটারির টিকিটের সাথে অবস্থার সাথে সাদৃশ্যপূর্ণ; প্রথম এন −1 টি পছন্দকরার পরে এটি অবশ্যই অবশিষ্টথাকবে।

এটি ভিবিএর জন্য একটি কাজের মতো শোনাচ্ছে তবে আমি একটি কার্যপত্রক-সূত্রের সমাধান পেয়েছি। নিম্নলিখিতটিতে, আমি পছন্দসই সম্ভাবনা বিতরণের (25 এবং 75) পরামিতিগুলির সীমাটি তৈরি করতে বেছে নিয়েছি; উদাহরণস্বরূপ, সূত্রে হার্ড-কোডিংয়ের পরিবর্তে এগুলি পৃথক কক্ষে ( A1এবং B1) রাখুন। এবং আমি কয়েকটি সহায়ক কলাম ব্যবহার করি।

  • C1সংখ্যার কাঙ্ক্ষিত মোটে সেট করুন । আপনি শুধু ধ্রুবক মান লিখুন, অথবা যেমন গনা করতে  average_number  ×  number_of_numbers , অর্থাত =AVERAGE(A1, B1) * 100
  • সেট C2করুন =C$1-SUM(G$1:G1)
  • সেট D1করুন =100-ROW()
  • সেট E1করুন =MAX(C1-D1*B$1, A$1)
  • সেট F1করুন =MIN(C1-D1*A$1, B$1)
  • সেট G1করুন =RANDBETWEEN(E1, F1)
  • টেনে আনুন C2, D1, E1, F1, এবং G1সারি থেকে 100 নিচে।

আলোচনা:

এন 100 হওয়া যাক , এলোমেলো সংখ্যার সংখ্যা এবং সুতরাং সারিগুলির সংখ্যা। নীচে আমি পূর্বে যে চার-সারির উদাহরণ দিয়েছি তার সাধারণ প্রয়োগ রয়েছে।

প্রতিটি সারি i (1 ≤ in ) এর জন্য,

  • Giহয় বনাম আমি , আমি র্যান্ডম সংখ্যা -th।
  • Eiএবং এমন রেঞ্জের নিম্ন এবং উপরের সীমানা যা থেকে নির্বাচন করা হয়েছে (যেমন সূত্র থেকে স্পষ্টতই )।FiGiGi
  • Diথেকে নেমে গন্য এন -1 সারি 1 0 সারিতে এন ; উদাহরণস্বরূপ, এটি বর্তমানের নীচে সারিগুলির সংখ্যা দেয়। আপনি যদি 1 ব্যতীত অন্য সারিতে শুরু করেন তবে সেই সূত্রটি সেই অনুযায়ী সামঞ্জস্য করুন।
  • C1হয় বনাম 1 + + V 2 + + ... বনাম এন -1 + + V এন = - ( বনাম 1 + + V 2 + + ... বনাম ই-2 + + V ই-1 ), যা সমান (জন্য লক্ষ্য মান) বনাম আমি + V আমি + 1 +… + ভি এন − 1 + ভি এন
    CiC1
  • D1*A$1→ × ন্যূনতম বৈধ মান বনাম আমি +1 + + V আমি + 2 + + ... + + V এন -1 + + V এন সুতরাং ( - × ) জন্য উচ্চ আবদ্ধ হয় বনাম আমি তা লক্ষ্য মোট পৌঁছানোর সম্ভব হবে। DiA1
    C1-D1*A$1CiDi A1

    চারি সারির উদাহরণটি আবার ঘুরে দেখা যাক। যদি (অনুমানভিত্তিক) ভি 1 126 হয়, তবে ভি 2 , ভি 3 , এবং ভি 4 25 ডলার হওয়া সীমাবদ্ধতার কারণে ভি 1 + ভি 2 + ভি 3 + ভি 4 = 200 এর লক্ষ্য অর্জন করা অসম্ভব । তবে তবে যদি ভি 1 125 হয়, তবে ভি 2 = ভি 3 = ভি 4 = 25 দিয়ে লক্ষ্য অর্জন করা সম্ভব হবে । সুতরাং 125 ভি 1 এর জন্য একটি উচ্চতর গন্ডী । তবে অবশ্যই ভি1 এছাড়াও 75 ডলার হতে হবে; 125 সীমাটি মোট। বনাম মান সীমাবদ্ধতার উভয় সেট (উভয় 25-75 পরিসীমা এবং সীমাবদ্ধতার মোট পৌঁছানোর প্রয়োজনীয় সন্তুষ্ট করা আবশ্যক এন  50 ×), তাই তারা (উপরের এবং নীচের) প্রতিটি পাশ দিয়ে দুই সীমার কঠিন পূরণ করতে হবে।
    তাইজন্য সর্বোচ্চ সীমা বনাম আমিFi

  • এবং v i এর জন্য নিম্ন সীমাবদ্ধ ।Ei

আমি এন  = 10 দিয়ে কী পেয়েছি তার একটি স্ন্যাপশট এখানে :

                    পত্রকের স্ন্যাপশট

স্বভাবতই, চাপ F9দিয়ে এক্সেলকে শীটটি পুনরায় গণনা করতে এবং এলোমেলো সংখ্যার একটি নতুন সেট তৈরি করে। তবে G1:G10সর্বদা 500 পর্যন্ত যোগ করুন; অর্থাৎ গড় ৫০।


যদি ভি এন , 1 , ভি 2 ,…, ভি এন − 2 , এবং ভি এন − 1 দ্বারা নির্ধারিত হয় তবে এটি এখনও সত্যই "এলোমেলো"?

এটা একটি মজার প্রশ্ন।

  • যদি এন 1 হয়, v 1 50 এর জন্য বাধ্য হয় This এটি স্পষ্টত এলোমেলো নয়। তবে অবশ্যই এটি একটি প্রান্তের কেস।
  • যদি এন 2 হয়, ভি 1 এলোমেলোভাবে বেছে নেওয়া হয়, তবে ভি 2 100− ভি 1 তে সেট করা আছে । স্পষ্টত ভি 2 ভি 1 এর সাথে স্বাধীন নয় । কিন্তু

    • পি ( ভি 2 = 25) = পি ( ভি 1 = 75) = 1/51।
    • পি ( ভি 2 = 26) = পি ( ভি 1 = 74) = 1/51।
    •       ︙
    • পি ( ভি 2 = 75) = পি ( ভি 1 = 25) = 1/51।

    সুতরাং ভি 2 সমানভাবে 25-75 পরিসীমাতে বিতরণ করা হয়, ভি 1 এর সমান । 

  • লটারির উদাহরণে ফিরে যাওয়া - 100 তম পুরষ্কারের বিজয়ী প্রথম 99 এর বিজয়ীদের দ্বারা নির্ধারিত হয় But সুতরাং শততম পুরষ্কার বিজয়ী এলোমেলো।
  • এন > ২ এর জন্য এই প্রশ্নের গণিত করতে আমার সমস্যা হচ্ছে So সুতরাং আমি একটি অভিজ্ঞতা অভিজ্ঞতা নিয়েছিলাম। আমি 25 এবং 75 এর মধ্যে 100 টি এলোমেলো সংখ্যা তৈরি করেছি এবং আমি 250 বার পুনরায় গণনা করেছি, ফলাফলগুলি সংগ্রহ করছি। তারপরে আমি বেশ কয়েকটি ভি মানগুলির জন্য ফ্রিকোয়েন্সি বিতরণগুলি চার্ট করেছি :

     1    10    50

    (চিত্রগুলি নিজস্ব আকারের সংস্করণগুলির লিঙ্ক।

    ভি 91 এর মাধ্যমে বিতরণগুলি মোটামুটি অভিন্ন দেখায়:

    90   91

    তবে, ভি 92 থেকে শুরু করে আকর্ষণীয় কিছু ঘটতে শুরু করে:

    92   93

    নোট করুন যে আমাকে স্কেলটি v 94 এবং এর বাইরেও পরিবর্তন করতে হয়েছিল :

     94    95    96
    97   98
    99   100

    দেখে মনে হচ্ছে শেষ কয়েকটি ভি মানগুলির অ-ইউনিফর্ম বিতরণ রয়েছে। আমি অনুমান করি যে, n বড় হওয়ার সাথে সাথে এটি সম্ভবত প্রথম এন −10 (বা তাই) মানগুলি পছন্দসই গড় থেকে দূরে চলে যাবে এবং শেষের কয়েকটি মানকে রেঞ্জের শেষ প্রান্তে চূড়ান্ত সংখ্যায় বাধ্য করবে গড় ট্র্যাক ফিরে আনতে। তবে, কমপক্ষে, সমস্ত মানগুলির মধ্যে প্রতিসম বিতরণ হওয়া উচিত।

    • তাদের অসম্পূর্ণ হওয়ার কোনও কারণ নেই।
    • আমার চার্টগুলি প্রতিসাম্যযুক্ত বলে মনে হচ্ছে।

আপনি যদি এই সমস্যাটি অনুসরণ করতে আগ্রহী হন তবে আপনি এটি ম্যাথ স্ট্যাক এক্সচেঞ্জে জিজ্ঞাসা করতে চাইতে পারেন - তারা প্রাতঃরাশের জন্য এই জাতীয় প্রশ্ন খায়।


আকর্ষণীয়, আপনার প্রাথমিক ধারণা ব্যতীত সত্য নয়। শেষ মান সীমাবদ্ধ করতে হবে না। ত্রুটি সংশোধন এলোমেলোভাবে বরাদ্দ করা থাকলে এটি এখনও এলোমেলো (2 পর্যায় প্রক্রিয়া)। প্রশ্নে আমার মন্তব্য দেখুন।
ফিক্সার 1234

@ fixer1234: আমি অনুমান করা হয়নি এটি করা হয়েছিল সীমাবদ্ধ; আমি কেবল এটি একটি সমাধান প্রস্তাব করছি । আপনি কি ভিবিএ ছাড়াই এক্সেলে আপনার উত্তরটি প্রয়োগ করতে পারবেন?
স্কট 1

সহজেই হয় না, যাইহোক।
ফিক্সার 1234

1

তাত্ত্বিকভাবে একটি নির্দিষ্ট গড়ের সাথে একটি র্যান্ডম (বা এমনকি সিউডো-এলোমেলো) তালিকা উত্পন্ন করা সম্ভব নয় কারণ এর জন্য পরবর্তী মানগুলি পূর্বের মানগুলির উপর নির্ভর করে এবং আপনাকে ফিরে যেতে এবং কিছুতে পূর্বের মানগুলি পরিবর্তন করতে বাধ্য করতে পারে মামলা।


1

ক্যাথরিন যেমন ব্যাখ্যা করেছিলেন তেমন অন্তর্নির্মিত কার্যকারিতা নেই। এলোমেলো ডেটা তৈরির পরে আপনাকে ফিরে যেতে হবে এবং ডেটাটি কিছুটা পরিবর্তন করতে হবে। সুতরাং ভিবিএ বা অন্যান্য প্রোগ্রামিং ভাষা দিয়ে কাজটি করা যেতে পারে।

এখানে একটি ভিবিএ সমাধান রয়েছে। এটি যা করে তা হ'ল:

  1. ব্যবহারকারী এলোমেলো ক্রিয়াকলাপের জন্য ন্যূনতম, সর্বাধিক নির্দিষ্ট করে এবং কত নম্বর তৈরি করা হবে তা সুনির্দিষ্ট করে
  2. প্রোগ্রামাম এলোমেলো ডেটা উত্পন্ন করে
  3. প্রোগ্রামাম পছন্দসই রাজ্য এবং বর্তমান অবস্থার মধ্যে পার্থক্য গণনা করে
  4. যদি সংখ্যাগুলি খুব বেশি হয়, তবে এটি একবারে একটি সারি পরিদর্শন করে এবং ঠিক না হওয়া পর্যন্ত -1 বিয়োগ করে। যদি সংখ্যাগুলি খুব কম হয় তবে এটি একবারে একটি সারি পরিদর্শন করে এবং ঠিক না হওয়া পর্যন্ত এটি +1 যোগ করে।

বিকল্প 1: একটি কার্যনির্বাহী সমাধান ডাউনলোড করুন

সতর্কতা: ভিবিএ না জেনে আপনি যে কোনও জায়গায় ইন্টারনেটে ডাউনলোড করা ম্যাক্রোগুলি চালানো আপনার পিসিকে ক্ষতি করতে পারে। যে কারণে দ্বিতীয় বিকল্প আছে।

কাজের সমাধানটি এখানে ডাউনলোড করা হবে । এক্সেল 2013 এ তৈরি করা হয়েছিল, সুতরাং এটি এক্সেল 2010 এবং তারপরেও ঠিক আছে। ফাইলটি খোলার পরে মাইক্রোসফ্ট দ্বারা দুটি সুরক্ষা পপআপ থাকতে হবে: পপআপ 1 , পপআপ 2 । আপনি তাদের গ্রহণ করতে হবে। দৌড়ানো খুব সহজ: কেবল বোতামটি ক্লিক করুন ...

বিকল্প 2: ম্যাক্রো ইনস্টল করতে

এক্সেল খুলুন -> Alt + F11 -> সন্নিবেশ করুন -> মডিউল -> নিম্নলিখিত কোডটি পেস্ট করুন -> Ctrl + S -> এবং ড্রপ-ডাউন তালিকা থেকে 'এক্সেল ম্যাক্রো-সক্ষমযোগ্য ওয়ার্কবুক (* .xlsm)' নির্বাচন করুন

Sub RandomGenerator()
    Dim min, max, cnt As Variant

    Do While True
        min = InputBox("Set the minimum", "Generating random with average", 25)
        If min = "" Then Exit Sub
        If Not IsNumeric(min) Then
            MsgBox "Minimum has to be an integer. Try again.", vbExclamation, "Wrong input"
        ElseIf CInt(min) <= 0 Then
            MsgBox "Minimum has to be a positive integer. Try again.", vbExclamation, "Wrong input"
        Else
            Exit Do
        End If
    Loop

    Do While True
        max = InputBox("Set the maximum", "Generating random with average", 75)
        If max = "" Then Exit Sub
        If Not IsNumeric(max) Then
            MsgBox "Maximum has to be an integer. Try again.", vbExclamation, "Wrong input"
        ElseIf max <= min Then
            MsgBox "Maximum has to be greater than minimum. Try again.", vbExclamation, "Wrong input"
        ElseIf ((CInt(max) + CInt(min)) Mod 2) = 1 Then
            MsgBox "Average of (min + max) has to be even. Try again.", vbExclamation, "Wrong input"
        Else
            Exit Do
        End If
    Loop

    Do While True
        cnt = InputBox("Set the count of numbers to generate", "Generating random with average", 100)
        If cnt = "" Then Exit Sub
        If Not IsNumeric(cnt) Then
            MsgBox "Count has to be an integer. Try again.", vbExclamation, "Wrong input"
        ElseIf CInt(cnt) <= 0 Then
            MsgBox "Count has to be a positive integer. Try again.", vbExclamation, "Wrong input"
        Else
            Exit Do
        End If
    Loop

    Call generateRandomWithAverage(CInt(min), CInt(max), CInt(cnt))
End Sub

Sub generateRandomWithAverage(min As Integer, max As Integer, cnt As Integer)
    Dim random As Double
    Dim i, avg, sum, desiredAvg, diff As Integer

    sum = 0
    desiredAvg = (min + max) / 2

    For i = 1 To cnt
        Cells(i, 1) = Excel.Application.WorksheetFunction.RandBetween(min, max)
        sum = sum + Cells(i, 1)
    Next

    diff = sum - desiredAvg * cnt

    i = 1
    Do While diff <> 0
        If diff > 0 Then
            If Cells(i, 1) = min Then GoTo continue
            Cells(i, 1) = Cells(i, 1) - 1
            diff = diff - 1
        Else
            If Cells(i, 1) = max Then GoTo continue
            Cells(i, 1) = Cells(i, 1) + 1
            diff = diff + 1
        End If

continue:
        i = i + 1
        If i > cnt Then
            i = 1
        End If
    Loop

End Sub

ম্যাক্রো চালাতে:

  1. আপনি যে ওয়ার্কশিটে থাকতে চান তা নিশ্চিত করুন! এবং কার্যপত্রকটিতে যে কোনও জায়গায় ক্লিক করুন! (কারণ এই ম্যাক্রো অ্যাক্টিভেটেড ওয়ার্কশিটে চালিত হয়)
  2. Alt + F11 -> কোডের দ্বিতীয় সারিতে ক্লিক করুন -> F5 টিপুন

আপনি ওয়ার্কশিটে একটি বোতামও তৈরি করতে পারেন এবং এতে ম্যাক্রোও বরাদ্দ করতে পারেন - এটি আরও ব্যবহারকারী-বান্ধব এবং আপনার সঠিক ওয়ার্কশিটে রয়েছেন তা যাচাই করতে হবে না।


সব তথ্যের জন্য ধন্যবাদ! যদিও আমি নিশ্চিত যে এটি কাজ করবে, আমি কম্পিউটারের সাথে যথেষ্ট দক্ষ নই যে আমি এটি সঠিকভাবে করব কিনা তা নিশ্চিত করার জন্য। আমি যদিও আপনার এই প্রচেষ্টার প্রশংসা করি
কেসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.