با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش متلب را دنبال می کنند. هرگاه متلب با یک نام متغیر جدید مواجه می شود، متغیر را ایجاد کرده و فضای حافظه مناسب را اختصاص می دهد. اگر متغیر مور نظر از قبل وجود داشته باشد، MATLAB محتوای اصلی را با محتوای جدید جایگزین می کند و در صورت لزوم فضای ذخیره سازی جدید را نیز اختصاص می دهد. اما نوع فضای ذخیره سازی برای انواع عددی مختلف متفاوت است، یک نوع به فضای کمتر و یک نوع ممکن است به فضای بیشتری احتیاج داشته باشد برای مدیریت این موضوع ، متلب به شما اجازه می دهد که نوع داده متغیر خود را مشخص کنید. که در ادامه ی این آموزش ما به مباحث آشنایی با نوع داده در متلب ، نوع متغیر در متلب مخصوصا نوع داده double در متلب پرداخته ایم.
در ادامه ی آموزش ما شما را با انواع داده در متلب و کاربرد آن ها را آشنا خواهیم کرد.
در حالت پیش فرض متلب مقدار فضای مورد نیاز برای متغیر تعریف شده را اختصاص می دهد.
مثال:
1 | Total = 42 |
بعد از اجرای کد فوق متلب یک ماتریس ۱*۱ را با نام Total و مقدار ۴۲ ایجاد می کند.
نوع داده در متلب
متلب ۱۵ نوع داده اساسی را ارائه می کند. که هر نوع داده ها اطلاعاتی را که در قالب یک ماتریس یا آرایه هستند را ذخیره می کند.
اندازه این ماتریس یا آرایه حداقل ۰-۰ است و می تواند به یک ماتریس یا آرایه ی بزرگتری تبدیل شود.
جدول زیر شامل رایج ترین انواع داده در متلب است:
شماره | نوع داده و کاربرد |
۱ | int8 اعداد صحیح ۸ بیتی
|
۲ | uint8 اعداد بدون علامت ۸ بیتی
|
۳ | int16 اعداد صحیح ۱۶ بیتی
|
۴ | uint16 اعداد بودن علامت ۱۶ بیتی |
۵ | int32 اعداد صحیح ۳۲ بیتی |
۶ | uint32 اعداد بدون علامت ۳۲ بیتی |
۷ | int64 اعداد صحیح ۶۴ بیتی |
۸ | uint64 اعداد بدون علامت ۶۴ بیتی |
۹ | single داده های عددی دقیق |
۱۰ | doubleداده های عددی با دقت دو برابر |
۱۱ | logical مقادیر منطقی ۰ و ۱ |
۱۲ | char ذخیره داده ها از نوع کاراکتر |
۱۳ | cell array مقادیر آرایه های سلولی |
۱۴ | structure ایجاد ساختارها همانند زبان های برنامه نویسی C و… |
۱۵ | function handle اشاره به یک تابع |
۱۶ | user classes اشیاء ساخته شده از یک کلاس تعریف شده توسط کاربر |
۱۷ | java classes آبجکت های ایجاد شده توسط کلاس های جاوا |
مثال- ایجاد یک فایل اسکریپت با کد زیر:
1 2 3 4 5 6 7 8 9 10 11 | str = 'Hello World!' n = 2345 d = double(n) un = uint32(789.50) rn = 5678.92347 c = int32(rn) |
نتیجه ی اجرای کد فوق در متلب:
1 2 3 4 5 6 7 8 9 10 11 | str = Hello World! n = 2345 d = 2345 un = 790 rn = 5678.9 c = 5679 |
تبدیل نوع داده در متلب
متلب توابعی را برای تبدیل مقادیری از یک نوع به انواع دیگر را ارئه می دهد، که به شرح جدول زیر می باشد:
تابع | کاربرد |
char | به فرمت رشته ای در آرایه تبدیل می کند. |
int2str | نوع داده ی integer را به رشته ای تبدیل می کند. |
mat2str | ماتریس را به رشته تبدیل می کند. |
num2str | نوع عددی را به رشته تبدیل می کند. |
str2double | رشته را به double تبدیل می کند. |
str2num | تبدیل رشته به عدد |
native2unicode | بایت های عددی را به Unicode رشته تبدیل می کند. |
unicode2native | Unicode رشته را به بایت های عددی تبدیل می کند. |
base2dec | نوع رشته ای N numbe را به دهدهی تبدیل می کند. |
bin2dec | اعداد رشته ی دودویی را به دهدهی تبدیل می کند. |
dec2base | نوع دهدهی را به دودویی تبدیل می کند. |
dec2bin | نوع دهدهی را به دودویی در قالب رشته ای تبدیل می کند. |
dec2hex | نوع دهدهی را به مبنای ۱۶ در قالب رشته تبدیل می کند. |
hex2dec | مبنای ۱۶ را به دهدهی در قالب رشته تبدیل می کند. |
hex2num | مبنای ۱۶ را به دهدهی با دقت دوبرابر تبدیل می کند. |
num2hex | نوع دورقمی و دابل را به مبنای ۱۶ تبدیل می کند. |
cell2mat | آرایه نوع سلولی را به آرایه عددی تبدیل می کند. |
cell2struct | آرایه ی سلولی را به آرایه ساختاری تبدیل می کند. |
cellstr | یک آرایه ی سلولی از رشته های آرایه ی کاراکتری ایجاد می کند. |
mat2cell | یک آرایه را به آرایه ی سلولی با اندازه ی سلول های مختلف تبدیل می نماید. |
num2cell | تبدیل آرایه به آرایه سلولی با سلول های با اندازه ثابت |
struct2cell | تبدیل ساختار به سلول های آرایه |
متلب توابع مختلفی را برای شناسایی نوع داده ی متغیرها ارائه می کند، که به شرح جدول زیر می باشد:
Function | Purpose |
---|---|
is | تشخیص وضعیت |
isa | تعیین اینکه آیا ورودی شیء کلاس مشخص است. |
iscell | تعیین اینکه ورودی آرایه سلولی است. |
iscellstr | تعیین اینکه آیا ورودی آرایه سلولی از رشته ها است |
ischar | تعیین اینکه آیا آیتم یک آرایه کاراکتر است. |
isfield | تعیین اینکه ورودی فیلد ساختار آرایه است. |
isfloat | تعیین اینکه آیا ورودی آرایه اعشار است. |
ishghandle | برای آبجکت های گرافیکی True را برمی گرداند. |
isinteger | تعیین اینکه آیا ورودی آرایه ی integer است. |
isjava | تعیین اینکه آیا ورودی آبجکت جاوا است. |
islogical | تعیین اینکه آیا ورودی آرایه ی منطقی است. |
isnumeric | تعیین اینکه آیا ورودی آرایه ی عددی است. |
isobject | تعیین اینکه آیا ورودی آبجکت متلب است. |
isreal | بررسی می کند که ورودی یک آرایه ی واقعی باشد. |
isscalar | تعیین اینکه ورودی اسکالر است |
isstr | تعیین اینکه ورودی آرایه کاراکتر است |
isstruct | تعیین اینکه ورودی آرایه ساختار است |
isvector | تعیین اینکه ورودی بردار است یا خیر |
class | تشخیص کلاس یک آبجکت |
validateattributes | بررسی اعتبار آرایه |
whos | لیست متغیرها را در فضای کاری با اندازه و نوع آن ها |
یک فایل اسکریت با کد زیر ایجاد می کنیم:
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 = [1 2 3] 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 25 26 | 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 |
داده ها و مقادیری که برای انجام محاسبات مختلف در متلب وارد می شوند اندازه و فرمت مختلفی دارند. متلب برای مدیریت بهتر و تخصیص فضای حافظه مناسب نوع متغیرها ، انواع داده را برای مشخص کردن نوع مقدار متغیر ارائه می کند. از این روی مباحث این بخش را به آشنایی با نوع داده در متلب یا نوع متغییر در متلب اختصاص دادیم.
مرجان
سلام تو رو خدا کمکم کنید
من میخوام بدونم مقدارم رشته اس یا عدد
یک جمله ی طولانی با دو تا متغیر دارم
خیلی طولانیه
ارور
output turncate
داده
گفتم شاید عدد نیس رشته اس که تشخیص نمیده
صادق
سلام.
از تابع ()class برای تشخیص نوع دادتون استفاده کنید.
سعید
با سلام من یه سوال داشتم خدمتتون؛
من یک تابع شیب دارم و میخوام مقدار این تابع را له المان های واقعی سلف و خازن در مدار واقعی داخل سیمولینک اعمال کنم. داده ای که به دست میاد ۱×۵۳ double هست که متلب یک ارور میده و میگه: ” داده باید از نوع اسکالر باشه و نه از نوع منطقی و این داده بدست آمده از تابع شیب از نوع numeric هست، چطور میتونم این داده از نوع numeric را به اسکالر تبدیل کنم با وجود اینکه مقدار تغییرات شیب را داشته باشم؟؟؟
لطفا جواب بدین
خیلی ممنون و متشکرم
صادق
متغیر های از نوع اسکالر یعنی متغیر هایی که فقط یک مقدار داشته باشند (۱×۱) . فک می کنم شما باید داده های اون بردار رو یکی یکی پردازش یا اعمال کنید.
m
با سلام.من یک سوال داشتم
چرا در کدنویسی ها همیشه از double نمیتونیم استفاده بکنیم(با اینکه کامل تره) و به جاش داده های عددی صحیح با علامت و بدون علامت رو استفاده میکنیم؟
صادق
سلام. از نوع double فقط برای وقتی استفاده می کنیم که رقم اعشاری داشته باشیم. تفاوت هایی وجود داره. به عنوان مثال پردازش نوع double برای cpu یا پردازنده سنگین تره. موقع خروجی گرفتن هم شکل نمایش فرق می کنه. فکر می کنم حداکثر عددی که double و نوع عدد صحیح هم پشتیبانی می کنه با هم فرق داره. همین بحث حافظه رو هم که اشاره کردید خیلی مهمه و نمیشه نادیده گرفتش. در کل استفاده از نوع int برای اعداد صحیح بهتره و وقتی میشه استفاده کرد چرا این کارو انجام ندیم؟