رفتن به مطلب

تولید اعداد تصادفی


reza abbaspour

ارسال های توصیه شده

سلام اساتید محترم

من میخواستم یک ماتریس یک سطری با 15 عنصر یا درایه های صفر و یک تصادفی تولید کنم و سپس با احتمال خطای مثلا یک سوم که بر روی درایه های این ماتریس اعمال میشه یک ماتریس دیگری را بسازم به شکل زیر نوشتم که با خطای یک سوم صفرها را به یک و یک ها را به صفر تبدیل کند

ولی در حلقه فور دومی چکار کنم که این احتمال بصورت راندوم صفر و یکها رو تغییر بدهد

[left]N = 15;
A = zeros(1,N);
A
for j = 1:N
       i = rand(1);   

                 if (i > 0.5)
                                  A(j) = 1;
                     else
                                 A(j) = 0;
                end
       
  end
A
for k = 1 : 3 : N
 
     if A(k) > 0;
               A(k) = 0 ;
          else 
               A(k) = 1 ;
       end
  end
A

 

و سوال دیگر اینکه اگر بخواهم تعداد آرایه ها رو از 15 مثلا به ده میلیارد ببرم خطای مموری میدهد برای رفع این مشکل چکار می تونم انجام بدهم.

از راهنمائیتان متشکرم

[/left]

لینک به دیدگاه
سلام اساتید محترم

من میخواستم یک ماتریس یک سطری با 15 عنصر یا درایه های صفر و یک تصادفی تولید کنم و سپس با احتمال خطای مثلا یک سوم که بر روی درایه های این ماتریس اعمال میشه یک ماتریس دیگری را بسازم به شکل زیر نوشتم که با خطای یک سوم صفرها را به یک و یک ها را به صفر تبدیل کند

ولی در حلقه فور دومی چکار کنم که این احتمال بصورت راندوم صفر و یکها رو تغییر بدهد

[left]N = 15;
A = zeros(1,N);
A
for j = 1:N
       i = rand(1);   

                 if (i > 0.5)
                                  A(j) = 1;
                     else
                                 A(j) = 0;
                end
       
  end
A
for k = 1 : 3 : N
 
     if A(k) > 0;
               A(k) = 0 ;
          else 
               A(k) = 1 ;
       end
  end
A[/left]

 

و سوال دیگر اینکه اگر بخواهم تعداد آرایه ها رو از 15 مثلا به ده میلیارد ببرم خطای مموری میدهد برای رفع این مشکل چکار می تونم انجام بدهم.

از راهنمائیتان متشکرم

 

سلام دوست عزیز

برای تولید اعداد رندوم صحیح می تونین از randi استفاده کنین.

فرقی هم نمی کنه تمام مقادیر رو یه جا تولید کنین یا داخل حلقه یکی یکی ایجاد کنین، نتیجه کاملا مشابه هست:

 

clear;
myrng = rng;
N = 15;

A = randi([0 1],[1 N])

rng(myrng)
B = zeros(1,N);
for i = 1:15
   B(i) = randi([0 1]);
end
B

 

اما برای سوال دومتون، ماتریس با فرمت دابل برای هر داریه 8 بایت نیاز داره، یعنی برای داشتن ماترسی با این ابعاد اگه درست نوشته باشم به انقدر گیگ رم احتیاج دارین:

 

10000000000*8/(1024*1024*1024)

ans =

  74.5058

 

single و اینا هم جواب نمیده، شاید از sparse بشه استفاده کرد.:a030:

لینک به دیدگاه

سلام دوست بزرگوار

بسیار ممنون و متشکرم که برای سوال بنده وقت گذاشتین

اون خطای مموری که برای مقادیر زیاد بوجود میاد مربوط به خود مطلب هست یا مموری خود کامپیوتر؟

آیا روشی نیست که این مشکل رو خود مطلب بتونه رفع کنه؟

من یروشی به ذهنم میاد که مثلا برای این مقدار یعنی آرایه یک در ده میلیارد از حلقه فور استفاده کنم و این ماتریس تک سطری رو به چندین ماتریس بشکنم که در حافظه اجرایی مطلب بگنجه

مثلا بجای 10.000.000.000×1 از هزار تا ماتریس 10.000.000×1 استفاده کنم گفتم شاید روش یا دستور ساده تری باشه که از شما استاد کمک خواستم

زنده باشید

لینک به دیدگاه

و برای سوال اولم مشکل من در تولید اعداد تصادفی نیست همون کد که نوشته ام در حلقه اولی اعداد تصادفی صفر و یکی را که میخوام برای کانال مخابراتی یا مدولاسیون میتونم تولید نمایم

ولی میخوام در خروجی این ماتریسی که با صفر و یک تولید شده را با خطای مثلا یک سوم در خروجی نمایش بدهم

یعنی کانال با همون احتمال یک سوم در خروجی ماتریس اولیه را که تولید کرده ایم دچار خطا نماید بعضی از صفر و یک ها را تغییر دهد.

حالا در حقله دوم هم این تغییرات رو با احتمال یک سوم وارد کردم ولی این درست با فاصله ثابت این خطارو اعمال می کنه در حالیکه این اعمال خطا باید راندوم یا تصادفی باشد .

درود برشما استاد

لینک به دیدگاه

سلام.دوست عزیز شما میتونی بعد از تولید اعداد رندوم یه حلقه for بذاری و با استفاده از rand که یه عدد رندوم بین 0 و 1 میده بگی اگه این عدد از یک سوم مثلا کوچکتر بود درایه فعلی not بشه و اگه نبود همون حالت قبلی بمونه.در مورد اون ماتریس بزرگی هم که گفتی به نظرم اگه بیای هر مثلا 1000 تاش رو بریزی توی یه سطر از یه فایل و بعد از تکمیلش هر وقت به اون ماتریس نیاز داشتی بیای و از اون فایلی که ذخیره کردی بخونی، به نظرم دیگه مشکل حافظه رفع میشه با این روش.

لینک به دیدگاه

مرسی دوست عزیز اما اینکه بگیم از یک سوم کوچکتر باشه که راندوم تولیدی ما مابین صفر و یک کلا از یک سوم کوچکتره پس همشون نات میشن

و همون قسمت دوم هم همون شکستن ماتریسهاست خواستم اگه روش ساده تری باشد که ماتریسو نشکنیم چون همون شکستن ماتریس و دوباره بازخوانیش یکمی پیچیده میشه

درود بر شما

لینک به دیدگاه

منظورتون رو متوجه نشدم،چه جوری کلا همشون نات میشن؟ مثلا اگه رندوم به ما عدد 0.68 رو بده خوب این توی دو سوم باقیمونده از احتمال قرار میگیره پس درایه مورد نظر تغییر نمیکنه ،درسته؟

لینک به دیدگاه

خوب سوال منم همینجاست که چجوری این احتمال رو به برنامه ربط بدهم یعنی در همون ماتریس بالا که 15 درایه صفر و یک دارد

چجوری با احتمال مثلا یک پنجم

از توی 15 تا عنصر 3 تا عنصر ماهیتشون عوضه بشه

لینک به دیدگاه

این چیزی که الان گفتید کلا با حرف اولتون فرق داره.شما یه for میذاری از یک تا 15.داخلش یه if میذاری که شرطش اینجوری باشه: اگه رند کوچکتر مساویه احتمال پس شرط درسته و درایه فعلی نات بشه.متاسفانه الان متلب ندارم رو سیستم تا کدش رو بذارم واستون.

اما اگه میخوای که فقط سه تا از 15 تا با احتمال یک سوم عوض بشن باید قبلش اون سه تا رو هم با یه رندوم دیگه از 15 تا جدا کنی.مثلا یه رندپرم با ورودی 15 بگیری بعد سه تا درایه اولش رو به عنوان اندیسای منتخب ورداری.

لینک به دیدگاه

اگر احتمال خطای یک سوم رو اعمال کنیم یعنی باید این ماتریس 15 عنصری رو به 5 قسمت تقسیم کنیم که هرکدومش 3 عنصر دارد و حالا باید یک راندمی برای این حلقه تعریف کنیم که از هر 5 قسمت یک عنصر را بصورت تصادفی انتخاب کرده و ماهیت انرا تغییر بدهد.

و طبق توضیح شما من متوجه نشدم منظور از مقدار احتمال در این حلقه چیست و چجوری باید به حلقه اضافه نماییم تا شرط رو بررسی کنه؟

لینک به دیدگاه

فکر میکنم تازه منظورتون رو متوجه شده باشم!

منظورتون از احتمال یک سوم اینه که از هر سه تا درایه یکی نات میشه،پس باید دسته بندی هایه سه تایی داشته باشیم. تا این جا که فکر نمیکنم مشکلی باشه.

اما حالا برای این که توی این دسته های کوچیکه جدید یه دونه رو انتخاب کنیم کافیه یه randi بگیریم از یک تا تعداد درایه ای ماتریس های جدید. بعد بگیم که درایه ای با این اندیس باید تغییر کنه.راحت میشه کدشو نوشت ولی من الان متلب ندارم که بتونم بیشتر راهنماییتون کنم.

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...