MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵آموزش تلگرامی🔵
حساب کردن دیدن 45 ملیون ایرانی تو تلگرام عضون. رقم عجیبی نیست وقتی میبینی آدمای دور و برت سر سفره غذا هم یه دستشون قاشقه یه دستشون گوشی که دارن تلگرام چک میکنن. از این میزان کاربر بخش خیلی زیادیشون یا شاید بشه گفت همشون عضو حداقل یک کانال یا گروه هستن. و از این بین یه سری عضو کانال های سرگرمین مثل چیزمیز و بخندید و خاله بتول و عمو جعفر و ... و یه سریاشونم که طالب علمن " ولو بالتلگرام" تو کانالای عملی هم عضو میشن.
کانالای سرگرمی که تکلیفش مشخصه و مسیرشون درست. اما این وسط من نمیدونم چطور میشه یه رشته یا نرم افزار رو تو تلگرام آموزش داد. تلگرام به زحمت میتونه مطالب رو دسته بندی کنه. مثلا همین کانال متلب رو در نظر بگیرید. الان حداقل 5،6 تا کانال متلب تو تلگرام وجود داره. همه هم دارن زور میزنن رشته هایی مثل کنترل، هوافضا، ژنتیک و پردازش تصویر، شبکه های عصبی و ... رو زورکی بکنن تو مخ ملت. مسلما نمیشه رشته ای رو که باید یه ترم بری کلی تلاش کنی سر کلاس تا یاد بگیری بیای تو تلگرام اموزش ببینی.
همه اینا رو گفتم که به دوستانی که تا این لحظه به ما افتخار همراهی دادن بگم که کانال متلب تیپز رویه اش به این صورته که یک سری نکات جذاب و کاربردی رو که البته حاصل کلی سبک سنگین کردن علمی است به عنوان یک پست تو کانال میزاره و ابدا قصد ما تدریس یک شاخه اونم تو تلگرام نیست. برای همین این کانال اینجوری نیست که سر ساعت یه پست بزاره. ممکنه چند روزم طول بکشه تا یه موضوع کاربردی و جهان شمول پیدا بشه و تقدیم شما عزیزان کنیم.
@MatlabTips
🔵مقایسه دو کلاس Value و handle🔵
سطح پیچیدگی: 🌕🌓🌑🌑🌑
برای: همه
پیش نیاز: آشنایی ساده با مفاهیم ابتدایی برنامه نویسی
📝هدف از این پست: بررسی دو نوع کلاس و مشاهده رفتار آنها در برابر عملیات مختلف

اگر این پست رو تو یه گروه دیگه فوروارد کنید چه اتفاقی می افته؟ به ازای هر نفری که میبینه به شمارنده پست یک واحد اضافه میشه. اما اگر من این پست رو از کانالم حذف کنم چه اتفاقی می افته؟ پستی که شما قبلا تو یه گروه دیگه فوروارد کردید حذف نمیشه آما دیگه شمارندش کار نمیکنه. پس شمارنده پست و خود پست تو شی جدا از دو کلاس جدا هستند.
توی متلب هم یه همچین چیزایی وجود داره. اساسا متلب دو نوع کلاس (مبحثی مربوط به برنامه نویسی شی گرایی است که فعلا نیازی نیست در مورد آن بدانید)داره. value با handle.
🖊کلاس های vlaue: اشیایی میسازند که در مواجه با عمل کپی رفتاری مشابه متغیرهای عادی در متلب دارند. هر کپی که شما میسازید یک شی مستقل است. هر بلایی که سری نسخه کپی می آورید ربطی به نسخه اصلی ندارد.
🖊کلاس های handle: اشیایی میساز که به عنوان یک مرجع عمل میکنند. یک هندل و تمام کپی های آن به شی اولی اشاره دارند. هر بلایی که سر نسخه کپی هندل می آورید مستقیما با نسخه اصلی در ارتباط خواهد بود.
📝مثال:
متغیرهای عددی در متلب اشیایی از کلاس value محسوب میشوند. برای مثال هنگام که شما متغیر a را به متغیر b کپی میکنید، جفت آنها مستقل از هم کار میکنند. تغییر در متغیر a تغییر در متغیر b حاصل نمکند.
a = 8;
b = a;
حالا بیایید متغیر a را عوض کنید. متغیر b همان مقدار 8 باقی میماند.
a = 6;
b
b =
8
حتی اگر با استفاده از دستور clear a متغیر a را حذف کنید، باز همچنان متغیر b وجود دارد.
کلاس handle:
بیاید هندل یک شی گرافیکی را ذخیره کنیم. متغیری که هندل اشیا گرافیکی (در پست های قبلی بصورت ساده این مفاهیم بیان شد) را در خود نگه میگدارد از کلاس handle است.
x = 1:10;
y = x;
h = plot(x,y);

حال بیایید متغیر h را در متغیر دیگری کپی کنیم و سپس متغیر h را حذف کنید(دقت کنید که برای حذف یک هندل از دستور delete استفاده میکنیم:
hcopy = h;
delete(h)

حالا متغیر hcopy را در پنجره فرمان تایپ کنید:
hcopy

hcopy =

handle to deleted Line

در واقع مورد آخری همان شمارنده پست بود و مورد اول خود پست.
#Handle, #Value, #For_all
@MatlabTips
🔵نامگذاری تابع🔵
پیش نیاز: ندارد
سطح پیچیدگی:🌑🌑🌑🌑🌑
برای: همه
📝هدف از این پست: یادگیری یک گام دیگر برای نوشتن برنامه ای اصولی تر

برای اینکه نامی که برای تابع انتخاب می کنید هم نام با تابعی دیگر نباشد که بعدها موجب یک کانفلیکت شود، می توانید با استفاده از دستور which از این رخداد جلوگیری کنید:
which -all functionname

در این فرمان functionname اسم تابع شماست و -all باعث میشود که دستور which تمام مسیرهای ممکن را جستجو کند.
#Programming , #For_all
@MatlabTips
🔵تفاوت Accuracy و Precision🔵
برای: همه
پیش نیاز: ندارد
سطح پیچیدگی: 🌓🌑🌑🌑🌑

شهید بهشتی با دکتر مهرشاهی محاسبات عددی داشتیم. دکتر واقعا کارش درست بود. برعکس دکترای الان که همه چی رو حفظ میکنن، دکتر ما همه چی رو فهمیده بود. همش میگفت: زبان فارسی زبان شعر و شاعریه. زبان علمی نیست. اصرار داشت که حتما کتاب زبان اصلی بگیریم.
الان که خواستم این پست رو بزارم و نتونستم معادل فارسی برای دو کمله accuracy و precision پیدا کنم، یاد اون استاد شریف افتادم.
🖊تعریف Accuracy:
اینه که مقدار اندازه گیریمون چقد به مقدار واقعی نزدیک باشه.
🖊تعریف Precision:
اینه که مقادیر اندازه گیری چقد نسبت به همدیگه دقیق باشن.
صفحه دارت رو در نظر بگیرید که شما به سمت اون چند تیر پرتاب میکنید. اگر همه تیرها به مرکز بخوره این یعنی هم accuracy و هم precisionشما عالیه.
اگر همه تیرها مثلا در زاویه 30درجه و شعاع rمتری از مرکز بخورن، این یعنی accuracyشما پایینه ولی precisionتون خوبه.
اگر هر تیر در یک زاویه و شعاع برخورد کند این یعنی نباید دارت بازی کنید.
در حقیقت precision یک بایاس دارد. بایاس چیست؟
مثال هایی از بایاس
1⃣ترازویی که بدون آنکه چیزی رویش گذاشته باشید 1کیلوگرم را نشان میدهد.
2⃣همواره قد خودتان را در حالی اندازه گیری کنید که کفشی پاشنه بلند پوشیده اید.
3⃣کرونومتری که زمان را اندازه گیری میکند، اما مقداری زمان صرف این میشود که شما کلیک کنید.
در همه موارد بالا اندازه گیری های شما به یک اندازه خطا دارد. اگر همه اینها را به همان اندازه شیفت دهیم درست میشود.
نکته اخر اینکه Accuracy وابسته به سیستم اندازه گیری شماست.
پی نوشت: عزیزم همه اینا به متلب ربط داره. همه اینا به محاسبات عددی ربط داره. همش.
#For_all ,#accuracy, #precision
@MatlabTips
🔵شیپور گابریل🔵
پیش‌نیاز: گذراندن ریاضیات 1 و آشنایی با کتابخانه سیمبولیک
سطح پیچیدگی: 🌕🌑🌑🌑🌑
📝هدف از این پست: بررسی پارادوکس شیپور گابریل

شیپور گابریل یا(ترومپت توریچلی) یک تصویر هندسی با سطح بی نهایت و حجم محدود است. نامگذاری این شکل برمیگردد به یک اتفاق معهود سنتی که گابریل به عنوان یک فرشته بر شیپوری میدمد تا همگان را خبر کند که روز قضاوت فرا رسیده است، با وسیله ای محدود جهانی نامحدود را اطلاع رسانی میکند.(در فرهنگ اسلامی صور اسرافیل).
مشخصات این شکل برای اولین بار توسط فیزیکدان و ریاضیدان ایتالیایی توریچلی در قرن 17 بررسی شد.
شکلی با سطح بی نهایت و حجمی متناهی به سان داشتن سطلی است که می توانید آن را از رنگ پر کنید ولی نمیتوانید سطح آن را رنگ آمیزی کنید که منجر به یک پارادوکس میشود. ز این دست پارادوکس ها میتوان به برف‌دانه کخ نیز اشاره کرد که محیطی بی نهایت دارد اما سطحی محدود.
شیپور گابریل با دوران دادن تابغ y=1/x حول محور xها بدست می‌آید.(بازه انتگرالگیری را از 1 تا بی نهایت در نظر بگیرید). به برکت کتابخانه سیمبولیک متلب می توانیم به شکلی نمادین این انتگرالگیری را انجام دهیم.
>> syms x
>> A = int(1/x,1,inf) % calculate area from 1 to inf

A =

Inf

و با استفاد از دستور ezplot که باز از کتابخانه سیمبولیک متلب است داریم:
ezplot(1/x,1,10)
Forwarded from Deleted Account
نمودار y=1/x
اگر این نمودار را حول محور x دوران دهید، میتوانید حجم آن رابه صورت مجموع حجم دیسک های دیفرانسیلی در نظر بگیرید. حجم هر دیسک دیفرانسیلی برابر است با مساحت سطح دیسک(دایره ای به شعاع y یا 1 بخش بر x) در ارتفاع آن(dx).
با استفاده از دستور cylinder که یک استوانه رسم میکند، میتوان با ورودی دادن نمودار بالا، آن را دوران دهد تا چیزی شبیه شیپور گابریل بدست آید.
x = 1:0.01:20;
[X,Y,Z]=cylinder(1./x);
mesh(Z,Y,X)
xlabel('x')
ylabel('y')
zlabel('z')
view(-90,90)
Forwarded from Deleted Account
دوران منحنی بالا با استفاده از دستور cylinder
اگر نیک بنگریم، تابع حجم این شیپور دارای یک ترم درجه دو از x در مخرج که ناشی از به توان دو رساندن شعاع دایره میشود می باشد. همین باعث میشود که انتگرال محدود شود. دوباره در متلب داریم:
>> syms x
>> V = pi * int(1/x^2,1,inf) %calculate volume of Gabriel horn

V =

pi

بیشینه حجم برابر pi میباشد.
اگر به رابطه ریاضی این انتگرال هم نگاه کنیم، مهم نیست کران بالای انتگرال چقدر بزرگ باشد، به هر حال مقدار انتگرال به یک عدد متناهی میل میکند.
Forwarded from Deleted Account
محاسبه حجم شیپور
این پارادوکس در ریاضیات و هنگامی که از بی نهایت صحبت میکنیم باید معتبر باشد. در عمل همچین چیزی امکان پذیر نیست.
شما نمیتوانید سطلی بسازید که بیرون آن نشود رنگ کرد اما بتوان آن را از رنگ پر کرد، چرا که نیاز است سطل را تا بی نهایت امتداد داد. چطور میتوانید در بی نهایت رنگ بزنید؟ لبه سطل در بی نهایت خیلی خیلی ریز شده است، اینقدر ریز شده است که در عمل هیچ مولکولی از رنگ از آن کوچکتر نیست.
پی نوشت: هیچ مسئولیتی در مورد استدلال آخر به عهده نمیگیریم، صرفا یک ریزالویشن بود.

#Gabriel, #Paradox
@MatlabTips
🔵دستور ezplot🔵
پیش نیاز: آشنایی مقدماتی
برای: همه
سطح پیچیدگی: 🌓🌑🌑🌑🌑
📝هدف از این پست: تشریح دستورات بکار رفته در پست شیپور گابریل

در پست بالا (شیپور گابریل)از این دستور استفاده کردیم که یک تابع با متغیرهای سیمبولیک را رسم کند.
دو حرف اول این دستور که تلفظی شبیه easy به معنی آسان دارد، این مفهوم را منتقل میکند که شما میتوانید به راحتی یک نمودار را رسم کنید بدون اینکه درگیر تعریف بازه و ... شوید.
ورودی ها:
1⃣می توانید یک تابع بی نام تعریف کنید و با این دستور رسم کنید:
f = @(x) sin(x);
ezplot(f)

2⃣می توانید یک تابع سیمبولیک تعریف کنید و با این دستور رسم کنید:
syms x
f = sin(x);
ezplot(f)

3⃣می توانید تابع را درون یک رشته به این دستور ورودی دهید:
ezplot('sin(x)')

البته یه نکته خیلی خوب در مورد این تابع رسم توابع ضمنی هستش.
ezplot('sin(x)+cos(y)')

اگر به شکل ها دقت کنید متوجه میشوید که برای پی بردن به این نکته که بازه رسم در این دستور از منفی 2pi تا 2pi است به کسی مدال افتخار تعلق نمیگیرد. در صورتی که میخواهید بازه غیر این باشد میتوانید به صورت زیر بازه را تغییر دهید.
ezplot('sin(x)',[1,10])

#For_all, #plot
@MatlabTips
🔵برنامه نویسی سمبلیک🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: متوسط و پیشرفته

شاید خیلی از افراد مانند من که سابقه حل مساله روی کاغذ در ریاضی را دارند وقتی برای اولین بار با یک زبان برنامه نویسی مواجه می شوند تجربه ناخوشآیندی را داشته باشند. دلیل آن هم ساده است. بسیاری از چیز هایی که شما قبلا در ریاضی خوانده اید معادل های به کلی متفاوتی در کامپیوتر دارند. به طور مثال متغیر دیگر آن معنای سابق خود را ندارد. یا علامت تساوی معنای دیگری را دارد. همه چیز گسسته است و وقتی یک متغیر را تعریف می کنید همیشه باید در ذهن داشته باشید که این فضایی در حافظه من را گرفته است و قس علی هذا.
شاید اولین ایده ساخت زبان برنامه نویسی سمبلیک را استفان ولفرام در بسته نرم افزاری Mathematica پیاده سازی کرد. شاید تجربه او از فیزیک نظری با ریاضیات محض او را به این نتیجه رساند. به هر روی ایده او به زبان های برنامه سازی دیگر مانند متلب هم راه پیدا کرد و در این زبان ها هم میبینیم که می توان به دنیای تخیلی ریاضیات باز هم برگردیم (تخیلی به معنای وجود بی نهایت واقعی و دیگر ایده هاست). تابع sym و syms به ما کمک می کند که متغیر به معنای ریاضیاتی آن داشته باشیم. همانطور که در ریاضیات خوانده ایم اعداد حقیقی، طبیعی و غیره هستند (بر خلاف کامیپیوتر که مجبور هستیم از float، int و امثالهم استفاده کنیم) بنابراین شما قادر خواهید بود نوع عددتان را هم تعریف کنید. قطعه کد زیر سه متغیر را تعریف می کنند:

>> x = sym('x');
>> y = sym('y');
>> z = sym('z');


یا به طور خلاصه تر:

>> syms x y z;


وقتی نوعی بیان نمی شود (که معمولا هم همین کار را می کنیم) نوع را حقیقی در نظر می گیرد. می توان به صورت دلخواه هم تعریف کرد:

syms x y integer


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

>> a = sym(4.12) 
a =
103/25


می توان با توابع هم آن ها را ترکیب کرد و مقدار تابع را محاسبه نمود:

>> f = x + y - z;
>> subs(f,{x y z},{1 2 3})
ans =
0


و می توان معادلات را به صورت زیر حل کرد:

>> solve('sin(x) = 1')
ans =
pi/2

>> x = solve('2*x-8 = 10')
x =
9


باید توجه کنید آنچه در داخل solve می آید یک رشته است و نباید خود متغیر را به صورت مستقیم استفاده کرد. آنچه در داخل این رشته نوشته می شود بسیار مشابه با آن چیزی است که در حل معادله های ریاضی مورد استفاده قرار می دادیم. مثلا دستگاه معادلات را به صورت زیر داریم:

>> [x y z] = solve('x+y-z=4','x-2*y+3*z=-6','2*x+3*y+z=7')
x =
1
y =
2
z =
-1


اما قضیه زمانی جالب تر می شود که شما بتوانید به صورت پارامتری معادله را حل کنید یعنی زمانی که معادلات از متغیر ها کمتر باشند. در این حالات جواب های شما عدد نیستند بلکه متغیر هم دارند:

>> [x y] = solve('x+y-z=4','x-2*y+3*z=-6','x,y')
x =
2/3 - z/3
y =
(4*z)/3 + 10/3

>> [x z] = solve('x+y-z=4','x-2*y+3*z=-6','x,z')
x =
3/2 - y/4
z =
(3*y)/4 - 5/2


در قسمت بعدی بیشتر از این ابزار جالب استفاده می کنیم. مثلا مشتق گرفتن یا انتگرال گیری نامعین را مورد بررسی قرار می دهیم.
@MatlabTips
#Symbolic_Programming , #Symbolic_math
🔵کپی کردن از پنجره figure🔵
برای: همه
سطح پیچیدگی:🌑🌑🌑🌑🌑

شاید خیلی مبتدی به نظر برسد، ولی کپی کردن از پنجره figure یک سری آپشن دارد که عناوین خود توضیح دهنده هستند. همین آپشن های ساده ممکن است به زیباسازی گزارش شما کمک کند. به جای استفاده از پرینت اسکرین یا snipping tool میتوانید از منوی edit گزینه copy figure را انتخاب کنید، تصویر در clip board کپی شده است و می توانید در word با فشردن ctr+v نمودار را پیست کنید.
به تصویر بالا نگاه کنید👆👆👆
#Copy_figure
@MatlabTips
الگوریتم اقلیدس پدربزرگ تمام الگوریتم هاست، زیرا قدیمی ترین الگوریتم مهمی است که تا به امروز زنده مانده است. (دونالد کنوث)
خرم آن نغمه که مردم بسپارند به یاد...

از دیرباز افراد زیادی به دنبال اکسیر حیات ابدی انواع روش های عجیب و خطرناک را پیش می گرفتند البته آرزوی جاودانگی را خاکیان همه به گور می بردند در این میان آنچه می ماند اثر و کار افراد بود که البته باز هم تعداد کمی این شانس را داشتند که کارشان در طول زمان رنگ نبازد و از اعتبارش کاسته نشود. شاید یکی از عجیب ترین موارد اقلیدس باشد که کارهای او تا مدت ها پر تاثیر بود. سخت است تصور این که ایده ای 300 سال پیش از آنکه حتی مسیح به دنیا آمده باشد امروز همچنان یکه تاز باشد و در قلب پیچیده ترین سیستم های رمز نگاری ای قرار بگیرد که مسئول انتقال میلیون ها دلار به صورت امن در بستر اینترنت است. الگوریتم بزرگترین مقسوم علیه مشترک (ب.م.م) یا GCD (که در مدرسه به نام روش نردبانی میشناختیم) اولین بار توسط اقلیدس ارائه شد و در طول چند صد سال اخیر تمام دانش آموزان دنیا آن را فرا گرفته اند (و خواهند گرفت)، الگوریتم ساده ای است که در طول این 2000 سال با وجود تلاش بسیار زیاد ریاضیدانان و دانشمندان علوم کامپیوتر رقیب جدی ای از لحاظ کارایی و زیبایی برایش یافته نشده است. به این ترتیب این الگوریتم اکسیر جاودانگی اقلیدس شد!
@MatlabTips
🔵در راستای پست قبلی🔵
پست قبلی که آقای زندیه گذاشت مثل الباقی پست ها برای علاقه مندان به ریاضیات جذاب بود. باعث افتخاره که یک متخصص data mining از شریف در کنار ما فعالیت دارند.
اما بد نیست که در راستای پست قبلی، برنامه ای هم برای محاسبه ب.م.م بنویسیم.

اگرچه الگوریتم بسیار پرکاربرد و کارآمد است، اما با روابط ساده ای بیان میشود. خیلی از شاهکارهای تاریخ به این صورت بوده است. فرمول معروف جرم به انرژی انشتاین، مجموعه مندلبرات، ژولیا و ... .
فلوچارت این الگوریتم در زیر آورده شده است.
Forwarded from Deleted Account
به راحتی این فلوچارت به کد تبدیل میشود.
% Clears screen and deletes all the variables in the workspace
clear; clc
% Asks the user for input and takes only positive numbers into account
a = input('First number: ');
b = input('Second number: ');
a = abs(a);
b = abs(b);
% This is the real trick, normally performed a number of times
r = mod(a,b);
% Repeats the operation until updates of a equal updates of b
while r ~= 0
a = b;
b = r;
r = mod(a,b);
end
% Displays the result

GCD = b
البته خود متلب هم تابعی به نام gcd دارد که همین کار را انجام میدهد. جالب است بدانید که مهندسی که این تابع را برای مث ورک نوشته است، رفرنس به مقاله آقای "کنوث" داده است. همان شخصی که آن جمله قصار در مورد دانشمند شهیر اقلیدس گفته است(در پست قبل).
رفرنس مقاله:
[1] Knuth, D. "Algorithms A and X." The Art of Computer Programming, Vol. 2, Section 4.5.2. Reading, MA: Addison-Wesley, 1973.
#Gcd, # Euclidian_algorithm
@MatlabTips