ذخیره اعداد در متلب
نویسنده : محمد پارسایی | زمان انتشار : 14 اسفند 1400 ساعت 22:59
جهت انجام پروژه های دانشجویی و یا تمرینهای برنامه نویسی رشته کامپیوتر میتوانید به آی دی تلگرام زیر پیام دهید
@AlirezaSepand
در متلب نیز مانند سایر زبانهای برنامهنویسی، انواع مختلفی از دادهها وجود دارد. در این مطلب قصد داریم به بررسی انواع داده در متلب بپردازیم و دستورات تبدیل داده از یک نوع به نوع دیگر را معرفی کنیم.
در زبان متلب احتیاجی به اعلام نوع (Type Declaration) و یا تعیین ابعاد (Dimension Statements) نیست و هرگاه که نرمافزار با یک نام متغیر جدید روبهرو شود، متغیر جدید را میسازد و فضای حافظه مناسب را به آن اختصاص میدهد. اگر متغیر در حال حاضر وجود داشته باشد، آنگاه متلب محتوای جدید را در محتوای قبلی جایگزین میکند و در صورت نیاز، یک فضای حافظه جدید به آن اختصاص میدهد. به عنوان مثال، دستور زیر را در متلب در نظر بگیرید.
این دستور، یک ماتریس با ابعاد $$ 1 \times 1 $$ را در متلب ایجاد میکند که نام آن Total است و مقدار ۴۲ را در خود ذخیره میکند.
انواع داده در متلب
در متلب، ۱۵ نوع داده اساسی وجود دارد. البته دو نوع داده دیگر هم وجود دارند که کلاسهای تعریف شده توسط کاربر و کلاسهای جاوا (JAVA) هستند. همه انواع داده در متلب اطلاعاتی را در خود ذخیره میکنند که در قالب ماتریس و یا آرایه هستند. اندازه این ماتریسها یا آرایهها، از مقدار کمینه $$ 0 \times 0 $$ شروع میشود و میتوانند به یک آرایه n بعدی با هر اندازه افزایش یابد. متداولترین انواع داده در متلب در نمودار شکل زیر نشان داده شده است.
انواع داده در متلب
همان طور که از شکل فوق مشخص است، دادههای عددی خود به دو نوع صحیح و اعشاری تقسیم میشوند. اعداد صحیح دارای دو نوع علامتدار (Signed Integer) و بدون علامت (Unsigned Integer) و با طولهای مختلف از ۸ بیت تا ۶۴ بیت و اعداد نوع اعشاری مجددا شامل دو نوع Single و Double است. در جدول زیر به توصیف هر کدام از انواع این دادهها میپردازیم.
توصیف عملکرد | مثال | تعریف | نوع داده |
این نوع دادهها برای ذخیره آرایههای صحیح با علامت و بدون علامت مورد استفاده قرار میگیرد و در مقایسه با دادههای اعشاری نوع Single و Double فضای حافظه کمتری را اشغال میکند. تمام دادههای نوع صحیح به جز int64 و uint64 میتوانند در عملیات ریاضی مورد استفاده قرار گیرند. | uint16(65000) | اعداد صحیح علامتدار ۸ بیتی | int8 |
اعداد صحیح بدون علامت ۸ بیتی | uint8 | ||
اعداد صحیح علامتدار ۱۶ بیتی | int16 | ||
اعداد صحیح بدون علامت ۱۶ بیتی | uint16 | ||
اعداد صحیح علامتدار ۳۲ بیتی | int32 | ||
اعداد صحیح بدون علامت ۳۲ بیتی | uint32 | ||
اعداد صحیح علامتدار ۶۴ بیتی | int64 | ||
اعداد صحیح بدون علامت ۶۴ بیتی | uint64 | ||
این نوع از دادههای اعشاری، به فضای حافظه کمتری نسبت به نوع Double نیاز دارند و در عوض بازه اعداد کوچکتری را هم پوشش میدهند. | 3 * 10 38 | آرایه اعداد با دقت Single | single |
آرایههای دو بعدی از این نوع نادر هستند. این نوع داده، نوع عددی پیش فرض در متلب است. | ۳ * ۱۰ ۳۰۰ ۵ + ۶i | آرایه اعداد با دقت مضاعف | double |
این آرایه برای نشان دادن True و False منطقی مورد استفاده قرار میگیرد. آرایههای دوبعدی از این نوع هم نادر هستند. | magic(4) > 10 | آرایه مقادیر صفر و یک منطقی | logical |
مقادیر String به صورت برداری از کاراکترها نمایش داده میشوند. برای آرایههای شامل بیشتر از یک String، بهتر است از آرایههای سلولی استفاده شود. | ‘Hello’ | آرایهای از کاراکترها | char |
این نوع داده، آرایهای از سلولهای اندیسدار است که هر سلول قادر است یک آرایه با ابعاد و نوع متفاوت داده را ذخیره کنند. | a{1,1} = 12; a{1,2} = ‘Red’; a{1,3} = magic(4); | آرایهای از سلولهای اندیسدار | cell array |
هر ساختار در این آرایه، دارای فیلدهای نامگذاری شده است که میتواند آرایه با ابعاد و نوع مختلف داده را ذخیره کند. | a.day = 12; a.color = ‘Red’; a.mat = magic(3); | آرایهای از ساختارهای مشابه با c | structure |
میتوان یک function handle را به توابع دیگر پاس داد. | $$ \text {@ sin} $$ | اشارهگر به یک تابع | function handle |
– | polynom ([0 -2 -5]) | ساخت اشیا از کلاسهای تعریفشده توسط کاربر | user class |
– | java.awt.Frame | ساخت اشیا از کلاسهای جاوا | Java class |
دادههای عددی
همان طور که گفتیم، دادههای عددی در متلب شامل اعداد صحیح علامتدار و بدون علامت و اعداد اعشاری با دقت Single و Double هستند. در حالت کلی، میتوان گفت که آرایههای صحیح و اعشاری Single امکان ذخیرهسازی بهینهتری را نسبت به آرایههای اعشاری Double ایجاد میکنند. تمام انواع دادههای عددی، از توابع اساسی آرایهای مانند تغییر شکل (Reshaping) و اندیسدهی پشتیبانی میکنند. تمام دادههای نوع عددی به جز int64 و uint64 میتوانند در عملیات ریاضی و عددی مورد استفاده قرار گیرند.
اعداد صحیح
در متلب چهار نوع داده صحیح علامتدار و چهار نوع داده صحیح بدون علامت وجود دارد. نوع علامتدار از دادههای صحیح علاوه بر اعداد مثبت، امکان کار با اعداد صحیح منفی را نیز فراهم میکنند، اما نمیتوانند بازه گستردهای را مانند اعداد صحیح بدون علامت پوشش دهند. زیرا یک بیت همواره به نشان داده علامت مثبت یا منفی در عدد صحیح تخصیص مییابد. داده صحیح نوع بدون علامت، بازه بزرگتری را پوشش میدهد، اما این نوع داده میتواند فقط مثبت یا منفی باشد.
در نرمافزار متلب، امکان ذخیرهسازی دادههای عددی با ۱، ۲، ۴ و ۸ بایت (۸ بیت) وجود دارد. اگر در هنگام برنامهنویسی از کوچکترین نوع داده صحیح استفاده کنیم که قادر به ذخیره داده ما باشد، آنگاه در حافظه و نیز زمان اجرا صرفهجویی خواهیم کرد. به عنوان مثال، برای ذخیرهسازی مقدار ۱۰۰ نیازی به عدد صحیح ۳۲ بیتی نداریم. در جدول زیر، هشت نوع داده عددی به همراه بازه اعداد هر نوع، نشان داده شده است.
بازه مقادیر | نوع داده |
$$ -2 ^ 7 $$ تا $$ 2 ^ 7 -1 $$ | عدد صحیح ۸ بیت علامتدار |
$$ -2 ^ { 15 } $$ تا $$ 2 ^ { 15 } -1 $$ | عدد صحیح ۱۶ بیت علامتدار |
$$ -2 ^ { 31 } $$ تا $$ 2 ^ { 31 } -1 $$ | عدد صحیح ۳۲ بیت علامتدار |
$$ -2 ^ { 63 } $$ تا $$ 2 ^ { 63 } -1 $$ | عدد صحیح ۶۴ بیت علامتدار |
$$ 0 $$ تا $$ 2 ^ 8 -1 $$ | عدد صحیح ۸ بیت بدون علامت |
$$ 0 $$ تا $$ 2 ^ {16} -1 $$ | عدد صحیح ۱۶ بیت بدون علامت |
$$ 0 $$ تا $$ 2 ^ {32} -1 $$ | عدد صحیح ۳۲ بیت بدون علامت |
$$ 0 $$ تا $$ 2 ^ {64} -1 $$ | عدد صحیح ۶۴ بیت بدون علامت |
ایجاد اعداد صحیح در متلب
نرمافزار متلب دادههای عددی را به صورت پیش فرض از نوع اعشاری با دقت مضاعف ذخیرهسازی میکند. برای ذخیره کردن دادهها به عنوان یک داده صحیح، باید از یکی از دستورات نشان داده شده در زیر استفاده کرد.
برای نشان دادن ابعاد، شمارش بایتها و نیز نوع داده یک آرایه که توسط یک متغیر نشان داده شده باشد، میتوان در متلب از تابع whos استفاده کرد.
نتیجه به صورت زیر نمایش داده میشود.
Name Size Bytes Class x 1x1 2 int16 array |
همچنین برای تعیین کردن نوع خروجی میتوانیم از تابع class مانند قطعه کد زیر استفاده کنیم.
در نتیجه داریم:
برای اینکه مشخص کنید آیا یک متغیر صحیح است یا خیر، میتوان از تابع isinteger استفاده کرد.
خروجی این دستور به صورت زیر است.
توابع مربوط به دادههای نوع صحیح
در مورد اعداد صحیح، توابع زیر وجود دارند:
- int8 و int16 و int32 و int64: این توابع برای تبدیل به اعداد صحیح علامتدار ۱، ۲، ۴ یا ۸ بایتی مورد استفاده قرار میگیرند.
- uint8 و uint16 و uint32 و uint64: این توابع برای تبدیل به اعداد صحیح بدون علامت ۱، ۲، ۴ یا ۸ بایتی مورد استفاده قرار میگیرند.
- class: این تابع نوع داده مربوط به یک شی را باز میگرداند.
- isa: با استفاده از این تابع میتوان مشخص کرد که آیا یک مقدار ورودی، نوع داده خاصی دارد یا خیر.
- isinteger: با استفاده از این تابع میتوان مشخص کرد که آیا یک مقدار ورودی، آرایه صحیح است یا خیر.
- isnumeric: با استفاده از این تابع میتوان مشخص کرد که آیا یک مقدار ورودی، آرایه عددی است یا خیر.
اعداد اعشاری
نرمافزار متلب اعداد اعشاری را با دقت Double و Single نمایش میدهد. در حالت پیش فرض، دقت نمایش اعداد Double است، اما با استفاده از یک تابع تبدیل ساده میتوان اعداد با دقت Single را ایجاد کرد.
اعداد اعشاری با دقت Double
نرمافزار متلب دادههای اعشار Double را بر اساس استاندارد 754 IEEE ایجاد میکند. هر مقداری که به صورت Double ذخیره شود، به ۶۴ بیت نیاز دارد. این ۶۴ بیت به صورت زیر اختصاص داده میشوند.
کاربرد | بیتها |
علامت (0 = مثبت، 1 = منفی) | 63 |
توان (بایاس شده با ۱۰۲۳) | 52 تا 62 |
قسمت اعشار f از عدد $$ \text {1.f} $$ | 0 تا 51 |
اعداد اعشاری با دقت Single
نرمافزار متلب دادههای اعشار Single را بر اساس استاندارد 754 IEEE ایجاد میکند. هر مقداری که به صورت Single ذخیره شود، به 32 بیت نیاز دارد. این 32 بیت به صورت زیر اختصاص داده میشوند.
کاربرد | بیتها |
علامت (0 = مثبت، 1 = منفی) | 31 |
توان (بایاس شده با 127) | 23 تا 30 |
قسمت اعشار f از عدد $$ \text {1.f} $$ | 0 تا 22 |
توابع مربوط به دادههای نوع اعشاری
توابع زیر مربوط به اعداد اعشاری در متلب هستند.
- double: این تابع مقادیر را به دادههای اعشار با دقت Double تبدیل میکند.
- single: این تابع مقادیر را به دادههای اعشار با دقت Single تبدیل میکند.
- class: این تابع نوع داده یک شی (object) را باز میگرداند.
- isa: این تابع تعیین میکند که آیا داده ورودی از یک نوع مشخصشده است یا خیر.
- isfloat: این تابع تعیین میکند که آیا داده ورودی یک آرایه اعشاری است یا خیر.
- isnumeric: این تابع تعیین میکند که آیا داده ورودی یک آرایه عددی است یا خیر.
- eps: این تابع دقت نسبی اعشاری را باز میگرداند. این مقدار، تلرانسی است که متلب در ارزیابیهای خود از آن استفاده میکند.
- realmax: این تابع بزرگترین عدد اعشاری که کامپیوتر شما قادر به نمایش آن است را در خروجی باز میگرداند.
- realmin: این تابع کوچکترین عدد اعشاری که کامپیوتر شما قادر به نمایش آن است را در خروجی باز میگرداند.
اعداد مختلط
اعداد مختلط از دو بخش حقیقی (Real) و موهومی (Imaginary) تشکیل میشوند. واحد موهومی اولیه برابر با ریشه دوم عدد 1- است و در متلب با دو حرف i یا j نمایش داده میشود.
ایجاد اعداد مختلط در متلب
با استفاده از دستور زیر، میتوان یک عدد مختلط را در متلب ایجاد کرد.
در این دستور، یک عدد مختلط با مقدار حقیقی ۲ و مقدار موهومی ۳ به متغیر x نسبت داده شده است.
توابع مربوط به دادههای عددی نوع مختلط
برای اعداد مختلط نیز در متلب تعدادی تابع خاص وجود دارند.
- complex: با استفاده از این تابع میتوان از المانهای حقیقی و موهومی اعداد مختلط ساخت.
- i or j: با استفاده از این دو تابع میتوان واحد موهومی که در ساخت عدد مورد استفاده قرار میگیرد را باز گرداند.
- real: این تابع قسمت حقیقی عدد مختلط ایجاد شده را باز میگرداند.
- imag: این تابع قسمت موهومی عدد مختلط ایجاد شده را باز میگرداند.
- isreal: این تابع تعیین میکند که یک عدد حقیقی است یا موهومی.
تبدیل انواع داده در متلب
با استفاده از دستورات زیر میتوان انواع داده در متلب را به یکدیگر تبدیل کرد.
- char: این دستور داده را به آرایه کاراکتر یا String تبدیل میکند.
- int2str: این دستور دادههای صحیح را به نوع String تبدیل میکند.
- mat2str: این دستور قادر است یک ماتریس را به String تبدیل کند.
- num2str: این دستور اعداد را به String تبدیل میکند.
- str2double: این دستور قادر است String را به عدد اعشاری با دقت double تبدیل کند.
- str2num: با استفاده از این تابع میتوان مقادیر String را به اعداد تبدیل کرد.
- native2unicode: این تابع بایتهای عددی را به کاراکترهای Unicode تبدیل میکند.
- unicode2native: این تابع کاراکترهای Unicode را به بایتهای عددی تبدیل میکند.
- base2dec: این تابع رشته اعداد مبنای N را به اعداد دسیمال (مبنای ده) تبدیل میکند.
- bin2dec: این تابع رشته اعداد باینری را به اعداد دسیمال تبدیل میکند.
- dec2base: این دستور اعداد دسیمال را به رشته اعداد مبنای N تبدیل میکند.
- dec2bin: این دستور اعداد دسیمال را به رشته اعداد باینری تبدیل میکند.
- dec2hex: این تابع اعداد دسیمال را به رشته اعداد هگزا دسیمال تبدیل میکند.
- hex2num: این دستور اعداد هگزا دسیمال را به رشته اعداد اعشاری با دقت Double تبدیل میکند.
- num2hex: این تابع اعداد اعشاری با دقت Single و Double را به رشته هگزا دسیمال IEEE تبدیل میکند.
- cell2mat: این دستور قادر است آرایههای سلولی را به آرایههای عددی تبدیل کند.
- cellstr: با این تابع میتوان از آرایههای کاراکتری، رشتهای از آرایههای سلولی ایجاد کرد.
- mat2cell: با این تابع میتوان آرایهها را به آرایههای سلولی تبدیل کرد که سلولها اندازه متفاوتی داشته باشند.
- num2cell: با این تابع میتوان آرایهها را به آرایههای سلولی تبدیل کرد که سلولها اندازه ثابتی داشته باشند.
- struct2cell: این تابع دادههای نوع Structure را به دادههای نوع آرایه سلولی تبدیل میکند.
مثال
در این قسمت میخواهیم چند مثال از نحوه تعریف کردن دادهها در متلب را بیان کنیم.
در قطعه کد زیر، چند نوع از دادهها را تعریف کردهایم.
str='Hello World!' n=2345 d=double(n) un=uint32(789.50) rn=5678.92347 c=int32(rn) |
در زیر نتیجه حاصل از اجرای این قطعه کد را میتوان مشاهده کرد.
str=Hello World! n= 2345 d= 2345 un=790 rn=5678.9 c= 5679 |
همچنین در کد زیر از تعدادی توابع مربوط به انواع داده در متلب استفاده کردهایم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | x=3 isinteger(x) isfloat(x) isvector(x) isscalar(x) isnumeric(x) x=23.54 isinteger(x) isfloat(x) isvector(x) isscalar(x) isnumeric(x) x=[123] isinteger(x) isfloat(x) isvector(x) isscalar(x) x='Hello' isinteger(x) isfloat(x) isvector(x) isscalar(x) isnumeric(x) |
نتیجه حاصل از این کد به صورت زیر است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | x=3 ans=0 ans=1 ans=1 ans=1 ans=1 x=23.540 ans=0 ans=1 ans=1 ans=1 ans=1 x= 1 2 3 ans=0 ans=1 ans=1 ans=0 x=Hello ans=0 ans=0 ans=1 ans=0 ans=0 |
در این مطلب به بررسی انواع داده در متلب پرداختیم و دیدیم که در متلب ۱۵ نوع اساسی داده وجود دارد. یکی از انواع داده در متلب آرایه عددی است که خود دو نوع صحیح و اعشاری دارد. نوع صحیح خود شامل دو نوع علامتدار و بدون علامت و نوع اعشاری دارای دو نوع با دقتهای Single و Double است. البته دادههایی مانند آرایه سلولی و آرایه ساختاری در مطالب دیگر به صورت مفصلتر بیان خواهند شد. همچنین در این مطلب با دستوراتی برای تبدیل انواع داده در متلب آشنا شدیم.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزش های متلب MATLAB
- آموزش نکات و ترفندهای متلب
- مجموعه آموزشهای پروژه محور برنامهنویسی
- مجموعه آموزش های برنامهنویسی متلب برای علوم و مهندسی
- منابع آموزشی نرم افزار متلب و برنامه نویسی کاربردی با آن
- تقلب نامه (Cheat Sheet) توابع و دستورات متلب (MATLAB)
- تقلب نامه (Cheat Sheet) تولباکس بهینه سازی در متلب — راهنمای کاربردی
^^
«مرضیه آقایی» دانشآموخته مهندسی برق است. فعالیتهای کاری و پژوهشی او در زمینه کنترل پیشبین موتورهای الکتریکی بوده و در حال حاضر، آموزشهای مهندسی برق مجله فرادرس را مینویسد.
بر اساس رای 12 نفر
آیا این مطلب برای شما مفید بود؟
منبع: blog.faradars.org