MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
مشکلی که ممکن است تاکنون متوجه شده باشید این است که ما همواره با داده های محدودی سر و کار داریم و معلوم نیست احتمال داشتن قد 180 تقریبا برابر با 0.1 باشد. در این جاست که باید از یک مدل علمی مانند تمامی شاخه های دیگر علم استفاده کنیم. مدل آماری(statistical model) یک قانون ریاضی است که ما فرض می کنیم داده ها از آن می آیند. مدل آماری ما را قادر می سازد نمونه های جدید بر اساس نمونه های اندکی که دیده ایم ایجاد کنیم!(مانند پست های قبلی که نمونه های جدید از نمره های افراد را ایجاد می کردیم) این نمونه های جدید برای پیش بینی مورد استفاده قرار می گیرند. اما مدل ها خود به دو دسته تقسیم می شوند: مدل های پارامتریک و غیر پارامتریک. مدل های پارامتریک دارای تعداد محدودی پارامتر هستند مانند توزیع گاوسی (نرمال) که دارای دو پارامتر میانگین و واریانس است. اما مدل های غیر پارامتریک دارای تعداد بی نهایت پارامتر هستند و فراتر از مباحث اینجا می باشند(در آینده به آن ها می پردازیم).
نرم افزار متلب روشی ساده برای ایجاد بسیاری از توزیع های شناخته شده و معروف در اختیار ما می گذارد. به طور مثال می توان توزیع نرمال را به صورت زیر تعریف و از آن نمونه گرفت:
mu = 0;
sigma = 1;
pd = makedist('Normal',mu,sigma);
pd.random


شاید تصور کنید که روش ساده تری هم برای این کار وجود دارد که همان استفاده از تابع randn است. اما باید توجه کرد با روش بالا تقریبا هر توزیعی را می توان مورد استفاده قرار داد. به طور مثال توزیع دو جمله ای با پارامتر های احتمال 0.4 و تعداد تکرار 10 به صورت زیر می توان نمونه گرفت:

p = 0.4;
N = 10;
pd = makedist('Binomial','p',p,'N',N);
pd.random

توزیع چند جمله متناظر با احتمال k موفقیت در N آزمایش با احتمال موفقیت p است. با تابع چگالی احتمال:
مثلا برای همین توزیع بالا احتمال 5 موفقیت و 3 موفقیت به صورت زیر حساب می شوند:
p = 0.4;
N = 10;
pd = makedist('Binomial','p',p,'N',N);
y = pdf(pd,[3,5]);

که در آن pdf تابع توزیع احتمال است. همین جا بهتر است متوقف شوید. دو مفهوم توزیع احتمال(probability distribution) و تابع چگالی احتمال (probability density function) را با هم اشتباه نگیرید. اولی در اصل همان مدل آماری ماست که استفاده می کنیم و شامل پارامتر ها وتنظیمات دیگر است در حالی که دومی فقط تابع ریاضی نشان دهنده احتمال هر پیش آمد است. در متلب می توانید توزیع احتمال چند جمله ای را به صورت زیر ببینید:
در نهایت می توان به صورت زیر این توزیع را رسم کرد:
p = 0.4;
N = 10;
pd = makedist('Binomial','p',p,'N',N);
y = pdf(pd,1:N);
plot(1:N, y);

نمودار زیر خروجی را نشان میدهد.
در قسمت های بعدی به صورت جرئی تر به این موارد می پردازیم
@MatlabTips
#For_bigginer, #Probability_distribution, #Statistical_model, #Binomial_distribution

نویسنده: (A-2)
🔵بردارهای منطقی🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش‌نیاز:(برای مبتدی و متوسط)

می خواهم در مورد یکی از قدرتمندترین و زیباترین ویژگی های متلب صحبت کنم. در مورد بردارهای منطقی.
برای مثال عبارت زیر را در پنجره فرمان وارد کنید:

 r = 1;
r <= 0.5 % no semi-colon

خروجی بصورت منطقی است. در این حالت مقدار 0 یا false تولید میشود.
✔️عبارت زیر را امتحان کنید:
r = 1:5;
r <= 3

در این حالت یک بردار منطقی تولید میشود. قطعا تحلیل و تفسیر این بردار نیازمند این نیست که آی کیو بالای 200 داشته باشید.
✔️شما همچنین می توانید دو بردار را بصورت منطقی با یکدیگر مقایسه کنید:
 a = 1:5;
b = [0 2 3 5 6];
a == b % no semi-colon!

در این حالت مقایسه بصورت المان به المان است.
در پست‌های بعدی مثال‌های کاربردی در این زمینه ارائه خواهیم کرد.
@MatlabTips
#For_beginner, #For_intermidate
#Logical_vectors
نویسنده:(A-1)
🔵نمودارهایی با گسستگی🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز: (آشنایی مقدماتی با کدنویسی)
برای:(مبتدیان و مقدماتی)

یک کاربرد خیلی مفید از بردارهای منطقی رسم نمودارهایی با گسستگی موضعی است. فرض کنید می خواهیم تابع دو ضابطه ای زیر را در بازه 0 تا 3pi رسم کنیم:
کد زیر اسکریپت مورد نظر را نشان میدهد.
x=0:pi/20:3*pi;
y = sin(x);
y=y.*(y>0); %setnegative values of sin(x) to zero
plot(x, y)

عبارت y>0 یک بردار منطقی را بر میگرداند. این بردار در جاهایی که مقدار sin مثبت است عدد 1 و در جاهایی که منفی است صفر را میدهد. در نهایت با استفاده از عملیات آرایه ای ضرب، مقادیر مثبت sin را برمیداریم.
✔️سعی کنید این کار را بدون استفاده از بردارهای منطقی انجام دهید.
ما باید خیلی خوشحال باشیم که میتونیم از بردارهای منطقی در متلب استفاده کنیم.
@MatlabTips
#For_beginner, #For_intermediate
#Logical_vecotrs
نویسنده:(A-1)
نمودار sin در جاهایی که مثبت است.
🔵اجتناب از بی نهایت🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش نیاز: کدنویسی مقدماتی
برای: (مبتدیان و مقدماتی)

✔️تقدیم به "فرداد پیر"
میخواهیم نمودار tan در بازه 3pi/2- تا 3pi/2 رسم کنیم. اولین چیز یا شایدم تنهاترین چیزی که به ذهنمان می رسد کد زیر است:
x = -3/2*pi : pi/100 : 3/2*pi;
y = tan(x);
plot(x, y)

نمودار این کد در شکل زیر مشاهده می شود:
چیزی که مشاهده می کنید به هر چیزی شبیه است به جز نمودار tan. دلیل این امر میل کردن tan به بی نهایت در مضارب فرد pi/2 است.
برای حل این موضوع بسادگی میتوانیم از بردارهای منطقی استفاده کنیم. بنابراین خط زیر را قبل از دستور plot به برنامه اضافه می کنیم:
y = y .* (abs(y) < 1e10); % remove the big ones

این عبارت جاهایی از بردار y را که مقدار زیادی دارند را صفر میکند و نمودار به درستی مقیاس می شود.
@MatlabTips
#Fo_beginner, #For_intermediate
#Logical_vectors
نویسنده: (A-1)
a nice graph for tan(x)
🔵رسم نمودارها با کارکترهای خاص🔵
سطح پیچیدگی:🌕🌕🌑🌑🌑
پیش نیاز: (تسلط به کدنویسی مقدماتی)
برای: (پیشرفته)

اکثر بچه ها در کلاس از رسم نمودارهایی با کاراکترهای خاص(مثل رادیکال، دایره، یورو، حروف یونانی و ...) سوال میپرسند.
از آنجایی که رعایت این نکات در کیفیت کار تاثیر بسزایی دارد در این پست به چگونگی این کار میپردازیم.

✔️فرض کنید یک سری داده‌هایی از دما داریم که میخواهیم رسم کنیم و در محور دما سمبول درجه را نیز نمایش دهیم.
t1 = datetime(2014,1:12,1);
temp = [0 2 12 11 15 25 23 27 25 24 12 8];

✔️اضافه کردن یک برچسب با سمبل درجه:
h = plot(t1,temp,':*');
ax = h.Parent;
title('A Year of Temperatures on the 1st of the Month')
ylabel('Degrees Celcius ^{\circ}')

در زیر شکل این نمودار آورده شده است:
حالا می خواهیم تمام اعداد روی محور yها را با سمبل درجه نمایش دهیم:
>> ytl = ax.YTickLabel

ytl =

'0'
'5'
'10'
'15'
'20'
'25'
'30'

چسباندن سمبل به اعداد محور y:
ytld = strcat(ytl,'^{\circ}');
ax.YTickLabel = ytld;