
این متن به معرفی یک تابع MATLAB به نام extrema2 میپردازد که برای یافتن نقاط ماکزیمم و مینیمم (قلهها) در یک سری زمانی (بردار) یا سطح (ماتریس) طراحی شده است و مقادیر NaN (Not a Number) را نادیده میگیرد. در ادامه به بررسی جزئیات این تابع میپردازیم :
هدف
هدف اصلی extrema2 شناسایی نقاط اوج (هم ماکزیمم و هم مینیمم) در یک مجموعه داده است. این تابع به طور خاص برای کار با دادههای یک بعدی (سری زمانی) و دو بعدی (سطح) طراحی شده است.
ساختار تابع
[zmax, imax, zmin, imin] = extrema2(peaks);
peaks: این ورودی داده است. میتواند یک بردار (برای سری زمانی) یا یک ماتریس (برای سطح) باشد.zmax: یک بردار شامل مقادیر ماکزیممها (قلهها).imax: یک بردار شامل اندیسهای خطی ماکزیممها. احتمالاً ازind2subبرای تبدیل این اندیسهای خطی به اندیسهای سطر و ستون استفاده میکنید اگر ورودی شما یک ماتریس (سطح) باشد.zmin: یک بردار شامل مقادیر مینیممها (درهها).imin: یک بردار شامل اندیسهای خطی مینیممها. دوباره، برای ورودی ماتریس ازind2subاستفاده کنید.
ویژگیها و عملکرد کلیدی
- مدیریت مقادیر NaN: تابع به صراحت عناصر
NaNرا در دادههای ورودی نادیده میگیرد. این برای مجموعههای داده دنیای واقعی که دادههای گمشده در آنها رایج است، بسیار مهم است. نادیده گرفتنNaNاز تداخل آنها با تشخیص قله جلوگیری میکند. - کار با بردارها و ماتریسها:
extrema2تطبیقپذیر است و میتواند ورودیهای 1 بعدی (بردارها) و 2 بعدی (ماتریسها) را مدیریت کند. برای ماتریسها، قلهها را در امتداد ستونها، سطرها و هر دو قطر جستجو میکند. این نشان میدهد که به دنبال قلهها در همه جهات است. - بازگرداندن اندیسهای خطی: تابع اندیسهای خطی (
imaxوimin) را برمیگرداند. این کارآمد است، اما مهم است که به یاد داشته باشید که برای ورودی ماتریس، تقریباً مطمئناً میخواهید ازind2subبرای دریافت مختصات سطر و ستون قلهها استفاده کنید. - نسخه بهروزرسانی شده: توضیحات ذکر میکند که این نسخههای بهروزرسانی شده
EXTREME.MوEXTREME2.Mهستند. این نشان میدهد که نسخههای قبلی ممکن است محدودیتها یا اشکالاتی داشته باشند که برطرف شدهاند.
نحوه عملکرد احتمالی (مفهومی)
برای یک بردار (سری زمانی):
- در بردار تکرار میشود.
- برای هر نقطه، بررسی میکند که آیا بزرگتر (برای ماکزیممها) یا کوچکتر (برای مینیممها) از نقاط همسایه خود است.
- مقادیر
NaNدر مقایسه رد میشوند. - اگر یک نقطه قله باشد، مقدار و اندیس خطی آن ذخیره میشود.
برای یک ماتریس (سطح):
- به احتمال زیاد در سطرها، ستونها و قطرها تکرار میشود.
- برای هر نقطه، آن را با همسایههایش در همه جهات مربوطه (بالا، پایین، چپ، راست، مورب) مقایسه میکند.
- دوباره، مقادیر
NaNنادیده گرفته میشوند. - مقادیر قله و اندیسهای خطی آنها ذخیره میشوند.
مثال استفاده (تصویری)
% مثال با یک بردار
time_series = [1 3 2 5 3 7 2 NaN 1];
[zmax, imax, zmin, imin] = extrema2(time_series);
% مثال با یک ماتریس
surface = [1 2 3; 4 5 NaN; 7 8 9];
[zmax, imax, zmin, imin] = extrema2(surface);
[row_max, col_max] = ind2sub(size(surface), imax); % تبدیل به اندیسهای سطر/ستون
[row_min, col_min] = ind2sub(size(surface), imin); % تبدیل به اندیسهای سطر/ستون
بهبودهای کلیدی نسبت به یافتن قله سادهتر
- مدیریت NaN: مقاومت در برابر دادههای گمشده.
- قابلیت 2 بعدی: مدیریت سطوح، نه فقط سریهای زمانی.
- جستجوی مورب: یافتن قلهها در امتداد قطرها در یک ماتریس.
این تابع یک روش جامعتر و قویتر برای یافتن قلهها در دادهها در مقایسه با الگوریتمهای اصلی یافتن قله که ممکن است NaNها یا دادههای 2 بعدی را مدیریت نکنند، ارائه میدهد. استفاده از اندیسهای خطی و نیاز به ind2sub جزئیات مهمی هستند که باید هنگام استفاده از تابع در نظر داشته باشید.
