آموزش کامل دستور zeros در متلب (MATLAB) با مثالهای عملی
آموزش کامل دستور zeros در متلب (MATLAB) با مثالهای عملی
1️⃣ مقدمه
در متلب (MATLAB) توابع زیادی برای تولید و مقداردهی اولیه به آرایهها وجود دارد. یکی از پرکاربردترین این توابع، دستور zeros است.
🔹 همانطور که از اسمش پیداست، این دستور آرایههایی (بردار، ماتریس یا آرایههای چندبعدی) تولید میکند که تمام عناصر آن برابر با صفر هستند.
📌 چرا دستور zeros مهم است؟
-
مقداردهی اولیه (Initialization):
در بسیاری از الگوریتمها لازم است قبل از شروع محاسبات، یک ماتریس یا آرایه خالی از مقادیر غیرضروری ایجاد کنیم. در این شرایطzerosگزینهای بسیار سریع و ساده است. -
پیشاختصاص حافظه (Preallocation):
یکی از تکنیکهای مهم برای افزایش سرعت اجرای برنامهها در متلب، اختصاص دادن حافظه به متغیرها قبل از ورود به حلقهها است. استفاده ازzerosباعث میشود متلب بداند آرایه چه ابعادی دارد و حافظه لازم را از ابتدا رزرو کند. این کار در پروژههای بزرگ باعث بهبود چشمگیر سرعت اجرا میشود. -
کاربرد در مدلسازی و شبیهسازی:
در بسیاری از پروژههای شبیهسازی (مثل پردازش تصویر، کنترل، تحلیل داده و مسائل مهندسی)، به آرایههای اولیه نیاز داریم که تمام مقادیرشان صفر باشند و سپس در طول محاسبات تغییر کنند.
📊 یک مثال ساده
فرض کنید میخواهیم یک ماتریس ۳×۳ بسازیم که در ابتدا همه مقادیرش صفر باشد:
خروجی:
همانطور که میبینید، ماتریسی با ابعاد ۳ در ۳ ساخته شد که همه عناصر آن صفر هستند.
2️⃣ تعریف دستور zerosدر متلب
📌 نحوه نوشتن دستور
تابع zeros در متلب به شکلهای مختلفی استفاده میشود. ساختار کلی آن به این صورت است:
📖 توضیح ورودیها:
-
n: یک عدد اسکالر (مثلاً 5). خروجی یک ماتریس مربعیn×nاز صفر خواهد بود.-
مثال:
zeros(4)→ ماتریس 4×4 صفر.
-
-
m, n: دو عدد (مثلاً 2 و 3). خروجی یک ماتریس باmسطر وnستون است.-
مثال:
zeros(2,3)→ ماتریس 2×3 صفر.
-
-
m, n, p, ...: چند عدد. خروجی یک آرایه چندبعدی از صفر خواهد بود.-
مثال:
zeros(2,3,4)→ آرایه 2×3×4 صفر.
-
-
size(A): اگر به جای عدد، ابعاد یک ماتریس دیگر (مثلاًA) داده شود، آرایه صفر دقیقا با همان ابعاد ساخته میشود.-
مثال: اگر
Aیک ماتریس 3×5 باشد،zeros(size(A))→ ماتریس 3×5 صفر.
-
📖 توضیح خروجی:
-
خروجی همیشه یک آرایه عددی از نوع double است مگر اینکه نوع دادهی دیگری مشخص شود.
-
برای تغییر نوع داده، میتوانیم یک کلاس داده مثل
single,int8,logicalو … به تابع بدهیم:
⚡ مثال ساده:
3️⃣ ایجاد بردار صفر
بردار (Vector) در متلب یک آرایه یکبعدی است که میتواند سطری یا ستونی باشد. با دستور zeros به راحتی میتوانیم چنین بردارهایی ایجاد کنیم.
📌 بردار ستونی صفر
اگر بخواهیم یک بردار ستونی (یعنی فقط یک ستون و چند سطر) بسازیم، باید تعداد سطرها را مشخص کنیم و ستون را برابر ۱ قرار دهیم:
خروجی:
📖 این یک بردار ستونی ۵×۱ از صفرهاست.
📌 بردار سطری صفر
برای ساخت بردار سطری (یعنی فقط یک سطر و چند ستون)، کافیست تعداد ستونها را مشخص کنیم و سطر را برابر ۱ قرار دهیم:
خروجی:
📖 این یک بردار سطری ۱×۵ از صفرهاست.
📌 مثال ترکیبی
فرض کنید میخواهیم دو بردار صفر (یکی سطری و یکی ستونی) بسازیم و در یک ماتریس کنار هم قرار دهیم:
خروجی:
✅ نتیجه: با zeros(m,1) بردار ستونی و با zeros(1,n) بردار سطری میسازیم.
4️⃣ ایجاد ماتریس صفر
ماتریس در متلب یک آرایه دوبعدی است که شامل سطر و ستون میشود. با دستور zeros میتوانیم ماتریسهایی با ابعاد دلخواه ایجاد کنیم.
📌 ایجاد ماتریس مربعی صفر
برای ساخت یک ماتریس مربعی (تعداد سطر = تعداد ستون) کافیست یک عدد به دستور بدهیم:
خروجی:
📖 این یک ماتریس ۴×۴ از صفرهاست.
📌 ایجاد ماتریس مستطیلی صفر
برای ساخت یک ماتریس غیرمربعی، باید تعداد سطرها و ستونها را جداگانه مشخص کنیم:
خروجی:
📖 این یک ماتریس ۳×۵ از صفرهاست.
📌 تغییر نوع دادهی ماتریس صفر
به طور پیشفرض دادههای خروجی از نوع double هستند. ولی میتوان نوع داده را تغییر داد:
خروجی D:
📌 مثال ترکیبی
فرض کنید میخواهیم یک ماتریس ۳×۳ از صفرها ایجاد کنیم و در ادامه یکی از ستونها را با مقادیر جدید جایگزین کنیم:
خروجی:
✅ نتیجه: با zeros(n) ماتریس مربعی و با zeros(m,n) ماتریس مستطیلی از صفر میسازیم.
5️⃣ ایجاد آرایه چندبعدی صفر
در متلب، آرایهها فقط محدود به دو بعد (ماتریس) نیستند. میتوان آرایههایی با سه بعد (3D) یا حتی بیشتر ایجاد کرد. دستور zeros این امکان را بهسادگی فراهم میکند.
📌 ساختار کلی
-
m: تعداد سطرها
-
n: تعداد ستونها
-
p: تعداد لایهها (بُعد سوم)
-
ابعاد بیشتر هم میتوان اضافه کرد.
📌 آرایه سهبعدی صفر (3D)
مثال: ساخت یک آرایه ۲×۳×۴ (۲ سطر، ۳ ستون، ۴ لایه):
📖 این دستور یک آرایه سهبعدی ایجاد میکند که ۴ لایه دارد و هر لایه یک ماتریس ۲×۳ پر از صفر است.
برای مشاهده یک لایه خاص میتوانیم بنویسیم:
خروجی A(:,:,1) :
📌 آرایه چهاربعدی و بالاتر
مثال: ساخت یک آرایه چهاربعدی ۲×۲×۳×2 :
📖 این آرایه در واقع شامل ۲ بلوک است، که هر بلوک شامل ۳ لایه از ماتریسهای ۲×۲ صفر است.
📌 تغییر نوع داده در آرایه چندبعدی
میتوان نوع داده را مثل قبل تغییر داد:
📊 مثال کاربردی
فرض کنید میخواهیم یک حجم داده سهبعدی (3D Data Cube) برای ذخیرهی تصاویر سیاهوسفید در ۱۰ فریم ایجاد کنیم. هر تصویر ۶۴×۶۴ پیکسل است.
📖 حالا آرایه Frames شامل ۱۰ لایه است، که هر کدام یک تصویر ۶۴×۶۴ (در ابتدا تماماً صفر) میباشند.
✅ نتیجه: با دستور zeros میتوانیم به راحتی آرایههای چندبعدی (3D یا بیشتر) بسازیم و در پروژههای پردازش تصویر، ویدیو یا شبیهسازی دادهها استفاده کنیم.
6️⃣ استفاده از size برای ایجاد آرایه صفر
گاهی اوقات در برنامهنویسی متلب لازم است یک آرایه صفر با ابعادی مشابه یک ماتریس یا آرایه موجود ایجاد کنیم.
تابع zeros این امکان را با کمک دستور size فراهم میکند.
📌 ساختار کلی
-
در اینجا
Aیک ماتریس یا آرایه موجود است. -
خروجی
Zیک آرایه صفر با ابعادی دقیقاً مشابهAخواهد بود.
📊 مثال ساده
فرض کنید ماتریس زیر را داریم:
حالا میخواهیم یک ماتریس صفر با ابعاد مشابه A بسازیم:
خروجی:
📖 ابعاد ماتریس A سه در سه بود، پس Z هم به صورت ۳×۳ ساخته شد.
📌 مثال در آرایه سهبعدی
اگر یک آرایه سهبعدی داشته باشیم:
حالا میخواهیم آرایهای صفر با همان ابعاد بسازیم:
📖 خروجی یک آرایه صفر با ابعاد ۴×۵×۲ خواهد بود.
📌 تغییر نوع داده همراه با size
همانند قبل میتوان نوع داده را مشخص کرد:
📊 مثال کاربردی
فرض کنید در پردازش تصویر، یک تصویر خاکستری را داریم و میخواهیم یک تصویر صفر با همان ابعاد ایجاد کنیم تا نتایج پردازش روی آن ذخیره شود:
📖 در این حالت Zimg تصویری کاملاً سیاه (صفر) خواهد بود که میتوان به عنوان بوم خالی استفاده کرد.
✅ نتیجه: با ترکیب zeros و size میتوانیم به راحتی آرایههای صفر بسازیم که دقیقاً هماندازه دادههای موجود هستند.
7️⃣ کاربردهای عملی دستور zeros
دستور zeros فقط برای ساختن آرایه پر از صفر نیست؛ در واقع یکی از ابزارهای اصلی برنامهنویسی در متلب است که در پیشاختصاص حافظه، شبیهسازیها، پردازش داده و مدلسازی کاربرد گستردهای دارد.
📌 1. پیشاختصاص حافظه (Preallocation)
یکی از رایجترین مشکلات در متلب، کند شدن برنامهها به دلیل تغییر مداوم اندازهی آرایه در حلقههاست.
برای جلوگیری از این مشکل، بهتر است قبل از ورود به حلقه، آرایه را با zeros مقداردهی اولیه کنیم.
🔹 مثال بدون پیشاختصاص:
📖 در این حالت متلب مجبور میشود در هر بار تکرار حلقه، اندازه آرایه را تغییر دهد → اجرای کند.
🔹 مثال با پیشاختصاص:
📖 این بار حافظه از قبل رزرو شده است و حلقه بسیار سریعتر اجرا میشود.
📌 2. شبیهسازیها و مدلسازیها
در بسیاری از شبیهسازیها لازم است ابتدا یک آرایه صفر ایجاد کنیم و سپس دادهها را در طول زمان در آن ذخیره کنیم.
🔹 مثال: ذخیره مقادیر یک سیگنال
📖 در اینجا ابتدا آرایه y با صفر پر شده و سپس در حلقه مقادیر سینوسی جایگزین شده است.
📌 3. پردازش تصویر
در پردازش تصویر، معمولاً نیاز داریم یک تصویر کاملاً سیاه (صفر) ایجاد کنیم تا نتایج پردازش را در آن قرار دهیم.
🔹 مثال: ساخت تصویر سیاه
📖 خروجی یک تصویر سیاه ۲۵۶×۲۵۶ خواهد بود.
📌 4. ایجاد ماتریسهای کمکی
گاهی در محاسبات ماتریسی نیاز به ماتریس صفر داریم (مثلاً به عنوان ماتریس اولیه در حل معادلات یا برای پرکردن بخشی از یک ماتریس بزرگ).
🔹 مثال: ساخت ماتریس بلوکی
📖 در اینجا ماتریس M یک ماتریس بلوکی است که در آن ماتریسهای A و B در قطر اصلی و بلوکهای صفر در بقیه جاها قرار گرفتهاند.
📌 5. الگوریتمهای عددی و بهینهسازی
در بسیاری از الگوریتمهای عددی، مثل روشهای تکراری یا بهینهسازی، لازم است یک بردار یا ماتریس صفر به عنوان مقدار اولیه تعریف شود.
🔹 مثال: مقدار اولیه در روشهای تکراری
📖 این مقدار میتواند شروع یک الگوریتم تکراری مثل روش نیوتن یا الگوریتمهای بهینهسازی باشد.
✅ نتیجه: دستور zeros نهتنها برای ساخت آرایه صفر، بلکه برای بهینهسازی سرعت برنامهها، مدلسازی دادهها، پردازش تصویر و الگوریتمهای عددی یک ابزار ضروری است.
8️⃣ مقایسه zeros با توابع مشابه
در متلب توابع زیادی برای تولید آرایههای خاص وجود دارد. هرکدام برای موقعیتی کاربردی هستند. در این بخش، zeros را با توابع مشابه مقایسه میکنیم.
📌 1. مقایسه با ones
-
zeros(m,n)→ ماتریس m×n پر از صفر -
ones(m,n)→ ماتریس m×n پر از یک
مثال:
خروجی:
📖 تفاوت: یکی پر از صفر و دیگری پر از یک.
📌 2. مقایسه با eye
-
zeros(n)→ ماتریس n×n پر از صفر -
eye(n)→ ماتریس همانی (قطر اصلی پر از 1 و بقیه صفر)
مثال:
خروجی:
📖 تفاوت: در eye فقط قطر اصلی پر از 1 است.
📌 3. مقایسه با rand
-
zeros(m,n)→ ماتریس m×n پر از صفر -
rand(m,n)→ ماتریس m×n با اعداد تصادفی یکنواخت بین 0 و 1
مثال:
خروجی نمونه:
📖 تفاوت: rand اعداد تصادفی تولید میکند، در حالیکه zeros فقط صفر.
📌 4. مقایسه با randn
-
zeros(m,n)→ ماتریس m×n پر از صفر -
randn(m,n)→ ماتریس m×n با اعداد تصادفی با توزیع نرمال استاندارد (میانگین 0، واریانس 1)
مثال:
خروجی نمونه:
📖 تفاوت: randn اعداد تصادفی گاوسی تولید میکند.
📊 جمعبندی مقایسه
| دستور | خروجی |
|---|---|
zeros(m,n) |
ماتریس صفر |
ones(m,n) |
ماتریس پر از یک |
eye(n) |
ماتریس همانی |
rand(m,n) |
اعداد تصادفی یکنواخت (0 تا 1) |
randn(m,n) |
اعداد تصادفی نرمال (میانگین 0، واریانس 1) |
✅ نتیجه: هرکدام از این توابع برای شرایط خاصی استفاده میشوند. اگر هدف مقداردهی اولیه بدون عدد اضافی باشد، zeros بهترین انتخاب است.
9️⃣ جمعبندی و نکات کلیدی
تابع zeros یکی از پرکاربردترین ابزارهای متلب برای ایجاد آرایههای صفر است و کاربردهای آن از مقداردهی اولیه ساده تا شبیهسازیهای پیچیده گسترده است.
📌 نکات کلیدی:
-
ساخت ماتریس و بردار صفر
-
zeros(n)→ ماتریس مربعی n×n -
zeros(m,n)→ ماتریس مستطیلی m×n -
zeros(m,1)→ بردار ستونی -
zeros(1,n)→ بردار سطری
-
-
آرایههای چندبعدی
-
zeros(m,n,p,...)→ آرایه چندبعدی با ابعاد دلخواه
-
-
پیشاختصاص حافظه (Preallocation)
-
استفاده از
zerosقبل از حلقهها باعث افزایش سرعت اجرای برنامه میشود.
-
-
ایجاد آرایه مشابه یک ماتریس دیگر
-
zeros(size(A))→ ایجاد آرایه صفر با ابعاد مشابهA
-
-
تغییر نوع داده
-
به صورت اختیاری میتوان نوع داده را تغییر داد:
-
-
کاربرد در شبیهسازی و پردازش داده
-
ایجاد ماتریسهای کمکی، تصاویر صفر، ذخیره دادهها، الگوریتمهای عددی و بهینهسازی
-
-
مقایسه با توابع مشابه
-
ones→ ماتریس پر از یک -
eye→ ماتریس همانی -
rand→ ماتریس با اعداد تصادفی یکنواخت -
randn→ ماتریس با اعداد تصادفی نرمال
-
🔹 جمعبندی نهایی:
-
ساده اما قدرتمند:
zerosپایه و اساس بسیاری از محاسبات و الگوریتمهای متلب است. -
کاربرد فراگیر: در همه زمینهها از جمله ریاضیات، مهندسی، شبیهسازی و پردازش تصویر استفاده میشود.
-
بهینهسازی برنامهها: با پیشاختصاص حافظه میتوان سرعت برنامهها را به طرز چشمگیری افزایش داد.
- سایت متلبی, سایت انجام پروژه متلب به صورت تخصصی است.
- مستندات دستور zeros در matlab از سایت متورکز
اگر سوالی در مورد این مطلب دارید میتوانید در بخش دیدگاه همین پست با ما در میان بگذارید.




دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.