🔵مقدار ویژه و بردار ویژه در متلب🔵
مسئله مقادیر ویژه (Eigenvalue problem) (یا مسئله مقادیر ذاتی) مربوط به ماتریسها و عملگرها از جمله اساسیترین و ذاتیترین و به همین جهت پرکاربردترین مباحث و ابزار در بسیاری از زمینههای علوم و فنون قدیم و جدید میباشد. در این پست خلاصه ای از تئوری این مبحث و همچنین کدنویسی آن در متلب مورد بحث قرار گرفته است.
https://coffeematlab.com/2625/مقادیر-ویژه/
مسئله مقادیر ویژه (Eigenvalue problem) (یا مسئله مقادیر ذاتی) مربوط به ماتریسها و عملگرها از جمله اساسیترین و ذاتیترین و به همین جهت پرکاربردترین مباحث و ابزار در بسیاری از زمینههای علوم و فنون قدیم و جدید میباشد. در این پست خلاصه ای از تئوری این مبحث و همچنین کدنویسی آن در متلب مورد بحث قرار گرفته است.
https://coffeematlab.com/2625/مقادیر-ویژه/
کافه متلب
مقادیر ویژه و بردار ویژه در متلب - کافه متلب
مسئله مقادیر ویژه مربوط به ماتریسها و عملگرها از اساسیترین به همین جهت پرکاربردترین مباحث و ابزار در بسیاری از زمینههای علوم و فنون قدیم و جدید میباشد.
🚘شناسایی پلاک خودرو در متلب🚘
موضوع تشخیص پلاک خودرو یکی از مهم ترین و کاربردی ترین مسائلی است که در حوزه پرازش تصویر مطرح است. در پست زیر شما خواهید دید که چگونه با داشتن یک عکس از خودرو می توان پلاک آن را استخراج نمود. در انتها کد کامل این پروژه نیز جهت دانلود قرار داده شده است.
https://coffeematlab.com/2146/%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D9%BE%D9%84%D8%A7%DA%A9-%D8%AE%D9%88%D8%AF%D8%B1%D9%88/
@MatlabTips
موضوع تشخیص پلاک خودرو یکی از مهم ترین و کاربردی ترین مسائلی است که در حوزه پرازش تصویر مطرح است. در پست زیر شما خواهید دید که چگونه با داشتن یک عکس از خودرو می توان پلاک آن را استخراج نمود. در انتها کد کامل این پروژه نیز جهت دانلود قرار داده شده است.
https://coffeematlab.com/2146/%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D9%BE%D9%84%D8%A7%DA%A9-%D8%AE%D9%88%D8%AF%D8%B1%D9%88/
@MatlabTips
کافه متلب
تشخیص پلاک خودرو در متلب - کافه متلب
یکی از قدیمی ترین و محبوب ترین مسائل مربوط در زمینه پردازش تصویر شناسایی پلاک خودرو می باشد. در این پست به بررسی دقیق این موضوع میپردازیم.
🔵حرکت دادن یک شی گرافیکی با ماوس یا دکمه های کیبورد🔵
تعامل با اشیا گرافیکی در متلب از این جهت که برنامه شما را کاملا حرفهای و کاربردی میکند، میتواند بسیار با اهمیت باشد. فرض کنید مجموعهای از اشیا گرافیکی (دوایر، مثلثها، اشکال چندضلعی دیگر و ...) در یک پنجره رسم کرده اید. فرض کنید میخواهید این اشیا را در پنجره جابه جا و مرتب کنید. در متلب ویژگیهایی چون ButtonDownFcn و ... وجود دارد که حرکت ماوس،کلیک ماوس، دکمه کیبورد و ... را میتواند تشخیص دهد. برای مثال میتوانیم این ویژگی ها را به گونه ای تنظیم کنیم که هر موقع بر روی شکل گرافیکی کلیک کردیم یک عملی انجام شود(برای مثال رنگ آن عوض شود) یا اگر کلیک کردیم و همزمان کرسر ماوس را نیز حرکت دادیم، شکل نیز حرکت کند. در پست زیر به همه این مسائل با ریزه کاری هایش پرداخته شده است. بعد از مطالعه آن به راحتی میتوانید اشکال سفارشی خود را در متلب به گونه ای بسازید که به راحتی بتوانید با آن تعامل کنید.
https://coffeematlab.com/2708/حرکت-ماوس/
تعامل با اشیا گرافیکی در متلب از این جهت که برنامه شما را کاملا حرفهای و کاربردی میکند، میتواند بسیار با اهمیت باشد. فرض کنید مجموعهای از اشیا گرافیکی (دوایر، مثلثها، اشکال چندضلعی دیگر و ...) در یک پنجره رسم کرده اید. فرض کنید میخواهید این اشیا را در پنجره جابه جا و مرتب کنید. در متلب ویژگیهایی چون ButtonDownFcn و ... وجود دارد که حرکت ماوس،کلیک ماوس، دکمه کیبورد و ... را میتواند تشخیص دهد. برای مثال میتوانیم این ویژگی ها را به گونه ای تنظیم کنیم که هر موقع بر روی شکل گرافیکی کلیک کردیم یک عملی انجام شود(برای مثال رنگ آن عوض شود) یا اگر کلیک کردیم و همزمان کرسر ماوس را نیز حرکت دادیم، شکل نیز حرکت کند. در پست زیر به همه این مسائل با ریزه کاری هایش پرداخته شده است. بعد از مطالعه آن به راحتی میتوانید اشکال سفارشی خود را در متلب به گونه ای بسازید که به راحتی بتوانید با آن تعامل کنید.
https://coffeematlab.com/2708/حرکت-ماوس/
کافه متلب
حرکت دادن آبجکت های گرافیکی با استفاده از حرکت ماوس - کافه متلب
در این پست نحوه حرکت دادن اشیا گرافیکی با استفاده از حرکت ماوس بررسی میکنیم. با نگه داشتن کلیک ماوس و حرکت ماوس اشیا نیز حرکت میکنند.
🔵تحلیل پیک 🔵
در پست زیر به این سوالات پاسخ داده میشود:
1⃣چگونه پیک ها را درون یک سیگنال پیدا کنیم.
2⃣چگونه اندازه پیک ها را پیدا کنیم.
3⃣چگونه پیک ها را درون یک سیگنال نویزی پیدا کنیم.
4⃣چگونه فاصله بین پیک ها را پیدا کنیم.
این پست بیشتر به سیگنال های ECG که در آنها پیک های تکرارشونده با نام QRS-Complex وجود دارد میپردازد. در این نوع سیگنال ها سه موج Q,R,S را در میان یک سیگنال نویزی ترند دار می یابیم و تحلیل میکنیم.
https://coffeematlab.com/2681/ecg/
در پست زیر به این سوالات پاسخ داده میشود:
1⃣چگونه پیک ها را درون یک سیگنال پیدا کنیم.
2⃣چگونه اندازه پیک ها را پیدا کنیم.
3⃣چگونه پیک ها را درون یک سیگنال نویزی پیدا کنیم.
4⃣چگونه فاصله بین پیک ها را پیدا کنیم.
این پست بیشتر به سیگنال های ECG که در آنها پیک های تکرارشونده با نام QRS-Complex وجود دارد میپردازد. در این نوع سیگنال ها سه موج Q,R,S را در میان یک سیگنال نویزی ترند دار می یابیم و تحلیل میکنیم.
https://coffeematlab.com/2681/ecg/
کافه متلب
تحلیل پیک در سیگنالهای ECG - کافه متلب
سیگنالهای ECG دارای پیکهای متعددی هستند که معنی و مفهوم خاصی دارند. در اینجا به تحلیل این پیک ها میپردازیم.
🔵توابع و workspace 🔵
هر تابع workspace مخصوص به خود را دارد که متغیرهای آن تابع در آن ذخیره میشوند. این متغیرها مجزای از متغیرهای موجود در workspace اصلی میباشند، اگرچه ممکن است متغیرها دارای نام یکسانی باشند. این به این معنی است که هنگام نوشتن یک تابع دلیلی برای نگرانی متغیرهایی که بیرون تابع وجود دارند نیست. تابع با الباقی کد فقط از طریق ورودیها و خروجیهایش تعامل دارد. نتیجه اینکه شما بعد از آنکه یک تابع نوشتید و آن را دیباگ کردید، میتوانید بارها و بارها از آن در برنامه های دیگر استفاده کنید بدون آنکه تغییری در تابع دهید. یک تابع کاربردی و مفید میتواند چون دوستی ارزشمند تا آخر عمر از آن بهره ببرید.
@MatlabTips
هر تابع workspace مخصوص به خود را دارد که متغیرهای آن تابع در آن ذخیره میشوند. این متغیرها مجزای از متغیرهای موجود در workspace اصلی میباشند، اگرچه ممکن است متغیرها دارای نام یکسانی باشند. این به این معنی است که هنگام نوشتن یک تابع دلیلی برای نگرانی متغیرهایی که بیرون تابع وجود دارند نیست. تابع با الباقی کد فقط از طریق ورودیها و خروجیهایش تعامل دارد. نتیجه اینکه شما بعد از آنکه یک تابع نوشتید و آن را دیباگ کردید، میتوانید بارها و بارها از آن در برنامه های دیگر استفاده کنید بدون آنکه تغییری در تابع دهید. یک تابع کاربردی و مفید میتواند چون دوستی ارزشمند تا آخر عمر از آن بهره ببرید.
@MatlabTips
خداوند شبانِ من است. محتاج هیچ چیز نخواهم بود. در مرتع هایِ سبز مرا میخواباند. نزدِ آبهایِ راحت مرا رهبری میکند!
عهد عتیق
عهد عتیق
در دایرهای که آمد و رفتن ماست
آن را نه بدایت نه نهایت پیداست
کس می نزند دمی در این معنی راست
کاین آمدن از کجا و رفتن بکجاست
(خیام)
https://goo.gl/kkJGrI
آن را نه بدایت نه نهایت پیداست
کس می نزند دمی در این معنی راست
کاین آمدن از کجا و رفتن بکجاست
(خیام)
https://goo.gl/kkJGrI
🔵مدیریت خطا با nargin و nargout🔵
بسیاری از موارد میخواهیم بدانیم که چه تعداد آرگومان ورودی و خروجی برای یک فراخوانی خاص استفاده شده است. توابع nargin و nargout که البته مخفف (number of input argument) و (number of output argument ) هستند، برای تعیین این موضوع استفاده میشوند.
💡توجه: از nargin,nargout تنها در بدنه تابع استفاده میشود.
برای مثال:
تابع بالا را ذخیره کنید. شخصی ممکن است این تابع را با دو ورودی، یک ورودی و یا هیچی فراخوانی کند. در این برنامه به راحتی با استفاده از nargin توانسته ایم که مدیریت خطا کنیم. مثلا اگر کاربر هیچ ورودی نداد ما خروجی را 0 میکنیم و در این صورت برنامه در اثر پیغام خطا متوقف نمیشود و میشود گفت که برنامه ما رباست(مقاوم) شده است.
همین موضوع برای nargout هم صادق است.
@MatlabTips
بسیاری از موارد میخواهیم بدانیم که چه تعداد آرگومان ورودی و خروجی برای یک فراخوانی خاص استفاده شده است. توابع nargin و nargout که البته مخفف (number of input argument) و (number of output argument ) هستند، برای تعیین این موضوع استفاده میشوند.
💡توجه: از nargin,nargout تنها در بدنه تابع استفاده میشود.
برای مثال:
function c = addme(a,b)
switch nargin
case 2
c = a + b;
case 1
c = a + a;
otherwise
c = 0;
end
تابع بالا را ذخیره کنید. شخصی ممکن است این تابع را با دو ورودی، یک ورودی و یا هیچی فراخوانی کند. در این برنامه به راحتی با استفاده از nargin توانسته ایم که مدیریت خطا کنیم. مثلا اگر کاربر هیچ ورودی نداد ما خروجی را 0 میکنیم و در این صورت برنامه در اثر پیغام خطا متوقف نمیشود و میشود گفت که برنامه ما رباست(مقاوم) شده است.
همین موضوع برای nargout هم صادق است.
@MatlabTips
برنامه بالا را بدون استفاده از nargin در متلب اجرا میکنیم.
اگر در پنجره فرمان من تابع addme را با یک ورودی فراخوانی کنم(به اشتباه یا هر دلیلی) خطای زیر را دریافت میکنم:
اما در صورتی که از nargin استفاده کنم و در هر لحظه مدیریت کنم که چه تعداد ورودی توسط کاربر وارد شده است میتوانم از توقف برنامه جلوگیری کنم.
برنامه متوجه شد که کاربر یک ورودی داده است پس وارد case دوم میشود و ورودی را با خودش جمع میزند.
@MatlabTips
function c = addme(a,b)
c = a + b;
end
اگر در پنجره فرمان من تابع addme را با یک ورودی فراخوانی کنم(به اشتباه یا هر دلیلی) خطای زیر را دریافت میکنم:
>> addme(1)
Not enough input arguments.
Error in addme (line 2)
c = a + b;
اما در صورتی که از nargin استفاده کنم و در هر لحظه مدیریت کنم که چه تعداد ورودی توسط کاربر وارد شده است میتوانم از توقف برنامه جلوگیری کنم.
>> addme(1)
ans =
2
برنامه متوجه شد که کاربر یک ورودی داده است پس وارد case دوم میشود و ورودی را با خودش جمع میزند.
@MatlabTips
🔵دستور polarplot در متلب 2016🔵
برای رسم نمودار در دستگاه قطبی از دستور polar استفاده میکردیم. این دستور که متناظر دستور plot در دستگاه کارتزین است، دارای امکانات ویرایشی کمی است. مثلا هنگام رسم یک نمودار قطبی گریدهایی را در صفحه مشاهده میکنید که نمیتوانید با دستور grid off آنها را پاک کنید. یا مانند دستور plot که محور x,y,z را محدود میکردیم، در polar چیزی جهت محدود کردن r,theta وجود ندارد.
اما متلب 2016 امکانات زیادی را برای این دستور فراهم کرده است که این بار در قالب دستور polarplot استفاده میشود.
برای رسم نمودار در دستگاه قطبی از دستور polar استفاده میکردیم. این دستور که متناظر دستور plot در دستگاه کارتزین است، دارای امکانات ویرایشی کمی است. مثلا هنگام رسم یک نمودار قطبی گریدهایی را در صفحه مشاهده میکنید که نمیتوانید با دستور grid off آنها را پاک کنید. یا مانند دستور plot که محور x,y,z را محدود میکردیم، در polar چیزی جهت محدود کردن r,theta وجود ندارد.
اما متلب 2016 امکانات زیادی را برای این دستور فراهم کرده است که این بار در قالب دستور polarplot استفاده میشود.
مثال: رسم یک نمودار قطبیبا خطوط قرمز رنگ و مارکرهای دایره ای.
theta = linspace(0,2*pi,25);
rho = 2*theta;
polarplot(theta,rho,'r-o')
برای نمودار بالا دستور grid on و grid off را امتحان کنید. در نسخه 2016 با این دستورات گریدها حذف و اضافه میشود.
مثال:
در این مثال محور theta را محدود میکنیم به بازه 0 تا پی.
در حقیقت در این ورژن متلب برای دستگاه قطبی محور تعریف شده است.
مثال:
در این مثال محور theta را محدود میکنیم به بازه 0 تا پی.
theta = linspace(0,pi);
rho = theta/10;
polarplot(theta,rho)
thetalim([0 180])
در حقیقت در این ورژن متلب برای دستگاه قطبی محور تعریف شده است.
Forwarded from شبکه توسعه
🔳⭕️پدیده داروینیسم معکوس
پروژه ای تعریف کرده اید و دو نفر پیمانکار را دعوت کرده اید که آن کار را انجام بدهند. اولی با اطمینان می گوید که حتما آن را انجام می دهد و دومی از شما وقت می خواهد فردا به شما زنگ می زند و می گوید که این کار شدنی است البته چالش هایی دارد که باید حتما آن را با شما در میان بگذارد.
دو نفر کاندیدای مدیر عاملی شده اند. شما آن ها را به هیات مدیره دعوت می کنید و بر اساس اطلاعاتی که هفته پیش به آنان داده اید از انان می خواهید که برنامه و پیش بینی خود را از آینده شرکت مطرح کنند. اولی برنامه خود را با اطمینان کامل ارایه می کند و موفقیت شرکت از پیش تضمین شده می داند و دومی برنامه کامل خود را مطرح می کند و البته موفقیت را مشروط به وجود پیش نیازهایی می کند که برخی محیطی هستند و برخی نیز در اختیار هیات مدیره.
شما کدام یک از پیمانکاران و کدام از یک کاندیداها را انتخاب می کنید. بدیهی است ما چون از بی اطمینانی خوشمان نمی آید. اولین گزینه که به ما اطمینان می دهد را انتخاب می کنیم و این جاست که در دام پدیده داروینیسم معکوس می افتیم.
پروفسوری در آکسفورد این پدیده را داروینیسم معکوس نامگذاری کرده. چرا؟ چون در داروینیسیم معمولی قوی تر ها می مانند و ضعیف ترها حذف می شوند ولی در داروینیسم معکوس هرکس که بیشتر حرف مفت بزند پروژه به او داده می شود! در این پدیده کسانی که اطمینان کاذب بیشتری تولید می کنند و ادعاهای گزاف تری مطرح می کنند پیروزترند و آن ها که صادقانه بی اطمینانی ها، چالش ها و مشکلات را می گویند حذف می شوند.
🖋⭕️تجویز راهبردی:
چه می توان کرد؟ آیا این خطای ذهنی راه درمانی هم دارد؟ بله!
الف) هر آنکس که به شما اطمینان صد درصد می دهد مشکوک باشید. چرا که آنان که در یک رشته خبره هستند زوایا، موانع، عدم قطعیت ها و پیش نیازهایی را می بینند که یک تازه کار خوش خیال نمی بیند.
ب) به جای اعتماد به سخنان افراد به عملکرد گذشته آنان نگاه کنید. صدای اعمال بسیار رساتر از صدای گفتار است.
مجتبی لشکربلوکی، معلم دانشگاه
@Dr_Lashkarbolouki
پروژه ای تعریف کرده اید و دو نفر پیمانکار را دعوت کرده اید که آن کار را انجام بدهند. اولی با اطمینان می گوید که حتما آن را انجام می دهد و دومی از شما وقت می خواهد فردا به شما زنگ می زند و می گوید که این کار شدنی است البته چالش هایی دارد که باید حتما آن را با شما در میان بگذارد.
دو نفر کاندیدای مدیر عاملی شده اند. شما آن ها را به هیات مدیره دعوت می کنید و بر اساس اطلاعاتی که هفته پیش به آنان داده اید از انان می خواهید که برنامه و پیش بینی خود را از آینده شرکت مطرح کنند. اولی برنامه خود را با اطمینان کامل ارایه می کند و موفقیت شرکت از پیش تضمین شده می داند و دومی برنامه کامل خود را مطرح می کند و البته موفقیت را مشروط به وجود پیش نیازهایی می کند که برخی محیطی هستند و برخی نیز در اختیار هیات مدیره.
شما کدام یک از پیمانکاران و کدام از یک کاندیداها را انتخاب می کنید. بدیهی است ما چون از بی اطمینانی خوشمان نمی آید. اولین گزینه که به ما اطمینان می دهد را انتخاب می کنیم و این جاست که در دام پدیده داروینیسم معکوس می افتیم.
پروفسوری در آکسفورد این پدیده را داروینیسم معکوس نامگذاری کرده. چرا؟ چون در داروینیسیم معمولی قوی تر ها می مانند و ضعیف ترها حذف می شوند ولی در داروینیسم معکوس هرکس که بیشتر حرف مفت بزند پروژه به او داده می شود! در این پدیده کسانی که اطمینان کاذب بیشتری تولید می کنند و ادعاهای گزاف تری مطرح می کنند پیروزترند و آن ها که صادقانه بی اطمینانی ها، چالش ها و مشکلات را می گویند حذف می شوند.
🖋⭕️تجویز راهبردی:
چه می توان کرد؟ آیا این خطای ذهنی راه درمانی هم دارد؟ بله!
الف) هر آنکس که به شما اطمینان صد درصد می دهد مشکوک باشید. چرا که آنان که در یک رشته خبره هستند زوایا، موانع، عدم قطعیت ها و پیش نیازهایی را می بینند که یک تازه کار خوش خیال نمی بیند.
ب) به جای اعتماد به سخنان افراد به عملکرد گذشته آنان نگاه کنید. صدای اعمال بسیار رساتر از صدای گفتار است.
مجتبی لشکربلوکی، معلم دانشگاه
@Dr_Lashkarbolouki
Forwarded from MATLAB
رسم چندین نمودار در یک گراف
هر بار که از دستور plot استفاده میکنیم، ناحیه گرافیکی پاک شده و نمودار جدید رسم میشود. چندین راه وجود دارد که بتوانید چند نمودار را روی هم بیندازید. یک روش استفاده از دستور plot است زمانی که چندین مجموعه را به عنوان ورودی میگیرد. روش دیگر استفاده از hold است.
روش اول:
دستور plot میتواند بیشتر از یک مجموع داده x,y را رسم کند. برای مثال میتوانیم یک موج سینوسی و یک موج کسینوسی را با هم دیگر به عنوان آرگومان plot داده و رسم کنیم.
برای اینکه روشن شود کدام نمودار مربوط به کدام معادله است از legend استفاده میکنند. خیلی اوقات در مقالات یا پایان نامه ها نیاز دارید چند نمودار را جهت مقایسه روی هم بیندازید و باید حتما legend بگذارید.
هر بار که از دستور plot استفاده میکنیم، ناحیه گرافیکی پاک شده و نمودار جدید رسم میشود. چندین راه وجود دارد که بتوانید چند نمودار را روی هم بیندازید. یک روش استفاده از دستور plot است زمانی که چندین مجموعه را به عنوان ورودی میگیرد. روش دیگر استفاده از hold است.
روش اول:
دستور plot میتواند بیشتر از یک مجموع داده x,y را رسم کند. برای مثال میتوانیم یک موج سینوسی و یک موج کسینوسی را با هم دیگر به عنوان آرگومان plot داده و رسم کنیم.
%% set parameters
Nx=300;
xmax=3*pi;
%% calculate functions
x=linspace(0, xmax, Nx);
y1=sin(x);
y2=cos(x);
%% plot results
plot(x, y1, x, y2); % plots y1 vs x and y2 vs x
grid on
xlabel('x')
ylabel('sin(x), cos(x)')
برای اینکه روشن شود کدام نمودار مربوط به کدام معادله است از legend استفاده میکنند. خیلی اوقات در مقالات یا پایان نامه ها نیاز دارید چند نمودار را جهت مقایسه روی هم بیندازید و باید حتما legend بگذارید.
legend('sin(x)', 'cos(x)');
Forwarded from MATLAB
شما میتوانید به هر اندازه که بخواهید نمودار به plot پاس دهید. به عنوان نمونه میخواهیم خطی عمودی را رسم کنیم که از قعر کسینوس یعنی pi میگذرد(میخواهیم به گونه ای اختلاف فاز بین دو موج را مشاهده کنیم). به کد زیر دقت کنید که چگونه خط عمودی به دو موج دیگر به دستور plot اضافه شده است.
نکته 1:
فرض کنید یک خط کد خیلی طولانی شود، میتوانیم بخشی از کد را در یک سطر نوشته، در ادامه آن ... وارد کنیم و با فشردن اینتر به سطر بعد برویم که ظاهر کد نویسیمان خوشگل بماند.
نکته 2: برای رسم یک خط عمودی من از دو نقطه استفاده کردم(قبلا گفتم که نقاط بهم متصل میشود و بنابراین با دو نقطه یک خط راست تشکیل میشود)
نکته 3: با دستور axis محورهای مختصات را محدود کردم. سعی کنید برنامه را بدون این خط اجرا کنید و تفاوت را ببینید.
نکته 4: اگر جایی متوجه نشدید بپرسید.
%% set parameters
Nx=100;
xmax=3*pi;
%% calculate functions
x=linspace(0, xmax, Nx);
y1=sin(x);
y2=cos(x);
%% plot results
plot(x, y1,...
x, y2, '--',...
[pi, pi],[-10, 10],'r');
axis([0, xmax, -1, 1]);
xlabel('x')
ylabel('sin(x), cos(x)')
legend('sin(x)', 'cos(x)');
نکته 1:
فرض کنید یک خط کد خیلی طولانی شود، میتوانیم بخشی از کد را در یک سطر نوشته، در ادامه آن ... وارد کنیم و با فشردن اینتر به سطر بعد برویم که ظاهر کد نویسیمان خوشگل بماند.
نکته 2: برای رسم یک خط عمودی من از دو نقطه استفاده کردم(قبلا گفتم که نقاط بهم متصل میشود و بنابراین با دو نقطه یک خط راست تشکیل میشود)
نکته 3: با دستور axis محورهای مختصات را محدود کردم. سعی کنید برنامه را بدون این خط اجرا کنید و تفاوت را ببینید.
نکته 4: اگر جایی متوجه نشدید بپرسید.
Forwarded from MATLAB
اما استفاده از hold چه برتری دارد؟
یک برتری عمده hold این است که شما میتوانید نمودارهای مختلف (نمودارهایی که الزاما با دستور plot رسم نمیشوند) را با هم رسم کنید. در مثال زیر یک سری داده تصادفی تولید میکنیم با استفاده از تابع randn. این تابع اعداد تصادفی با توزیع نرمال را تولید میکند. میخواهیم نمودار هیستوگرام این داده ها را رسم کنیم و سپس منحنی توزیع نرمال را نیز با توجه به فرمولی که دارد به آن اضافه کنیم.
نکته اول: علامت % یک خط را کامنت مکیکند. یعنی متلب آن را اجرا نمیکند و شما برای خوانایی بیشتر کد از آن استفاده میکنید.
نکته دوم: %% برای سکشن بندی است و یکی از کاربردهای آن برای زیبایی کد است.
نکته سوم: خط نهم qdata داده هایی تصادفی با میانگین q0 و واریانس sigmaq هستند. با این حساب شما میتوانید داده هایی با توزیع نرمال با میانگین و واریانس دلخواه ایجاد کنید.
تابع hist داده های هیستوگرام را میسازد.
تابع bar برای رسم نمودار میله ای از آن استفاده میشود. از خروجی تابع hist به عنوان ورودی های تابع bar استفاده شده است.
نهایتا از دستور hold برای اضافه کردن منحنی توزیع نرمال به نمودار میله ای استفاده شده است.
یک برتری عمده hold این است که شما میتوانید نمودارهای مختلف (نمودارهایی که الزاما با دستور plot رسم نمیشوند) را با هم رسم کنید. در مثال زیر یک سری داده تصادفی تولید میکنیم با استفاده از تابع randn. این تابع اعداد تصادفی با توزیع نرمال را تولید میکند. میخواهیم نمودار هیستوگرام این داده ها را رسم کنیم و سپس منحنی توزیع نرمال را نیز با توجه به فرمولی که دارد به آن اضافه کنیم.
%% set parameters for data
Ndata=10000;
q0=1.5; % mean of q data
sigmaq=0.25; % standard deviation of q data
qmin=0.0; % min and max for plotting
qmax=2.5;
nbins=25; % number of bins for histogram
%% generate simulation data
qdata=q0+sigmaq*randn(1,Ndata);
%% plot histogram of data
[nq, qs]=hist(qdata, nbins); % returns histogram
% data without plotting
bar(qs, nq); % makes histogram plot
xlabel('Value of q')
ylabel('Number of data points in bin')
axis([qmin, qmax, 0, inf]);
%% overlay plot of normal distribution function
Nq=200;
qa=linspace(qmin, qmax, Nq);
Pq=max(nq)*exp( -(qa-q0).^2/(2*sigmaq^2));
hold on
plot(qa, Pq, 'k', 'LineWidth', 2)
hold off
نکته اول: علامت % یک خط را کامنت مکیکند. یعنی متلب آن را اجرا نمیکند و شما برای خوانایی بیشتر کد از آن استفاده میکنید.
نکته دوم: %% برای سکشن بندی است و یکی از کاربردهای آن برای زیبایی کد است.
نکته سوم: خط نهم qdata داده هایی تصادفی با میانگین q0 و واریانس sigmaq هستند. با این حساب شما میتوانید داده هایی با توزیع نرمال با میانگین و واریانس دلخواه ایجاد کنید.
تابع hist داده های هیستوگرام را میسازد.
تابع bar برای رسم نمودار میله ای از آن استفاده میشود. از خروجی تابع hist به عنوان ورودی های تابع bar استفاده شده است.
نهایتا از دستور hold برای اضافه کردن منحنی توزیع نرمال به نمودار میله ای استفاده شده است.