PDA

View Full Version : یافتن ماکزیمم و مینیم در نمودار



Mahmoud Zaad
چهارشنبه 26 فروردین 1394, 18:14 عصر
با سلام
دوستان، من تصویر یک نمودار رو دارم (مثلا + (http://ww.eghtesadonline.com/UserUpload/Image/%D9%85%D8%B3%DA%A9%D9%86%201%285%29.jpg)) که روند قیمت یک کالا رو در سالهای مختلف نشون میده. حالا در این تصویر می خوام نقاط مینیم و ماکزیمم نسبی و مطلق رو بدست بیارم. من تونستم نقاط تشکیل دهنده این نمودار رو استخراج کنم. برای پیدا کردن اکسترمم ها از مشتق اول و دوم برای سه نقطه پشت سر هم استفاده کردم اما جواب نگرفتم. اصولاً چه الگوریتم هایی برای این کار وجود داره؟ بنده با زبان های C++‎‎‎ و C#‎‎‎ کار می کنم.

golbafan
پنج شنبه 27 فروردین 1394, 09:31 صبح
اگر از تابع خودتون مشتق بگیرید، نقاط ماکسیمم و مینیموم تبدیل میشن به (صفر) چون در این نقاط شیب صفر است...

بدست آوردن شیب :
(y2-y1)/(x2-x1)

میتونید spline نقاط رو هم بدست بیارید تا جواب دقیقتر بشه

Mahmoud Zaad
پنج شنبه 27 فروردین 1394, 09:46 صبح
مساله اینه که تابعی در کار نیست همونطور که گفتم فقط یکسری نقاط داریم. بعد ممکنه در جایی مشتق صفر باشه ولی لزوما اکسترمم نداشته باشیم (مثلاً (x-1)^3 یا ممکنه در نقطه ای مشتق نداشته باشیم ولی اکسترمم داشته باشیم مثل |x-1| که در 1 مینیم هست ولی مشتق نداره.

برای بدست آوردن spline چکاری باید انجام بدم؟
در ضمن بعضی وقتی ها با یک فضای بسته مواجهیم مثل bar chart که مستطیل هستند برای فضای بسته چه باید کرد؟
با تشکر

golbafan
پنج شنبه 27 فروردین 1394, 09:57 صبح
نقاط شما یا به این صورت هستند که x,y دارند و یا مثل barchart فقط y دارند که در حالت دوم باید x رو خودتون بهش اختصاص بدید از 1 تا n

الگوریتم spline:

http://en.wikipedia.org/wiki/Spline_interpolation

اگر خود تابع نیست و فقط نقاط رو دارید باید از همون روش محاسبه شیب استفاده کنید:

(y2-y1)/(x2-x1)

Mahmoud Zaad
پنج شنبه 27 فروردین 1394, 13:29 عصر
بله اینها رو قبلاً می دونستم مشکل اینجاست اگر ما نقاط رو تبدیل به spline کنیم باز هم مشکلی حل نمیشه و نقاط ماکزیمم و مینیمم به دست نمیاد البته با توجه به این لینک (http://www.codeproject.com/Articles/560163/Csharp-Cubic-Spline-Interpolation)، اگر گوشه هم داشته باشیم این الگوریتم، گوشه رو تبدیل به انحنا می کنه. از طرفی نقاط پشت سر هم هستند و اگر شیب هر دو نقطه پشت سر هم رو حساب کنیم خیلی از شیب ها صفر میشه در صورتی که اکسترمم نیستند.

golbafan
دوشنبه 31 فروردین 1394, 13:27 عصر
لطفا یک نمونه از نقاط رو که رسم کردید عکسشو بزارید

Mahmoud Zaad
دوشنبه 31 فروردین 1394, 15:58 عصر
منظورتون کدوم نقاط هستند؟ شکل زیر کلیه نقاطی هست که از شکل اصلی استخراج شده. (البته منظور شکل پست اول نیست)
130477

golbafan
سه شنبه 01 اردیبهشت 1394, 10:20 صبح
سلام اینم جواب شما با استفاده از رسم spline و محاسبه شیب ها:
130506

golbafan
سه شنبه 01 اردیبهشت 1394, 10:46 صبح
از طرفی نقاط پشت سر هم هستند و اگر شیب هر دو نقطه پشت سر هم رو حساب کنیم خیلی از شیب ها صفر میشه در صورتی که اکسترمم نیستند.

وقتی چندین شیب پشت سرهم صفر باشن شما باید نقطه شیب وسطی رو برای اکسترمم در نظر بگیرید
مثلا اگر 5 شیب پشت سر هم صفر باشه اکسترمم در شیب سوم قرار داره

در ضمن میتونید از میانگین 3 شیب پشت سر هم برای نتایج بهتر استفاده کنید

Mahmoud Zaad
سه شنبه 01 اردیبهشت 1394, 12:47 عصر
عالی، فقط امکانش هست مراحل کار رو دقیقتر توضیح بدید؟ اول spline رو رسم می کنیم بعد شیب نقاط spline رو محاسبه می کنیم یا ...؟

دوم اینکه شما برای همه نقاط شیب رو محاسبه کردید؟ اگر نقطه فعلی (x1 و y1) باشه برای نقطه کمکی (بفرض x2 و y2) از نقطه بعدی استفاده کنیم یا قبلی. احیاناً روی نتایج موثر نیست؟

همچنین در مورد این میانگین سه شیب هم بی زحمت یه توضیحی بدید.

[سوالات شاید مبتدی باشه، اصلاً اسم هوش مصنوعی میاد آدم دنبال استفاده از روش های عجیب و الگوریتم های پیچیده است!]

golbafan
چهارشنبه 02 اردیبهشت 1394, 05:33 صبح
- بله اول باسد اسپلاین رو رسم کنید
- میتونید هم بعدی و هم قبلی رو برای گرفتن نتیجه دقیقتر بررسی کنید
- برای میانگین 3 شیب شما باید شیب خطوطی که بین 4 نقطه متوالی قرار دارند رو محاسبه کنید البته در مواقعی که تعداد نقاط شما کم باشه جواب نمیده

{اونقدرها هم پیچیده نیست ها... :لبخند:}

Mahmoud Zaad
چهارشنبه 02 اردیبهشت 1394, 10:02 صبح
{اونقدرها هم پیچیده نیست ها... :لبخند:}
آره تا الان راه رو اشتباه می رفتم، اصلاً اسم هوش مصنوعی اومد رفتم یه سری مقاله از sciencedirect و elsevier در مورد dominant point و corner detection دانلود کردم خیلی وحشتناک بودن، داشتم کم کم میرفتم سراغ انتگرال دوگانه!

Mahmoud Zaad
جمعه 04 اردیبهشت 1394, 21:27 عصر
سلام مجدد
بعضی وقت ها، یک یا چند خط افقی داریم که ماکزیممم یا مینیمم نسبی هم هستند منتها بعضی از این خط ها خیلی طولانی هستند، من می خوام نقطه ابتدا و انتهای این خطوط طولانی به عنوان ماکزیمم (با یک عرض) معرفی بشه (قسمت B شکل) از طرفی اگه خط افقی طولش کم باشه می خوام همونطور که اشاره کردید، نقطه وسطش نقطه ماکزیمم معرفی بشه (قسمت A شکل) برای این چه راه کاری هست، قاعدتاً باید یه حدی رو در نظر بگیریم که اگه از اون بیشتر یا کمتر شد یه تصمیمی بگیریم، منتها چه حدی؟!! مثلاً میانگین طول خطوط به عنوان حد باشه یا راه بهتری هست؟

130602

golbafan
شنبه 19 اردیبهشت 1394, 00:55 صبح
اگر این خط واقعا مستقیم باشه و تغییری در y نداشته باشیم از لحاظ ریاضی این نقاط همگی میتونن اکسترموم باشن

اما اگر موقع رسم اینطوری شده باید باز اسپیلاین رو در نظر بگیرید چون نقطه وسط در خطوط طولانی جواب اکسترمم نیست و باید با توجه به شیب نمودار در دوطرف این خط طولانی اون رو بدست بیارید و درنتیجه همون اسپیلاین کمک میکنه

131024