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

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

1⃣ پست‌هایی که برای افراد مبتدی است با هشتک For_beginner#
2⃣ پست‌هایی که برای افراد مقدماتی است با هشتک For_intermediate#
3⃣ پست‌هایی که برای افراد پیشرفته است با هشتک For_advanced#
و البته هر کدام از این دسته بندی های بصورت سریالی است که با دنبال کردن مرتب آنها و حفظ پیوستگی می توانید راحت تر آموزش ببینید.
@MatlabTips
#Caution
نویسنده:(A-1)
🔵توابع ریاضیاتی🔵
سطح پیچیدگی:🌓🌑🌑🌑🌑
پیش‌نیاز:(ندارد)
برای: (مبتدیان)

در نرم افزار متلب تمام توابع ریاضی معمول که در ماشین حساب‌های علمی وجود دارد یافت می‌شود، مانند sin، cos و log (لگاریتم طبیعی).
1⃣ مجذور عدد پی (محیط دایره به قطر آن) را با ( sqrt(pi در متلب می‌توان محاسبه نمود. توجه کنید که متلب مقدار pi را میفهمد چرا که جز یکی از بیشمار توابع داخلی آن است.
>> sqrt(pi)

ans =

1.7725

2⃣ در توابع مثلثاتی مانند ( sin(x دقت داشته باشید که آرگومان X برحسب رادیان است. با ضرب درجه در عدد pi/180 رادیان بدست می‌آید.
>> sin(90*pi/180)

ans =

1

3⃣ تابع نمایی در متلب با (exp(x حاصل میشود. بنابراین عدد e بصورت زیر بدست می‌آید.
>> exp(1)

ans =

2.7183

✔️ از آنجایی که توابع داخلی بیشماری مانند pi و sin وجود دارد، بسیار دقت کنید که متغیرهایی که خودتان تعریف میکنید با این توابع دارای نام یکسان نباشد.
>> pi = 4;
>> sqrt(pi)

ans =

2
>> clear pi
>> sqrt(pi)

ans =

1.7725

دقت کنید که دستور clear تمام متغیرها در workspace را حذف میکند. در صورتی که clear pi تنها متغیر pi را پاک میکند.
@MatlabTips
#Math , #Variable
#For_beginners
نویسنده:(A-1)
🔵بردارها و ماتریس‌ها 🔵
سطح پیچیدگی:🌒🌑🌑🌑🌑
پیش‌نیاز:(ندارد)
برای:(مبتدیان)

همان‌طور که در ویدوهای پیش‌مقدماتی نیز گفته شد، نام MATLAB از Matrix Laboratory می آید چرا که متلب طوری طراحی شده است که با ماتریس‌ها میتواند کار کند. ماتریس یک شی مستطیلی (برای مثال یک جدول) است که سطرها و ستون هایی دارد.
بردار یک نوع خاص از ماتریس است که تنها یک سطر یا یک ستون دارد. در زبان های برنامه نویسی دیگر به بردارها لیست یا آرایه هم می گویند. بردار را به عنوان لیستی از اعداد در نظر بگیرید. نرم افزار متلب با شیوه ای یکسان بر روی ماتریس و بردار عمل میکند ولی از آنجایی که بردار راحت تر است ابتدا با بردار شروع میکنیم.
✔️مقداردهی به یک بردارد:
X = [1 3 0 -1 5];
A = [5, 6, 7];
b = [110-100];

کد بالا را در پنجره فرمان وارد کنید و برای مشاهده هر متغیر از دستور (disp(x استفاده کنید. این دستور یک عبارت را در خروجی نمایش میدهد.
به دو نکته زیر دقت داشته باشید:

1⃣عناصر در بردار در براکت ها ([ ]) قرار می گیرند.
2⃣عناصر با کاما یا اسپیس از هم جدا میشوند.

✔️بردارها با عملگر کولون ( : ) نیز قابل مقدار دهی هستند.
x = 1:10;
y = 1:0.5:4;

به رابطه اعداد تولید شده دقت کنید و ببینید اگر در حالتی مانند x که فقط دو عدد داریم با چه گامهایی بردار ساخته میشود.
@MatlabTips
#For_beginners, #Vector
نویسنده:(A-1)
🔵"2>A>3"پاسخ غیر منتظره 🔵
سطح پیچیدگی:🌕🌒🌑🌑🌑
پیش‌نیاز:(آشنایی با مفاهیم و کدنویسی)
برای:(مقدماتی و پیشرفته)

به عنوان بخشی از برنامه سعی کنید میخواهید ببینید که آیا یک مقدار بین دو مقدار دیگر قرار میگیرد یا خیر. فرض کنید A مقداری است که میخواهیم چک کنیم که بین دو مقدار low=3 و high=7 قرار می‌گیرد یا خیر.
low = 3;
high = 7;

از نگاه ریاضی میتوانید کد خود را بصورت زیر بیان کنید:
low < A < high

خوب می خواهیم برای مقادیری از A که هم در این محدوده و هم در خارج از این محدوده باشند امتحان کنیم. می خواهم این کار را در قالب یک تابع مستعار (anonymous) انجام دهم که از تکرارهای بی مورد نیز اجتناب شود.
myExpr = @(x) low < x < high;
inResult = myExpr(pi)
outResult = myExpr(17)

خروجی‌ها:
inResult =
1
outResult =
1

هههه. امکان نداره که هم pi و هم 17 بین 3 و 7 باشد. پس جریان چیه. قبل از اینکه آقای (A-1) پاسخ دهد، لختی تامل کنید بلکه جواب را یافتید.
@MatlabTips
#For_intermediate , #For_advanced , #Common_mistake
ادامه دارد...
نویسنده: (A-1)
قسمت اول عبارت را در نظر بگیرید:
>>step1In = low < pi
>>step1Out = low < 17
step1In =
1
step1Out =
1

میبینیم که برای هر دو ورودی جواب درست است. یعنی هم pi و هم 17 از مقدار low=3 بزرگتر هستند. در قسمت بعد این pi و 17 نیستند که با high مقایسه می‌شوند بلکه step1In و step1Out با آنها مقایسه می شود.

✔️دستور زیر را در پنجره فرمان اجرا کنید:
>> whos step1*
Name Size Bytes Class Attributes

step1In 1x1 1 logical
step1Out 1x1 1 logical

نتایج گام اول منطقی به نظر میرسد(اعداد از low بزرگتر هستند؟) و جواب برای هر دو عدد بله یا true می باشد که بصورت عبارات منطقی نمایش داده می شود. اما در گام دوم (مقایسه با عدد high) خروجی گام اول (که یک عبارت منطقی است) مورد مقایسه قرار میگیرد و ما باید از خود بپرسیم آیا 1(یک منطقی) از high کوچکتر است؟
چگونه یک جواب مناسب بگیریم؟

✔️باید دو عبارت منطقی را به روشی متفاوت از آنچه در بالا بود با هم ترکیب کنیم:
>>myExprCorrect = @(x) (low < x) & (x < high)
>>inResult1 = myExprCorrect(pi)
>>outResult1 = myExprCorrect(17)
myExprCorrect =
@(x)(low<x)&(x<high)
inResult1 =
1
outResult1 =
0

در این برنامه بررسی می کنیم که آیا عدد از low بزرگتر است و بصورت مجزا بررسی میکنیم که همان عدد از high کوچکتر است. بعد از اینکه دو جواب منطقی گرفتیم آنها را با هم ترکیب میکنیم.
@MatlabTips
#Common_mistake
#For_advanced, #For_intermediate,
نویسنده:(A-1)
🔵کدهای اسکی (ASCII): دابل (double) و کاراکتر char🔵
سطح پیچیدگی:🌓🌑🌑🌑🌑
پیش‌نیاز: (آشنایی با انواع داده)
برای: (مقدماتی و پیشرفته)

یک کارکتر در متلب با یک مقدار عددی 16 بیتی نمایش داده می شود. کد کاراکترها از 1 شروع می شود. برای مثل کدهای اسکی برای حروف A تا Z بصورت اعداد صحیح متوالی از 65 تا 90 است، در حالی که کدهای a تا z از 97 تا 122. می توانید کدهای اسکی برای یک رشته را با دستور double ببینید.
✔️مثال
>> double('MatlabTips')

ans =

77 97 116 108 97 98 84 105 112 115

✔️و بالعکس با استفاده از دستور char می توانید رشته متناظر از اعداد داده شده را ببینید:
>> char([106    97    98    98    97   114])

✔️به این مثال دقت کنید که یک خروجی جالب تولید میکند (به آن فکر کنید):
>> x = char(ones(4,20)*double('#'))

x =

####################
####################
####################
####################

@MatlabTips
#For_advanced ,#For_intermediate
#ASCII, #Double
نویسنده:(A-1)
MatlabTips
MATLAB_Pre_Elementary_Part5_(A-1).mp4
آخرین ویدئوی مربوط به سطح پیش مقدماتی (Pre_Elementary).
🔵دستور disp🔵
سطح پیچیدگی:🌓🌑🌑🌑🌑
پیش‌نیاز:(آشنایی مقدماتی با کدنویسی)
برای:(مبتدیان و مقدماتی)

فرم کلی استفاده از دستور disp برای متغیر X بصورت زیر است:
disp(x)

هنگامی که از disp استفاده میکنید، نام متغیر نمایش داده نمیشود و خط اضافه ای قبل از اینکه مقدار را ببینید مشاهده نمیکنید.
✔️به مثال زیر دقت کنید:
>> a = 1

a =

1

>> disp(a)
1

✔️همچنین از disp برای نمایش پیغمامی که درون آپستروف قرار گرفته است( به آن رشته میگویند) نیز استفاده کنید.
disp('MatlabTips is a really useful channel')

✔️برای اینکه همزمان از یک مقدار عددی و یک رشته در این دستور استفاده کنید از تکنیک زیر استفاده کنید:
x=2;
disp( [’The answer is ’, num2str(x)] );

همانطور که پیشتر هم دیدیدم با استفاده از براکت می توانیم یک بردار بسازیم. دقت کنید که تمام عناصر مربوط به آرایه در متلب یا باید عدد باشند یا رشته و به همین دلیل در مثال بالا مجبور شدیم عدد را به رشته تبدیل کنیم.

@MatlabTips
#For_beginners , #For_intermediate
#Disp, #Vector
نویسنده:(A-1)
#Coming_soon
🔵ابزار curve fitting🔵
پیش‌نیاز:(آشنایی مقدماتی با متلب، آشنایی مقدماتی با مفاهیم آماری)
برای:(مهندسین مالی، اقتصاد و فنی مهندسی)

1⃣جعبه ابزار curve fitting دارای توابع و برنامه هایی برای برازش منحنی ها و سطوحی از داده هاست. این جعبه ابزار به شما این امکان را می دهد که داده‌ها را تحلیل (داده سنجی)، پیش پردازش و پسا پردازش، حذف داده‌های پرت و ... کنید.
2⃣میتوانید با استفاده از کتابخانه های قدرتمندی که دارد تحلیل رگرسیون با استفاده از مدل‌های خطی و غیر خطی و یا با استفاده از مدل سفارشی خودتان انجام دهید.
3⃣بعد از برازش میتوانید روش‌های متعددی برای پساپردازش اعم از رسم، درونیابی و برونیابی، تخمین بازه اطمینان و محاسبه انتگرال و مشتق پیاده سازی کنید.

✔️همه اینها به زودی در کانال @MatlabTips
ما را دنبال کنید:
@MatlabTips
#Coming_soon , #Curve_fitting, #Regression
نویسنده:(A-1)
🔵یک مثال🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش‌نیاز:(آشنایی با کدنویسی)
برای:(مبتدیان و مقدماتی)

✔️یک سنگ را بصورت عمودی به هوا با سرعت اولیه u به هوا پرتاب می کنیم، فاصله طی شده s بعد از گذشت t ثانیه از رابطه زیر حاصل می شود:
s = ut-gt^2/2

که g شتاب گرانش است. از مقاومت هوا صرف نظر شده است. در زیر کد این مثال آورده شده است:
% Vertical motion under gravity
g = 9.81; % acceleration due
% to gravity
u = 60; % initial velocity in
% metres/sec
t = 0 : 0.1 : 12.3; % time in seconds
s = u * t - g / 2 * t .^2; % vertical displacement
% in metres
plot(t, s), title('Vertical motion under gravity' )
xlabel('time' ), ylabel('vertical displacement' )
grid
disp( [t' s'] ) % display a table

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

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)