🔵درست مثل یک حرفه ای🔵
برای: همه
پیش نیاز: (خواندن و نوشتن متون فارسی مدرن)
سطح پیچیدگی:🌑🌑🌑🌑🌑
تمام دانشجوهایی که به نوعی کارشون گیر متلب هست با احتمال خوبی کارشون گیر یک موضوعی هست که باید شبیه سازی بشه (simulated to be). این وسط یا باید یک ام فایل بنویسید یا با سیمیولینک و یا با gui (که معمولا مربوط به یک تولباکس خاصی) میشه باید کار کنید.
اما ما چطور برنامه مینویسیم؟؟(this is a big deal!)
در لپ تاپ و باز میکنیم یه یا علی میگیم و متلب و آتیش میکنیم و مثلا ادیتور رو باز میکنیم و اول برنامه هم مثل مرد یه
می نویسیم که مثلا ما هم اره. یه ذره فک به پروژه فک میکنیم و تو گوشه ذهنمون تبدیل به کدش میکنیم میاریم رو صفحه ادیتور متلب. میریم جلو و به هر زور هست برنامه تموم میشه. ولی مطمئن باشید این برنامه ای نیست که بتونید بهش افتخارکنید. برنامه ای که احتمالا کامنت نداره، احتمالا به لحاظ سرعت اجرا نه تنها بهینه نیست بلکه افتضاست، احتمالا تو یه حالات خاصی جواب میده، احتمالا اسم یکی از متغیراتون a اسم یکی دیگش aa و اسم سومی aaa و تا آخر و احتمالا ...
سعی کنید قبل از اینکه شروع کنید به نوشتن یک برنامه ابتدا فلوچارت برنامه رو بکشید، بعد شبه کد آن رو بر روی کاغذ پیاده کنید و سپس "درست مثل یک حرفه ای" با اعتماد به نفس شروع میکنید به کد نوشتن.
طرح یک مشکل:
میخام نمودار sin(x)/x رو رسم کنم ولی تو نقطه X=0 نمیدونم چه کنم؟
🗝روش اول:
فقط یه آماتور میتونه اینجوری مشکل رو حل کنه😁😁😁
🗝روش دوم:
اوهوم. این شد یه چیزی. 😎😎
در روش اول برنامه نویس نادان بدون تفکر و اندیشه قبلی شروع به نوشتن کد نموده در صورتی در روش دوم برنامه نویس قبلا لختی درنگ کرده.
#For_all
@MatlabTips
نویسنده: #جبار_کمالی
برای: همه
پیش نیاز: (خواندن و نوشتن متون فارسی مدرن)
سطح پیچیدگی:🌑🌑🌑🌑🌑
تمام دانشجوهایی که به نوعی کارشون گیر متلب هست با احتمال خوبی کارشون گیر یک موضوعی هست که باید شبیه سازی بشه (simulated to be). این وسط یا باید یک ام فایل بنویسید یا با سیمیولینک و یا با gui (که معمولا مربوط به یک تولباکس خاصی) میشه باید کار کنید.
اما ما چطور برنامه مینویسیم؟؟(this is a big deal!)
در لپ تاپ و باز میکنیم یه یا علی میگیم و متلب و آتیش میکنیم و مثلا ادیتور رو باز میکنیم و اول برنامه هم مثل مرد یه
clc
clear all
می نویسیم که مثلا ما هم اره. یه ذره فک به پروژه فک میکنیم و تو گوشه ذهنمون تبدیل به کدش میکنیم میاریم رو صفحه ادیتور متلب. میریم جلو و به هر زور هست برنامه تموم میشه. ولی مطمئن باشید این برنامه ای نیست که بتونید بهش افتخارکنید. برنامه ای که احتمالا کامنت نداره، احتمالا به لحاظ سرعت اجرا نه تنها بهینه نیست بلکه افتضاست، احتمالا تو یه حالات خاصی جواب میده، احتمالا اسم یکی از متغیراتون a اسم یکی دیگش aa و اسم سومی aaa و تا آخر و احتمالا ...
سعی کنید قبل از اینکه شروع کنید به نوشتن یک برنامه ابتدا فلوچارت برنامه رو بکشید، بعد شبه کد آن رو بر روی کاغذ پیاده کنید و سپس "درست مثل یک حرفه ای" با اعتماد به نفس شروع میکنید به کد نوشتن.
طرح یک مشکل:
میخام نمودار sin(x)/x رو رسم کنم ولی تو نقطه X=0 نمیدونم چه کنم؟
% the problem occurs in zero(x==0) which returns NaN
x = -4*pi : pi/10 : 4*pi;
y = sin(x) ./ x;
plot(x, y,'linewidth',1.6)
🗝روش اول:
% dummy solution
x = -4*pi : pi/10 : 4*pi;
for i = 1:length(x)
if x(i)==0
y(i) = sin(eps)/eps;
else
y(i) = sin(x(i))/x(i);
end
end
plot(x, y,'linewidth',1.6)
فقط یه آماتور میتونه اینجوری مشکل رو حل کنه😁😁😁
🗝روش دوم:
% the solution which kicks ass
x = -4*pi : pi/20 : 4*pi;
x=x+(x==0)*eps; % adjustx=0tox=eps
y = sin(x) ./ x;
plot(x, y,'linewidth',1.6)
اوهوم. این شد یه چیزی. 😎😎
در روش اول برنامه نویس نادان بدون تفکر و اندیشه قبلی شروع به نوشتن کد نموده در صورتی در روش دوم برنامه نویس قبلا لختی درنگ کرده.
#For_all
@MatlabTips
نویسنده: #جبار_کمالی
🔵کدام ورژن متلب استفاده کنیم؟🔵
برای: افرادی که زیاد سوال میپرسن😕
پیش نیاز: علاقه به خواندن حرف مفت😉
سطح پیچیدگی: (مگه حرف مفتم پیچیدگی داره؟)
این سوال به اندازه سوال " استاد دفتر چند برگ تهیه کنیم؟!" خنده داره. ولی خوب به هر حال سواله دیگه و از قدیم گفتن جواب سوال واجب(تکبیر✊✊)
من میگم وقتی آخرین نسخه متلب چند صد دلاری رو میتونی با 800 تا تک تومنی سر بقالی کوچتون پیدا کنی، متلب قدیمی به چه کار آید؟؟
ولی آدم اگه برنامه نویس باشه با چرتکه هم میتونه کار خودش رو راه بندازه.
ولی از شوخی گذشته ورژن به ورژن سنگ تموم میزارن. هر چند که افرادی پیدا میشن و نسخه های قدیمی تر رو پیشنهاد میکنن (که اگه بر و بچه های مث ورکی بفهمن خودشون رو حلق آویز میکنن😁😁).
توی ورژن های 2013 یه تغییرات اساسی توی قسمت های ظاهری دادن که این تغییرات توی متلب 2015 به حد اعلای خودش رسید. در هر ورژن که ریلیز😎میشه یه سری دستورات حذف و یه سری اضاف میشه و ممکنه تولباکس های جدیدی اضافه بشه. و در نسخه جدید شتاب دهنده در جا (JIT) (اووف چی فتم) بهبود داده میشه و منجر به عملکرد بهتر متلب میشه.
خلاصه شما کارتون نباشه. برین از نزدیکترین بقالی ممکن، اخرین ورژن متلب رو گیر بیارین و مثل یه ایرانی واقعی کرک کنید.
نویسنده:(#جبار_کمالی)
#For_all
@MatlabTips
برای: افرادی که زیاد سوال میپرسن😕
پیش نیاز: علاقه به خواندن حرف مفت😉
سطح پیچیدگی: (مگه حرف مفتم پیچیدگی داره؟)
این سوال به اندازه سوال " استاد دفتر چند برگ تهیه کنیم؟!" خنده داره. ولی خوب به هر حال سواله دیگه و از قدیم گفتن جواب سوال واجب(تکبیر✊✊)
من میگم وقتی آخرین نسخه متلب چند صد دلاری رو میتونی با 800 تا تک تومنی سر بقالی کوچتون پیدا کنی، متلب قدیمی به چه کار آید؟؟
ولی آدم اگه برنامه نویس باشه با چرتکه هم میتونه کار خودش رو راه بندازه.
ولی از شوخی گذشته ورژن به ورژن سنگ تموم میزارن. هر چند که افرادی پیدا میشن و نسخه های قدیمی تر رو پیشنهاد میکنن (که اگه بر و بچه های مث ورکی بفهمن خودشون رو حلق آویز میکنن😁😁).
توی ورژن های 2013 یه تغییرات اساسی توی قسمت های ظاهری دادن که این تغییرات توی متلب 2015 به حد اعلای خودش رسید. در هر ورژن که ریلیز😎میشه یه سری دستورات حذف و یه سری اضاف میشه و ممکنه تولباکس های جدیدی اضافه بشه. و در نسخه جدید شتاب دهنده در جا (JIT) (اووف چی فتم) بهبود داده میشه و منجر به عملکرد بهتر متلب میشه.
خلاصه شما کارتون نباشه. برین از نزدیکترین بقالی ممکن، اخرین ورژن متلب رو گیر بیارین و مثل یه ایرانی واقعی کرک کنید.
نویسنده:(#جبار_کمالی)
#For_all
@MatlabTips
🔵چاپ کد(publish)🔵
پیش نیاز:(آشنایی مقدماتی با متلب)
برای: همه
سطح پیچیدگی: 🌓🌑🌑🌑🌑
شاید برای خیلی از شماها پیش اومده که یه کد طولانی رو پرینت بگیرید و در حالی که رو تختون دراز کشیدید اونو یه بار دیگه وارسی کنید. یا اصلا میخاستید که کد رو به استاد نشون بدید و به هر دلیلی.
ساده ترین راه ممکن اینه که کدتون رو کپی پیست کنید توی word و از اونجا پرینت بگیرید. ولی قطعا اگر این پست را تا انتها بخوانید هیچ وقت این عادت مسخره را تکرار نخواهید کرد.
متلب ی ابزاری داره به نام publish که توی toolbar بالایی هست بغل تب editor.(تو ورژن های 2013 به بعد مشخصه کجاست)
این publish خیلی خوبه. از اونجایی که میدونم حوصلتون نمیکشه پست طولانی بخونید من وارد جزییاتش نمیشم.
کار پابلیش اینه که میاد ام فایل شما رو بصورت html ذخیره میکنه. فک کنید توی ام فایلتون کلی فرمول (با فرمت لتک) نوشتید و کلی سکشن بندی کردید و میخاید پرینت بگیرید و به استادتون نشون بدید. میتونید توی ام فایلتون یه جوری کامنت بنویسید و سکشن بندی کنید که خروجی html اون واقعا عالی بشه. یه خروجی کاملا خوانا.
جزییاتش رو میزارم تو ویدئویی که بزودی ریلیز میکنم😎بهتون میگم.
ولی حتما حتما اگه میخاید کدتون رو پرینت بگیرید از این تکنیک استفاده کنید.
نویسنده" (#جبار_کمالی)
#For_all, #Publish
@MatlabTips
پیش نیاز:(آشنایی مقدماتی با متلب)
برای: همه
سطح پیچیدگی: 🌓🌑🌑🌑🌑
شاید برای خیلی از شماها پیش اومده که یه کد طولانی رو پرینت بگیرید و در حالی که رو تختون دراز کشیدید اونو یه بار دیگه وارسی کنید. یا اصلا میخاستید که کد رو به استاد نشون بدید و به هر دلیلی.
ساده ترین راه ممکن اینه که کدتون رو کپی پیست کنید توی word و از اونجا پرینت بگیرید. ولی قطعا اگر این پست را تا انتها بخوانید هیچ وقت این عادت مسخره را تکرار نخواهید کرد.
متلب ی ابزاری داره به نام publish که توی toolbar بالایی هست بغل تب editor.(تو ورژن های 2013 به بعد مشخصه کجاست)
این publish خیلی خوبه. از اونجایی که میدونم حوصلتون نمیکشه پست طولانی بخونید من وارد جزییاتش نمیشم.
کار پابلیش اینه که میاد ام فایل شما رو بصورت html ذخیره میکنه. فک کنید توی ام فایلتون کلی فرمول (با فرمت لتک) نوشتید و کلی سکشن بندی کردید و میخاید پرینت بگیرید و به استادتون نشون بدید. میتونید توی ام فایلتون یه جوری کامنت بنویسید و سکشن بندی کنید که خروجی html اون واقعا عالی بشه. یه خروجی کاملا خوانا.
جزییاتش رو میزارم تو ویدئویی که بزودی ریلیز میکنم😎بهتون میگم.
ولی حتما حتما اگه میخاید کدتون رو پرینت بگیرید از این تکنیک استفاده کنید.
نویسنده" (#جبار_کمالی)
#For_all, #Publish
@MatlabTips
🔵اعداد تصادفی در متلب(مقدمه: عدد تصادفی چیست؟)🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:ندارد
برای:همه
برای همه ما پیش آمده است که با سوالاتی مانند پیدا کردن ادامه دنباله ای عددی مانند دنباله زیر روبرو شویم:
5,1,1,2,5,3,3,8,2,4,…
گاهی اوقات با تلاش زیاد می توانیم ادامه دنباله را حدس بزنیم و گاهی هم شکست میخوریم در آن لحظه ممکن است تصور کنیم که دنباله هیچ "الگوی" مشخصی ندارد و کاملا تصادفی است که ناگهان متوجه میشویم دوست باهوش تر ما ادامه دنباله را یافته است! نتیجه گیری منطقی و طبیعی که به ذهن می رسد این است که هیچ گاه نمی توان ادعا کرد که یک دنباله تصادفی است چرا که "شاید الگویی دارد که ما نمی دانیم" در مواردی این ممکن است به مغلطه توسل به جهل هم منجر شود!(فکر کنید چرا)
مشکلاتی مانند این بسیاری از ریاضیدانانی که بر روی نظریه پیچیدگی محاسباتی کار می کردند را بر آن داشت تا تعریفی ریاضی از "تصادفی بودن" ارائه دهند. تعریف کولموگروف(Kolmogrov) در این میان از همه بیشتر مورد قبول قرار گرفت. این تعریف شهودی، جامع و زیبا است. بر اساس این تعریف دنباله ای تصادفی است که حجم کدی که برای تولید آن دنباله رندم تولید می شود( به صورت مجانبی) بیشتر یا مساوی با خود دنباله باشد. در اینجا منظور از "حجم کد" دقیقا به بایت است. به عبارت ساده تر وقتی هیچ الگوریتمی وجود نداشته باشد که حجم آن از حجم دنباله کمتر باشد دنباله هم قاعدتا هیچ الگویی ندارد.(تعریف algorithmically random)
این تعریف بسیار دقیق و از لحاظ تئوریک غنی است اما در کاربرد های واقعی ما به یک تعریف عملیاتی تر نیاز داریم. تعریف عملیاتی دنباله ی تصادفی، بر اساس مفهوم "از لحاظ آماری تصادفی"(statistically random) قرار دارد. بر اساس این تعریف هر دنباله ی تصادفی می بایست تعدادی تست آماری را با موفقیت پشت سر بگذارد تا بتوان نام "رندم" بر آن نهاد. در اینجا وارد جزییات نمی شویم ولی ویژگی هایی مانند پیروی کردن از توزیع یکنواخت(یعنی تمام اعداد شانس مساوی برای حضور در دنباله داشته باشند) یا ویژگی بیشینه آنتروپی از آن دسته اند.
حالا چطور اعداد تصادفی را در کامپیوتر ایجاد کنیم؟ هر گاه این سوال را از دانشجویانم میپرسم ابتدا کمی در فکر فرو می روند و سپس شوکه می شوند. چرا که بر خلاف دسترسی راحتی که برنامه ها به تولید اعداد تصادفی ایجاد می کنند یافتن الگوریتم ساخت اعداد تصادفی، غیر ممکن به نظر می رسد!
در واقع بیشتر این برنامه ها اصلا اعداد تصادفی واقعی تولید نمی کنند. آن ها اعداد شبه تصادفی تولید می کنند. اعداد شبه تصادفی دارای فرمول هستند و دنباله ای که ایجاد می کنند تست های آماری را با موفقیت پشت سر می گذارند. یکی از معروف ترین الگوریتم های در این زمینه linear congruent generator است که از یک رابطه بازگشتی مانند زیر استفاده می کند:
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:ندارد
برای:همه
برای همه ما پیش آمده است که با سوالاتی مانند پیدا کردن ادامه دنباله ای عددی مانند دنباله زیر روبرو شویم:
5,1,1,2,5,3,3,8,2,4,…
گاهی اوقات با تلاش زیاد می توانیم ادامه دنباله را حدس بزنیم و گاهی هم شکست میخوریم در آن لحظه ممکن است تصور کنیم که دنباله هیچ "الگوی" مشخصی ندارد و کاملا تصادفی است که ناگهان متوجه میشویم دوست باهوش تر ما ادامه دنباله را یافته است! نتیجه گیری منطقی و طبیعی که به ذهن می رسد این است که هیچ گاه نمی توان ادعا کرد که یک دنباله تصادفی است چرا که "شاید الگویی دارد که ما نمی دانیم" در مواردی این ممکن است به مغلطه توسل به جهل هم منجر شود!(فکر کنید چرا)
مشکلاتی مانند این بسیاری از ریاضیدانانی که بر روی نظریه پیچیدگی محاسباتی کار می کردند را بر آن داشت تا تعریفی ریاضی از "تصادفی بودن" ارائه دهند. تعریف کولموگروف(Kolmogrov) در این میان از همه بیشتر مورد قبول قرار گرفت. این تعریف شهودی، جامع و زیبا است. بر اساس این تعریف دنباله ای تصادفی است که حجم کدی که برای تولید آن دنباله رندم تولید می شود( به صورت مجانبی) بیشتر یا مساوی با خود دنباله باشد. در اینجا منظور از "حجم کد" دقیقا به بایت است. به عبارت ساده تر وقتی هیچ الگوریتمی وجود نداشته باشد که حجم آن از حجم دنباله کمتر باشد دنباله هم قاعدتا هیچ الگویی ندارد.(تعریف algorithmically random)
این تعریف بسیار دقیق و از لحاظ تئوریک غنی است اما در کاربرد های واقعی ما به یک تعریف عملیاتی تر نیاز داریم. تعریف عملیاتی دنباله ی تصادفی، بر اساس مفهوم "از لحاظ آماری تصادفی"(statistically random) قرار دارد. بر اساس این تعریف هر دنباله ی تصادفی می بایست تعدادی تست آماری را با موفقیت پشت سر بگذارد تا بتوان نام "رندم" بر آن نهاد. در اینجا وارد جزییات نمی شویم ولی ویژگی هایی مانند پیروی کردن از توزیع یکنواخت(یعنی تمام اعداد شانس مساوی برای حضور در دنباله داشته باشند) یا ویژگی بیشینه آنتروپی از آن دسته اند.
حالا چطور اعداد تصادفی را در کامپیوتر ایجاد کنیم؟ هر گاه این سوال را از دانشجویانم میپرسم ابتدا کمی در فکر فرو می روند و سپس شوکه می شوند. چرا که بر خلاف دسترسی راحتی که برنامه ها به تولید اعداد تصادفی ایجاد می کنند یافتن الگوریتم ساخت اعداد تصادفی، غیر ممکن به نظر می رسد!
در واقع بیشتر این برنامه ها اصلا اعداد تصادفی واقعی تولید نمی کنند. آن ها اعداد شبه تصادفی تولید می کنند. اعداد شبه تصادفی دارای فرمول هستند و دنباله ای که ایجاد می کنند تست های آماری را با موفقیت پشت سر می گذارند. یکی از معروف ترین الگوریتم های در این زمینه linear congruent generator است که از یک رابطه بازگشتی مانند زیر استفاده می کند:
مقادیر m معمولا بزرگ است(مانند m=2^64) و a و c هم به مقادیری ست می شوند که در پکیج های مختلف متفاوت است. یکی از مهمترین قسمت های این فرمول بازگشتی مقدار اولیه ای است که به آن داده می شود و به عنوان دانه(seed) اولیه الگوریتم شناخته می شود. هر دانه دنباله ای کاملا متفاوت ایجاد می کند. با آنکه الگوریتم ایجاد اعداد شبه تصادفی در تقریبا تمامی نرم افزار ها(حتی اپل) به صورت عمومی در دسترس است، این الگوریتم برای نرم افزار متلب نامشخص است و تنها به گفتن: "تولید اعداد شبه تصادفی" اکتفا شده است.
در قسمت بعد به جزییات اعداد تصادفی در متلب می پردازیم. اما قبل از آن به تولید اعداد تصادفی واقعی در کامپیوتر فکر کنید!
MatlabTips
#For_beginner ,
#For_intermediate, #For_Advanced
#Randomness, #Random
نویسنده:(#A_2)
در قسمت بعد به جزییات اعداد تصادفی در متلب می پردازیم. اما قبل از آن به تولید اعداد تصادفی واقعی در کامپیوتر فکر کنید!
MatlabTips
#For_beginner ,
#For_intermediate, #For_Advanced
#Randomness, #Random
نویسنده:(#A_2)
🔵دستورهای ابتدایی برای تولید اعداد تصادفی🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:کدنویسی پایه
برای:مبتدیان
متلب دارای قابلیت تولید اعداد تصادفی است که این قابلیت در توابع rand، randn ، randi و randperm قرار گرفته است. تابع rand اعداد شبه تصادفی در بازه 0 تا 1 و به صورت یکنواخت تولید می کند. به طور مثال:
برای تولید اعداد تصادفی در بازه دلخواه [a,b] کافی است به صورت زیر عمل کنیم:
تابع randn اعداد شبه تصادفی با توزیع گاوسی(نرمال) با میانگین صفر و واریانس یک ایجاد می کند(N(0,1)) این توزیع در طبیعت بسیار رخ می دهد و در کاربردهای علمی و مهندسی بسیار مورد استفاده قرار می گیرد به طور مثال:
برای تولید اعداد شبه تصادفی با میانگین و واریانس دلخواه کافی است به صورت زیر عمل کنیم:
تابع randi هم اعداد تصادفی صحیح تولید می کند. به طور مثال تابع زیر یک ماتریس m در n از اعداد تصادفی در بازه 1 تا x را تولید می کند.
همچنین برای تولید اعداد تصادفی در یک بازه به صورت کلی داریم:
تابع randperm قدری متفاوت است زیرا وظیفه آن ایجاد یک جایگشت تصادفی از اعداد در یک بازه است. مثلا:
با اضافه کردن یک آرگومان دیگر می توان تعدادی از این اعداد را انتخاب کرد.(مثلا سه تا عدد به صورت تصادفی از بازه 1 تا 10)
تفاوت این تابع با randi این است که randi انتخاب تصادفی با جایگزینی است اما randperm بدون جایگزینی است.
@MatlabTips
#For_beginner
#Rand #Randi #Randn #Randperm #Random
نویسنده:(#A_2)
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:کدنویسی پایه
برای:مبتدیان
متلب دارای قابلیت تولید اعداد تصادفی است که این قابلیت در توابع rand، randn ، randi و randperm قرار گرفته است. تابع rand اعداد شبه تصادفی در بازه 0 تا 1 و به صورت یکنواخت تولید می کند. به طور مثال:
u = rand(3) %Generates a 3x3 matrix
u =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
برای تولید اعداد تصادفی در بازه دلخواه [a,b] کافی است به صورت زیر عمل کنیم:
u = a + (a-b)*rand
تابع randn اعداد شبه تصادفی با توزیع گاوسی(نرمال) با میانگین صفر و واریانس یک ایجاد می کند(N(0,1)) این توزیع در طبیعت بسیار رخ می دهد و در کاربردهای علمی و مهندسی بسیار مورد استفاده قرار می گیرد به طور مثال:
g = randn(2,3) %Generates a 2x3 matrix
g =
0.7147 -0.1241 1.4090
-0.2050 1.4897 1.4172
برای تولید اعداد شبه تصادفی با میانگین و واریانس دلخواه کافی است به صورت زیر عمل کنیم:
>> m = 10; %Mean
>> v = 9; %Variance
>> d = 1000; %Length
>> g = m + sqrt(v)*randn(d,1);
>> mean(g) %Mean
ans =
9.8529
>> var(g) %Variance
ans =
8.6272
>>std(g) %Standard Deviation
ans =
2.9372
تابع randi هم اعداد تصادفی صحیح تولید می کند. به طور مثال تابع زیر یک ماتریس m در n از اعداد تصادفی در بازه 1 تا x را تولید می کند.
>> b = randi(x, m, n);
>> b = randi(10, 2, 4)
b =
9 4 4 10
2 5 8 2
همچنین برای تولید اعداد تصادفی در یک بازه به صورت کلی داریم:
>> b = randi([x y], m, n)
تابع randperm قدری متفاوت است زیرا وظیفه آن ایجاد یک جایگشت تصادفی از اعداد در یک بازه است. مثلا:
>> b = randperm(10)
b =
1 9 10 5 7 2 4 3 6 8
با اضافه کردن یک آرگومان دیگر می توان تعدادی از این اعداد را انتخاب کرد.(مثلا سه تا عدد به صورت تصادفی از بازه 1 تا 10)
>> b = randperm(10,3)
b =
7 4 8
>> c = randi(10,1,3)
c =
7 2 2
تفاوت این تابع با randi این است که randi انتخاب تصادفی با جایگزینی است اما randperm بدون جایگزینی است.
@MatlabTips
#For_beginner
#Rand #Randi #Randn #Randperm #Random
نویسنده:(#A_2)
🔵یک فراکتال🔵
سطح پیچیدگی: 🌕🌑🌑🌑🌑
پیش نیاز: آشنایی مقدماتی
برای: مقدماتی
📝هدف از این پست:( آشنا شدن با یک فراکتال دیگر و آشنایی با روابط بازگشتی در متلب)
یک فراکتال نسبتا زیبا با استفاده از رسم خروجی های معادلات تفاضلی زیر که مجموعه ای از نقاط (Xk,Yk) می باشد، قابل رسم است. نقطه شروع را (0,0) انتخاب می کنیم.
سطح پیچیدگی: 🌕🌑🌑🌑🌑
پیش نیاز: آشنایی مقدماتی
برای: مقدماتی
📝هدف از این پست:( آشنا شدن با یک فراکتال دیگر و آشنایی با روابط بازگشتی در متلب)
یک فراکتال نسبتا زیبا با استفاده از رسم خروجی های معادلات تفاضلی زیر که مجموعه ای از نقاط (Xk,Yk) می باشد، قابل رسم است. نقطه شروع را (0,0) انتخاب می کنیم.
دقت کنید که هنگام رسم، نقاط را به هم متصل نکیند.
%% this program draws a fractal
% initial point
x0 = 0;
y0 = 0;
iter = 1e4; % number of iteration
% vectors to hold new points
x = zeros(1,length(iter));
y = x;
for i = 1:iter
% implementation of the fractal
x(i) = x0;
y(i) = y0;
x1 = y0 * (1 + sin(0.7 * x0)) - 1.2 * sqrt(abs(x0));
y1 = 0.21 - x0;
x0 = x1;
y0 = y1;
end
plot(x,y,'.')
معمولا فراکتال ها با استفاده از روابط بازگشتی بیان می شوند. بسیاری از زیباترین و پرکاربردترین آن ها با ساده ترین روابط قابل بیان هستند.
نویسنده: (#جبار_کمالی)
#For_intermidiate , #Fractal
@MatlabTips
نویسنده: (#جبار_کمالی)
#For_intermidiate , #Fractal
@MatlabTips
🔵معادلات دیفرانسیل stiff🔵
سطح پیچدگی: 🌕🌕🌑🌑🌑
پیشنیاز: آشنایی با کدنویسی متلب و مفاهیم معادلات دیفرانسیل
برای: (متوسط)
📝 هدف از این پست: (در این پست به این سوال پاسخ داده میشود که حرف s در odes به چه معناست و کارش چیست. لذا اگر علاقه ای به این موضوع ندارید اکیدا توصیه میکنم که از این پست رد شوید)
سختی (stiffness) یک مفهوم ظریف، دشوار و مهم در حل عددی معادلات دیفرانسیل است.
این سختی به معادله دیفرانسیل، شرایط اولیه و روش عددی مورد استفاده بستگی دارد. تعریف لغوی کلمه “stiff” عباراتی چون "سخت"، "کله شق" و "مقاوم در برابر خمش" است. البته در این پست با ویژگیهای محاسباتی این عبارت سر و کار داریم.
یک معادله دیفرانسیل معمولی را سخت مینامیم در صورتی که حل تحلیلی آن دارای تغییرات کندی است اما راهحلهای تقریبی وجود دارد که تغییرات سریعی دارند، بنابراین روش عددی باید گامهای خیلی کوچکی را برای حصول یک نتیجه رضایت بخش اتخاذ کند.
سختی مسئله راندامان است. اگر زمان محاسبات برای کاربر اهمیتی نداشته باشد بنابراین مسئله سختی یک معادله دیفرانسیل نیز اهمیتی نخواهد داشت. دقت کنید که روشهای عددی غیرسخت (nonstiff) هم میتوانند مسائل سخت را حل کنند ولی طبیعتا زمان خیلی بیشتری را میگیرند.
برای شفافتر شدن موضوع مدل انتشار شعله را به عنوان یک مثال در نظر میگیریم. هنگامی که یک کبریت را روشن میکنید، گلوله شعله به سرعت رشد میکند تا اینکه به اندازه بحرانی خودش میرسد. از آنجایی که مقدار اکسیژن مصرفی توسط عملیات احتراق درون گلوله نسبت به مقدار اکسیژن موجود در سطح به یک حد تعادل میرسد، اندازه گلوله شعله ثابت خواهد شد. مدل ساده شده این فرایند در زیر آورده شده است:
سطح پیچدگی: 🌕🌕🌑🌑🌑
پیشنیاز: آشنایی با کدنویسی متلب و مفاهیم معادلات دیفرانسیل
برای: (متوسط)
📝 هدف از این پست: (در این پست به این سوال پاسخ داده میشود که حرف s در odes به چه معناست و کارش چیست. لذا اگر علاقه ای به این موضوع ندارید اکیدا توصیه میکنم که از این پست رد شوید)
سختی (stiffness) یک مفهوم ظریف، دشوار و مهم در حل عددی معادلات دیفرانسیل است.
این سختی به معادله دیفرانسیل، شرایط اولیه و روش عددی مورد استفاده بستگی دارد. تعریف لغوی کلمه “stiff” عباراتی چون "سخت"، "کله شق" و "مقاوم در برابر خمش" است. البته در این پست با ویژگیهای محاسباتی این عبارت سر و کار داریم.
یک معادله دیفرانسیل معمولی را سخت مینامیم در صورتی که حل تحلیلی آن دارای تغییرات کندی است اما راهحلهای تقریبی وجود دارد که تغییرات سریعی دارند، بنابراین روش عددی باید گامهای خیلی کوچکی را برای حصول یک نتیجه رضایت بخش اتخاذ کند.
سختی مسئله راندامان است. اگر زمان محاسبات برای کاربر اهمیتی نداشته باشد بنابراین مسئله سختی یک معادله دیفرانسیل نیز اهمیتی نخواهد داشت. دقت کنید که روشهای عددی غیرسخت (nonstiff) هم میتوانند مسائل سخت را حل کنند ولی طبیعتا زمان خیلی بیشتری را میگیرند.
برای شفافتر شدن موضوع مدل انتشار شعله را به عنوان یک مثال در نظر میگیریم. هنگامی که یک کبریت را روشن میکنید، گلوله شعله به سرعت رشد میکند تا اینکه به اندازه بحرانی خودش میرسد. از آنجایی که مقدار اکسیژن مصرفی توسط عملیات احتراق درون گلوله نسبت به مقدار اکسیژن موجود در سطح به یک حد تعادل میرسد، اندازه گلوله شعله ثابت خواهد شد. مدل ساده شده این فرایند در زیر آورده شده است:
متغیر اسکالر( y(t بیانگر شعاع گلوله است. y2 و y3 بهگونهای سطح و حجم را مشخص میکنند. پارامتر بحرانی شعاع اولیه، δ است که مقدار کوچکی دارد. جواب را در بازه ای از زمان جستجو می کنیم که با مقدار δ رابطه عکس دارد.
بد نیست در این مرحله نرم افزار MATLAB را بالا بیاورید و این مثال را اجرا کنید. مسئله را با ODE45 شروع میکنیم. اگر مقدار δ خیلی کوچک نباشد مسئله نیز خیلی سخت نخواهد بود. بنابراین با δ=0.01 شروع می کنیم و خطای نسبی را 1e-4لحاظ می کنیم.
بد نیست در این مرحله نرم افزار MATLAB را بالا بیاورید و این مثال را اجرا کنید. مسئله را با ODE45 شروع میکنیم. اگر مقدار δ خیلی کوچک نباشد مسئله نیز خیلی سخت نخواهد بود. بنابراین با δ=0.01 شروع می کنیم و خطای نسبی را 1e-4لحاظ می کنیم.
delta = 0.01;
F = inline('y^2 - y^3','t','y');
opts = odeset('RelTol',1.e-4);
ode45(F,[0 2/delta],delta,opts);