MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵کالبد شکافی🔵

1⃣هر چیزی که بعد از علامت % نوشته شود توسط نرم افزار نادیده گرفته شده و به عنوان یک کامنت است. می توانید آنچه در ذهنتان می گذرد را بصورت کامنت کنار کد خود نوشته تا در دفعات بعدی ک رجوع میکنید سر درگم نشوید.

2⃣عبارت t=0:0.1:12.3 یک بردار با گام های 0.1 می سازد.

3⃣پیاده سازی فرمول s برای هر المان از بردار t نوشته شده است و بنابراین خود s نیز یک بردار خواهد بود.

4⃣عبارت t.^2 هر المان از بردار t را به توان دو میرساند. به این نوع محاسبه عملیات آرایه ای گفته می شود که با به توان دو رساندن یک بردار متفاوت است(به حالت t^2 عملیات ماتریسی گفته میشود.)

5⃣در هر خط می توان چندین عبارت نوشت به شرط اینکه عبارت های با کاما از هم جدا شوند.

6⃣عبارت disp[t' s']d نمایشی از t و s در کنار یکدیگر است که البته این بردارها ترانهاده شده اند(با استفاده از عملگر ') و یک نمایش ستونی جذاب از داده های خروجی را در پنجره فرمان به نمایش می گذارد.
@MatlabTips
#Dissection
#For_intermediate , #For_beginners
نویسنده: (A-1)
🔵بزودی🔵
پیش‌نیاز:(برنامه نویسی مقدماتی)

متلب برای حل مسائل جبری، حساب دیفرانسیل و همچنین رسم نمودارها یک پکیج به نام Mupad دارد. همانطور که می دانید، متلب برای نوشتن برنامه های کوتاه و کار کردن با اعداد بسیار عالی است، اما برای محاسبات سیمبولیک خسته کننده است. در مقابل، Mupad بطور پیشفرض با سیمبول‌ها کار میکند و یک اینترفیس بسیار عالی برای اینکار دارد. خیلی کوتاه؛ با Mupad میتوانید شعبده بازی کنید.

✔️ ویدئوی آموزشی این بخش بزودی در @MatlabTips
@MatlabTips
#Comming_soon,#Mupad
شمه ای از بخش گرافیکی Mupad
🔵نکته روز🔵
سطح پیچیدگی:🌓🌑🌑🌑🌑
پیش‌نیاز:(آشنایی با حلقه های FOR)

هنگام نوشتن حلقه for سعی کنید اندیس حلقه را بصورت معکوس از آخر به اول تنظیم کنید.
✔️مثال
%naive approach
for i=1:1000
a(i) = sin(i);
end

✔️می توانیم اندیس ها در مثال بالا را از اخر به اول بازنویسی کنیم.
% second approach 4x faster
for i=1000:-1:1 %reverse indexing
b(i) = sin(i);
end

برای اطمینان از برابری دو بردار a و b دستور زیر را در خط فرمان اجرا کنید. اگر دو بردار با هم برابر باشند عدد 1 دریافت خواهید کرد:
any(a==b)

در روش دوم برای اولین بار خانه هزارم بردار b ساخته می شود و با ساختن این خانه، خانه های 1 تا 999 هم به تبع آن ساخته شده است و به گونه ای پیش تخصیص انجام داده ایم. به همین علت این کد از کد اول سریع تر است.
@MatlabTips
#Tip_of_the_day, #Pre_allocation
نویسنده:(A-1)
🔵توجه🔵
برای ارسال نقطه نظرات خود با ادمین @MATLABfreak تماس بگیرید.
@MatlabTips
#Caution
🔵ساختار if-else🔵
سطح پیچیدگی:🌓🌑🌑🌑🌑
پیش‌نیاز:(آشنایی با کد نویسی)
برای:(مبتدیان)

بانک ها با نرخ بهره‌های متفاوت در حال فعالیت هستند. فرض کنید اگر مقدار سپرده شما کمتر از 5000 دلار باشد، نرخ 9 درصد و در غیر اینصورت نرخ 12 درصد نصیبتا شود.
فرض کنید یک بانک یک پله جلوتر می رود و یک مقدار پول برای شما می دهد که با آن شروع کنید!!
✔️ کد زیر را چندین بار اجرا کنید:
bal = 10000 * rand;
if bal < 5000
rate = 0.09;
else
rate = 0.12;
end
newbal = bal + rate * bal;
disp( 'New balance after interest compounded is:' )
format bank
disp( newbal )

✔️ساختار پایه if-else بصورت زیر است:
if condition
statementsA
else
statementsB
end

1⃣دو عبارت statementsA و statementsB می توانند یک یا چندین دستور باشد.
2⃣اگر condition باشد، statementsA اجرا میشود در غیر اینصورت statementsB.
3⃣قسمت else اختیاری است.
@MatlabTips
#For_beginners ,#If_else
نویسنده:(A-1)
🔵رسم سطوح پارامتریک🔵
سطح پیچیدگی:🌕🌓🌑🌑🌑
پیش‌نیاز:(تسلط بر عملیات آرایه ای و ماتریسی)
برای:(پیشرفته)

خیلی از رویه هایی که در متلب تا به حال رسم کرده‌اید فرم صریح داشته است و توانسته اید با استفاده از یک تابع دو متغیره مثل f(x,y)=0 آن را بیان کنید. اما خیلی از اشکال در طبیعت وجود دارند که با یک معادله بصورت صریح قابل بیان نیستند. اینگونه اشکال را می توان با استفاده از معادلات پارامتریک معرفی کرد. در این صورت شما سه متغیر مثل x،y،z دارید که هر کدام از آنها تابع دو متغیر دیگری مثل u,v هستند.

✔️به کد زیر دقت کنید که چگونه معادلات مربوط به یک صدف دریایی را بصورت پارامتریک بیان کرده است( فرض شده است که خواننده می تواند کد را تحلیل کند):
%Copy-Right @MatlabTips
%for more detail contact @MATLABfreak.
b = 0.5 ;
a = -0.2 ;
c = 0.1;
n = 2 ;
% construct the res-by-res mesh
res = 128 ;
t = linspace(0, 2*pi, res) ;
[u,v] = meshgrid(t) ;

% define the surface
x = (a*(1-v/(2*pi)).*(1+cos(u)) + c) .* cos(n*v) ;
y = (a*(1-v/(2*pi)).*(1+cos(u)) + c) .* sin(n*v) ;
z = b*v/(2*pi) + a*(1-v/(2*pi)) .* sin(u) ;

% plot the surface
surf(x,y,z,y)
shading interp

axis off
axis equal
colormap(hsv(1024))
material shiny
lighting gouraud
lightangle(80, -40)
lightangle(-90, 60)
title('a pretty Persian Gulf seashell, using a 3D parametric surface')

@MatlabTips
#For_advanced , #Parametric_surface
نویسنده:(A-1)
عکس مربوط به صدف دریایی با استفاده از معادلات پارامتریک
🔵عبارات منطقی🔵
سطح پیچیدگی:🌓🌑🌑🌑🌑
پیش‌نیاز:(کدنویسی مقدماتی)
برای:(مبتدیان)

پیچیده‌ترین عبارات منطقی با استفاده از سه عملگر & (و)، |(یا) و ~ (نقیض) قابل ساخت است.
برای مثال معادله درجه دوم زیر را در نظر بگیرید:
ax^2 + bx + c = 0

در صورتی که دلتا (b^2 - 4ac) برابر صفر باشد و a مخالف صفر باشد، این معادله ریشه های یکسانی دارد :
roots = -b/(2a)

✔️در زیر کد متلب مربوط به این توضیحات آورده شده است:
if(b^2 - 4*a*c == 0) & (a~=0)
x = -b / (2*a);
end

دقت کنید که قبل از اجرای این کد ضرائب a,b,c تعریف شده باشند.
✔️توجه: به تفاوت بین (==) و = در برنامه دقت کنید.
@MatlabTips
#For_beginner , #Logical_operator
نویسنده:(A-1)
🔵توزیع نرمال چند متغیره🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیش‌نیاز:(آمار و احتمال و کد نویسی متوسط)
برای:(متوسط)

همه کسانی که آمار و احتمال پایه آشنا باشند با توزیع نرمال آشنا هستند. این توزیع بسیار ساده و در عین حال بسیار کاربردی است. ساده است چرا که فقط با دو پارامتر میانگین و واریانس می توان به صورت کامل آن را تعیین کرد و کاربردی است چرا که بسیاری از پدیده های طبیعی از توزیع قد افراد گرفته تا نوسانگر هارمونیک کوانتومی از این توزیع پیروی میکنند.
در فرم ساده یک بعدی این توزیع به صورت زیر است:
که در آن mu میانگین و sigma واریانس داده هاست. در نرم افزار متلب می توان به صورت زیر از این توزیع نمونه برداشت:
r=normrnd(mu, sigma)

که در آن mu و sigma یک عدد اسکالر هستند.
توزیع نرمال به صورت چند متغیره هم ظاهر می شود و آن زمانی است که پدیده مورد نظر شما دارای بیش از یک ویژگی باشد.
شکل زیر:
در این حالت بین این ویژگی ها همبستگی( correlation) وجود دارد. این همبستگی باعث می شود که واریانس فرم پیچیده تری به نام ماتریس کواریانس به خود بگیرد که یک ماتریس d*d است و d در آن تعداد ویژگی هاست. پس در این ماتریس عضو (i,j) نشان دهنده همبستگی ویژگی i ام با j ام است. همچنین میانگین به صورت ساده به صورت برداری به اندازه d است که در آن هر عنصر میانگین هر ویژگی است. در متلب می توان از این توزیع به صورت زیر نمونه گرفت:

mu = [2,3];
sigma = [1,1.5;1.5,3];
r = mvnrnd(mu,sigma);


اگر صد نمونه بگیریم و در یک شکل رسم کنیم به صورت زیر خواهد شد
mu = [2,3];
sigma = [1,1.5;1.5,3];
rng default % For reproducibility
r = mvnrnd(mu,sigma,100);
figure
plot(r(:,1),r(:,2),'+')
در مطالب بعدی به صورت ریز تری به معنای ماتریس های کواریانس و نیز کاربردهای توزیع نرمال چند متغیره می پردازیم

@MatlabTips
#For_intermediate , #Multivariate_normal_distribution, #Normal_distribution
نویسنده: (A-2)
🔵ماتریس کوواریانس چیست و چه کاربردهایی دارد؟🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیش‌نیاز:(آمار و احتمال و کد نویسی متوسط)
برای:(متوسط)

زمانی که با داده های یک بعدی مانند قد افراد روبرو هستیم علاوه بر میانگین واریانس هم اطلاعات مفیدی در اختیار ما قرار می دهد. واریانسِ بیشتر به طور ساده به معنای پراکندگی بیشتر در داده هاست. با استفاده از دستور متلب زیر میتوانید این موضوع را برای دو بردار تستی دریابید:
V1=[4,6,2]
Var(V1)
V2=[3,10, 2]
Var(V2)


مشخص است که پراکندگی داده ها در V2 بیشتر و بنابراین واریانس بیشتری دارد.
اما بیشتر پدیده ها به همین سادگی با یک عدد توصیف نمی شوند. به طور مثال شما نمی توانید دانشجویان یک کلاس را تنها با نمره یکی از درس هایشان تحلیل کنید. در این موارد باید به این دقت کرد که بین درس های مختلف هم رابطه هایی وجود دارد به طور مثال فرض کنید دانشجویان یک کلاس 5 نفره در دروس ریاضی، زبان، هنر نمره های زیر را کسب کرده باشند:
کواریانس دو بردارx و y به صورت زیر تعریف می شود: