انواع دادههای عددی در متلب
به نام خدا و سلام.
به جلسه دوازدهم از سری جلسات آموزش متلب خوش آمدید. آموزش کامل متلب از وبسایت متلبپلاس ارائه میشود. در این جلسه به بررسی انواع دادههای عددی در نرم افزار متلب میپردازیم. در واقع به بررسی انواع مختلفی که اعداد حقیقی، صحیح و مختلط میتوانند در متلب ذخیره شوند میپردازیم.
با متلب پلاس همراه باشید.
مقدمهای بر انوع دادههای عددی در متلب
در این فیلم آموزش متلب با انواع دادههای عددی در متلب آشنا میشویم. قبل از آن لازم است یک یادآوری کوچک از ریاضیات داشته باشیم. در ریاضیات، به طور کلی دو دسته اعداد وجود دارند. اعداد حقیقی و اعداد مختلط. اعداد حقیقی خود به چند بخش تقسیم میشوند که برای ما در متلب، اعداد صحیح و اعشاری اهمیت دارد. در این جلسه به انواع مختلفی که یک عدد حقیقی (صحیح یا اعشاری) میتواند داشته باشد میپردازیم.
لطفا نرم افزار متلب را باز کنید و تمام مثالهایی که در ادامه میآیند را شما هم بنویسید!
اعداد حقیقی در متلب
متلب برای درنظر گرفتن اعداد حقیقی چند دسته بندی ارائه میکند. اعداد اعشاری با دو نوع دقت و اعداد صحیح با علامت (مثبت-منفی) و بدون علامت (فقط مثبت). بطور پیشفرض وقتی عددی در متلب وارد میکنید، این عدد بصورت double (نام اختصاصی متلب برای اعداد اعشاری با دقت 15 رقم پس از اعشار) ذخیره میشود. اما متلب کلاسهای دیگری برای اعداد حقیقی درنظر گرفته که میتواند جالب باشد. استفاده از این کلاسهای مختلف بسته به محدوده کاری شما دارد. ابتدا با کلاسهای اعداد صحیح شروع میکنیم.
اعداد صحیح در متلب
نرم افزار متلب 8 کلاس مختلف برای اعداد صحیح (Integer) ارائه کرده است. 4 کلاس، اعداد بدون علامت (فقط مثبت) و 4 کلاس اعداد با علامت (مثبت و منفی). این 4 کلاس عددی شامل 8 بیتی، 16 بیتی، 32 بیتی و 64 بیتی میباشند. دستور کلاسهای عددی بدون علامت در متلب با uint8, uint16, uint32, uint64 است. همچنین دستور کلاسهای عددی با علامت در متلب با int8, int16, int32, int64 است.
برای درک بهتر، یک کلاس 8 بیتی بدون علامت را درنظر میگیریم. این کلاس عددی دارای 8 خانه است که در هر خانه عدد صفر یا یک قرار میگیرد. بنابراین به اندازه 2 به توان 8 (یا 256) حالت داریم. با درنظر گرفتن عدد صفر، این کلاس اعداد صحیح 0 تا 255 را پوشش میدهد.
به عبارت دیگر، کلاس 8 بیتی بدون علامت فقط اعداد 0 تا 255 را شامل میشود. در این کلاس اعدادی مثل 256، منفی یک، 300 و… تعریف نشدهاند. مزیت این کلاس عددی، حجم بسیار کم برای ذخیره اطلاعات در آن است. در ادامه که سایر کلاسها معرفی شدند یک مقایسه جامع انجام میدهیم.
کلاس 16 بیتی، 32 بیتی و 64 بیتی بدون علامت نیز مشابه با تعریف فوق میباشند. در شکل زیر دامنه اعداد این کلاسها آمده است.
برای ایجاد یک عدد بدون علامت در هر یک از کلاسهای عددی فوق، از دستورات uint8, uint16, uint32, uint64 استفاده میکنیم. کافیست عدد موردنظر خود را درون پرانتز در کنار این دستورات بنویسیم. اگر عدد ما در محدوده اعداد این کلاس نباشد، آخرین عدد محدوده را نشان میدهد. مثلا:
uint8(15)
ans =
15
uint8(300)
ans =
255
بزرگترین عدد در کلاس 8 بیتی بدون علامت برابر با 255 است. در کلاسهای 16، 32 و 64 بیتی نیز به ترتیب 65535، 4294967295 و 18446744073709551615 است.
مشابه با کلاسهای بدون علامت، 4 کلاس عددی با علامت هم در متلب داریم. تفاوت این کلاسهای عددی در این است که همواره بیت اول (اولین خانه) برای علامت درنظر گرفته میشود. بنابراین برای اعداد، 2 به توان 7 حالت داریم. این اعداد از منفی 2 به توان 7 تا مثبت 2 به توان 7 منهای یک میباشد. یعنی از 128 منفی تا 127 مثبت. در شکل زیر جزئیات بیشتر درباره کلاس 8 بیتی با علامت آمدهاست.
در کلاس اعداد 8 بیتی با علامت، محدوده منفی 128 تا مثبت 127 تعریف شدهاست. به همین ترتیب برای کلاس 16 بیتی، 32 بیتی و 64 بیتی با علامت داریم:
برای ایجاد یک عدد با علامت در هر یک از کلاسهای عددی فوق، از دستورات int8, int16, int32, int64 استفاده میکنیم. کافیست عدد موردنظر خود را درون پرانتز در کنار این دستورات بنویسیم. اگر عدد ما در محدوده اعداد این کلاس نباشد، آخرین عدد محدوده را نشان میدهد. مثلا:
int8(-100)
ans =
-100
int8(-270)
ans =
-128
بزرگترین و کوچکترین عدد در کلاس 8 بیتی با علامت به ترتیب برابر با 127 و 128- است. این مقادیر در کلاس 16 بیتی به ترتیب 32767 و 32768- است. در کلاس 32 بیتی به ترتیب 2147483647 و 2147483648- است. در کلاس 64 بیتی نیز به ترتیب 9223372036854775807 و 9223372036854775808- است.
اعداد اعشاری در متلب
نرم افزار متلب 2 کلاس برای اعداد اعشاری ارائه میکند. کلاس double و single. کلاس double کاملترین کلاس عددی در نرم افزار متلب است. این کلاس عددی، علامت، اعشار و… را با دقت بسیار بالا درنظر میگیرد. هر عددی که در متلب ایجاد کنید، به طور پیشفرض در کلاس double ذخیره میشود. این کلاس 8 بایت (64 بیت) فضا برای اعداد حقیقی اشغال میکند. در کنار آن، متلب کلاس عددی single را هم ارائه کرده است. single کاملا مشابه با double است اما دقت آن نصف double میباشد. این کلاس عددی 4 بایت (32 بیت) فضا برای اعداد حقیقی اشغال میکند. بزرگترین و کوچکترین عدد در کلاسهای double و single برابر با مثبت و منفی بینهایت میباشد. عدد Inf (بینهایت) و تعریف نشده (NaN) هم در کلاس double میباشند.
برای ایجاد یک عدد در کلاس single از دستور single(a) استفاده میکنیم.
تفاوت کلاسهای عددی در متلب
به مهمترین بخش از این جلسه رسیدیم. تا کنون با انواع دادههای عددی آشنا شدیم. اما شاید برای شما سوال شده باشد که تفاوت این کلاسها بجز محدودهای که تعریف شدهاند، در چیست؟ پاسخ ساده است. تفاوت در فضایی است که در کامپیوتر ما اشغال میکنند. گرچه محدوده این اطلاعات بسیار کم است، اما در پروژههای خاص یا کاربردهای خاص این اخلاف حجم بسیار مهم است. برای درک بهتر یک مثال میزنیم. عدد 10 را در همه این کلاسها تعریف میکنیم. سپس حجمی که هر عدد 10 اشغال کرده را مشاهده میکنیم. برای ایجاد عدد 10 در هر کلاس مختلف از نام آن استفاده میکنیم بجز کلاس double. چرا که پیشفرض متلب double است.
a = uint8(10);
b = uint16(10);
c = uint32(10);
d = uint64(10);
e = int8(10);
f = int16(10);
g = int32(10);
h = int64(10);
k = single(10);
l = 10;
whos
Name Size Bytes Class Attributes
a 1x1 1 uint8
b 1x1 2 uint16
c 1x1 4 uint32
d 1x1 8 uint64
e 1x1 1 int8
f 1x1 2 int16
g 1x1 4 int32
h 1x1 8 int64
k 1x1 4 single
l 1x1 8 double
اختلاف حجم را در کلاسهای فوق مشاهده میکنید. مثلا حجم فضای اشغالی برای عدد 10 در کلاس double 8 برابر کلاس int8 است. 8 برابر اختلاف حجم میتواند در سرعت پردازش و محاسبات نیز دیده شود! این اهمیت کلاسهای عددی در متلب را نشان میدهد.
در مثال فوق از دستور whos در متلب استفاده کردیم. این دستور برای مشاهده جزئیات متغیرهای درون فضای کاری استفاده میشود. اگر این دستور به تنهایی (مشابه با مثال فوق) بکار رود، جزئیات تمام متغیرها را خروجی میدهد. اما اگر فقط یک یا چند متغیر (مانند a و b) موردنظر باشد کافیست whos a b را تایپ کنیم.
تشخیص کلاس عددی در متلب
برای تشخیص کلاس عددی متغیرها در متلب از دستور whos و class(a) استفاده میشود. دستور whos اطلاعات بیشتری در اختیار ما قرار میدهد اما دستور class فقط کلاس عددی را ارائه میکند.
a = uint8(5);
b = 5;
class(a)
ans =
uint8
class(b)
ans =
double
کلاس عددی اعداد مختلط در متلب
در جلسه بعد، آموزش اعداد مختلط در متلب بطور کامل ارائه میشوند. در اینجا تنها به توضیح کلاس عددی اعداد مختلط اشاره میکنیم. هر آنچه برای اعداد حقیقی در بالا ارائه شد، درمورد اعداد مختلط نیز صدق میکند. محدوده اعداد برای بخش حقیقی و موهومی در هر کلاس وجود دارد. مثلا برای کلاس 8 بیتی با علامت که بزرگترین عدد آن 127 است، بزرگترین عدد حقیقی 127 + 127i است. تفاوتی که برای اعداد مختلط و صحیح وجود دارد این است که فضای اشغال شده برای اعداد مختلط دو برابر اعداد صحیح است. برای ایجاد عدد مختلط در هر کلاس عددی، مشابه با ایجاد عدد صحیح در کلاس عددی عمل میکنیم.
a = int8(5 + 2i);
b =int8(5);
whos
Name Size Bytes Class Attributes
a 1x1 2 int8 complex
b 1x1 1 int8
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) عدد پی (pi) را با کلاس single تعریف کرده و نام آن را a بنامید. متغیر b را نیز برابر با عدد پی بصورت عادی ایجاد کنید (بطور پیشفرض با کلاس double ایجاد میشود). حاصل a-b را بیابید. چه نتیجهای میگیرید؟
تمرین دوم) عدد 150 را در کلاس int8 ایجاد کنید. اگر امکان ایجاد آن نیست، یک کلاس دیگر پیشنهاد کنید.
تمرین سوم) آیا میتوان عدد بینهایت را در کلاس int64 ایجاد کرد؟ اگر بله، ایجاد کنید.
جمعبندی
خب، جلسه دوازدهم از سری جلسات آموزش متلب به پایان رسید. این جلسه درباره انواع دادههای عددی و کلاسهای عددی در متلب صحبت کردیم. استفاده صحیح از کلاسهای عددی در متلب میتواند به سرعت اجرای برنامهها کمک کند. همچنین میتواند در کاهش حجم برنامهها نقش مهمی ایفا کند. سعی ما انتقال مفاهیم به زبانی ساده و ارائه مثالهای متنوع بود. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
4 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
عالی عالی عالی
خیلی ممنون علی جان.
کلاس عددی یک ماتریس تشکیل شده از ترکیب اعدادی در کلاس های مختلف را چگونه می توان تعریف کرد؟
به عبارت دیگر آیا کلاس عددی یک ماتریس به صورت درایه به درایه تعیین می شود؟
با سلام و عرض ادب
اگر انواع اعداد صحیح مختلف را در یک ماتریس ترکیب کنید (مثلاً اعداد صحیح با و بدونعلامت، یا اعداد صحیح 8 بیتی با اعداد صحیح 16 بیتی)، متلب ماتریسی را برمیگرداند که در آن همه عناصر از یک نوع مشترک هستند. متلب همه درایههای ماتریس خروجی را بر روی نوع داده سمت چپ ترین عنصر در ماتریس ورودی تنظیم می کند. به عنوان مثال، نتیجه الحاق زیر، یک بردار سه عضوی با علامت 16 بیتی (int16) است:
A = [int16(450) uint8(250) int32(1000)]