فاصله اقلیدسی و منهتن در متلب
مسائل مربوط به فاصلهی اقلدیسی و فاصلهی منهتن، مسائلی ریاضی هستند که برای محاسبهی فاصلهی دو نقطه در صفحه استفاده میشوند. در این نوشته توابع دستی برای این محاسبه توسط نرمافزار متلب را برای شما آماده کردهایم. محاسبهی فاصلهی اقلیدسی و محاسبهی فاصلهی منهتن در مباحث و علوم مختلفی به کار میرود همانطور در بحثهای هوش مصنوعی در موضوعاتی نظیر شناسایی الگو کاربردهای فراوانی دارد.
فاصله اقلیدسی و منهتن در متلب
فاصله اقلیدسی چیست؟
با استفاده از مفهومی به نام فاصله اقلیدسی که در انگلیسی با Euclidean Distance شناخته میشود به سادگی میتوانید کوتاهترین فاصلهی بین دو نقطه روی یک صفحه مختصات را برطبق رابطهی معروف فیثاغورث، محاسبه کنید. اگر x و y دو نقطه در مولفهی p شوند. فاصله اقلیدسی بین این دو به صورت زیر قابل محاسبه است:

نتیجهی نهایی رابطهی اقلدیسی هیچ گاه منفی نمیشود.
فاصله اقلیدسی در متلب
برای محاسبه ی فاصلهی اقلیدسی در نرمافزار متلب از کد زیر استفاده کنید:
function distance = euclideanDistance(x1, y1, x2, y2)
distance = sqrt( ((x1 - y1) ^ 2) + ((x2 - y2) ^ 2) );
end
نکته: کد بالا یک تابع نرمافزار متلب است که با نام euclideanDistance.m در کنار پروژهی شما استفاده میشود.
نکته: تابع زیر برای محاسبه ی فاصلهی اقلیدسی دو نقطه مقدار x و y هر نقطه را دریافت میکند و با فرمول معروف این رابطه به محاسبهی آن میپردازد.
فاصله منهتن چیست؟
اگر به جای مربع فاصلههای بین دو نقطه، از عملگر قدر مطلق فاصله بین نقاط استفاده شود، تابع فاصلهای که بدست میآید را منهتن یا در زبان انگلیسی Manhatan میگوییم. این نام به علت تقاطع منظم خیابانهای موجود در محلهی منهتن شهر نیویورک انتخاب شده است. البته فاصلهی منهتن در بین افراد گاهی به نام فاصلهی تاکسی یا Taxicab شناخته میشود. گاها شاید به جای فاصلهی منهتن یا فاصلهی تاکسی این مفهوم را با عنوان بلوک شهری یا City Block صدا کنند.

نتیجهی نهایی رابطهی منهتن هیچ گاه منفی نمیشود.
فاصله منهتن در متلب
برای محاسبهی فاصلهی منهتن در نرمافزار متلب از کد زیر استفاده کنید:
function distance = manhattanDistance(x1, y1, x2, y2)
distance = abs((x1 - y1)) + abs((x2 - y2));
end
نکته: کد بالا یک تابع نرمافزار متلب است که با نام manhattanDistance.m در کنار پروژهی شما قابل استفاده است.
اگر نیاز به یادگیری نرمافزار متلب را دارید این لینک را دنبال کنید. در صورتی که روش های بهتری برای تمرین بالا در اختیار دارید برای ما ارسال کنید.



















آیا این توابع روی ماتریس دادههای بزرگ هم بهینه عمل میکنن؟
بله، روی ماتریسهای بزرگ هم درست کار میکنن. فقط باید بهینه نوشته بشن تا سرعت کم نشه.
توی متلب امکان استفاده مستقیم از تابع آماده برای فاصله منهتن وجود داره یا باید دستی نوشت؟
برای فاصله منهتن، تابع آماده مستقیم نداره. باید دستی بنویسی یا از توابع عمومی مثل pdist در toolboxes استفاده کنی.
آیا این توابع روی دادههای سهبعدی هم جواب میدن یا فقط دوبعدی هستن؟
بله، این توابع برای دادههای سهبعدی و حتی بیشتر هم جواب میدن. فقط باید بعد بردارها برابر باشه.
در چه شرایطی استفاده از فاصله منهتن بهتر از فاصله اقلیدسیه؟
وقتی دادهها sparse (پراکندگی زیاد) یا با ابعاد بزرگ باشن، فاصله منهتن بهتر جواب میده چون به outlierها کمتر حساسه.
چرا توی محاسبه فاصله اقلیدسی از توان دوم استفاده میکنیم؟
به خاطر فرمول فیثاغورس هست. توان دوم باعث میشه فاصلهها همیشه غیرمنفی باشن و جهت بردار هم بیتأثیر بشه.