rohola zandie
rohola zandie
خواندن ۵ دقیقه·۲ سال پیش

درک گسسته ی لاپلاسین

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

تعریف رسمی چنین اپراتوری مشتق دوم در فضای n بعدی اقلیدسی است (فرمول بالا فقط برای دو بعد است x و y). گاهی آن را با مشتق دوم هم مقایسه می کنند. بنابراین میتوان آن را به صورت مشتق مشتق یا گرادیان گرادیان هم نگاه کرد! حالا بیاییم ببینیم گرادیان به چه معناست!‌

گرادیان جهت بیشترین تغییرات تابع است!‌ اینجا یک تفاوت مهم وجود دارد و آن این است که گرادیان جهت دار است یعنی بردار است. بیاید ساده ترین مثال را در نظر بگیریم در حالتی که تابع ما در یک مشبک دو بعدی تعریف می شود و هر سلول در این مشبک مقدار تابع در آن نقطه است!‌ این اعداد می توانند میزان تراکم افراد در نقاط مختلف شهر یا گرمای سطح یا حتی شبکه های اجتماعی باشد. دلیل اصلی مشبک کردن این است که از شر حد ها و حساب بی نهایت کوچک ها راحت شویم. در عمل هم هیچ تابع واقعی در کامپیوتر تا بی نهایت دقت ندارد! حتی برای سطح دمای زمین از هم در نهایت دقت ما به پیکسل هایی میرسد!

یعنی در عمل برای تابع ۲ بعدی چیزی شبیه شکل زیر را داریم:

حالا سوال این است که در جهت x و y مقادیر چطور تغییر میکنند! چنین چیزی خیلی ساده است و هیچ نیازی به درک حد ندارد! کافی است نگاه کنیم در یک سلول دلخواه i و j چطور تابع تغییر می کند. یعنی ببینیم مقدار سطر قبل و سطر بعد (همان ستون) چقدر تفاوت دارند! این فرمول از تعریف خود مشتق می آید با این تفاوت که h در اینجا مقداری نیست که به سمت بی نهایت میل می کند بلکه دقیقا برابر با ۱ و اندازه ی فاصله بین سلول هاست! مشتق تابع در جهت x (یا سطر)‌ می شود

و به همین ترتیب برای ستون یا جهت y

شکل زیر این مقادیر را نشان میدهد و جهت هایی که بررسی میکنیم


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

که می شود

به همین سادگی!

برای مشتق دوم چکار کنیم؟ مشتق دوم چیزی جز مشتق مشتق نیست! یعنی خود مشتق چطوری تغییر می کند. اگر در سلول i , j باشیم برای هر بعد می توان دو مشتق حساب کرد یکی از i به i+1 مثل بالا و یکی از i-1 به i

اگر هر کدام از مشتق ها را حساب کنیم و مثل قبل تفاضل آن ها را حساب کنیم عملا مشتق دوم را حساب کرده ایم. به زبان فرمول ها:

که می شود


همین را برای مشتق دوم در جهت y هم داریم

شکل زیر چهار بردار و تغییرات آن ها را نشان میدهد (با رنگ)

به این ترتیب می توان لاپلاسین را براحتی نوشت!

جدای از روش استخراج فرمول بیایید یک نگاهی به خود فرمول بندازیم. این فرمول در عمل خیلی ساده است به این ترتیب که نگاه می کند سلول های همسایه ای (به جز گوشه ها) مقدارشان چقدر بیشتر از مقدار مرکز است. سلول مرکزی را در چهار ضرب می کنیم که مقیاس درست باشد (چهار چیز با چهار چیز مقایسه شود). اگر این مقدار مثبت باشد چه معنی ای دارد؟ معنی اش تقریبا این می شود در مجموع اگر در هر جهتی (شمال و جنوب و شرق و غرب) حرکت کنیم به طور متوسط مقدار بالاتر می رود. انگار از یک چاله داریم بالا می آییم! برعکس اگر این مقدار منفی باشد یعنی مرکز شبیه به یک تپه است! این همان معنی لاپلاسین است!

روش دیگر نگاه کردن به لاپلاسین می تواند از طریق یک ماتریس مانند زیر باشد:

در این صورت اعمال لاپلاسین فرقی با کانولوشن این ماتریس با ماتریس تابع (مشبک) ندارد! (قلم و کاغذ بردارید و خودتان استخراج کنید!). یک سوال این شاید باشد چرا ما گوشه ها را در نظر نگرفتیم جهت های دیگری هم متصور است. اگر فرض کنیم اعدادی که تابع مشبک را نشان میدهند تقریبا شبیه به یک صفحه هستند در این صورت نیازی به محاسبه آن جهت ها نیست چون آن جهت ها عملا در دو جهت بالا پایین و چپ راست ملاحظه می شوند (بردار مستقلی نیستند) اگر تابع ما بسیار صاف (smooth) باشد یا نقاط زیادی از آن داشته باشیم آنگاه مقادیر بهم نزدیک و رویه بسیار شبیه صفحه بنظر می رسد (شما هر رویه ای پیوسته ای اگر به اندازه ی کافی روی آن زوم کنید شبیه به صفحه می شود (شرایط دیگری هم لازم است اینجا در نظر نمیگیریم)) اما اگر رویه ای که مشبک نشان می دهد خیلی صاف نباشد باید گوشه ها را هم در نظر گرفت. یک روش پایدار تر برای محاسبه ی لاپلاسین استفاده از ماتریس زیر است:

حتی می توان برای ابعاد بالاتر هم به لاپلاسین فکر کرد. اگر سه متغیر داشته باشیم. و فقط جهات اصلی را در نظر بگیریم (بالا پایین چپ راست جلو و عقب) آنگاه سه ماتریس خواهیم داشت

برای سه صفحه به شکل زیر (یک تصور فضایی کمک میکند بفهمید دارد چه اتفاقی می افتد)


این همان روش finite difference است که برخلاف آنکه برای درک ریاضیات پیوسته ی حسابان بسیار مفید است بسیار کم در نظر گرفته می شود. به جای آن استفاده بیش از حد از حساب بی نهایت کوچک ها مفاهیم را قدری مبهم و سخت فهم میکند. اگر من روزی از شما میپرسیدم که چگونه میشود گرادیان یا مشتق را در کامپیوتر پیاده سازی کرد قطعا شما با سوالات زیادی روبرو می شدید ولی با دانستن روش تفاضل محدود (finite difference) می توان بسادگی معادلات پیچیده را در کامپیوتر پیاده سازی کرد و درک جدید تری نسبت به آنها پیدا کرد.


در قسمت بعدی کد لاپلاسین را در متلب میزنیم و یک مثال ازینکه اصلا به چه دردی میخورد و چطور میتوان فهم شهودی از آن داشت!


ریاضیاتمتلببرنامه نویسی
شاید از این پست‌ها خوشتان بیاید