"هیولاهای پاتولوژیک! با گریه ریاضیدان وحشت زده هر یک از آنها در چشم من من از فضای Peano متنفرم و منحنی Koch من می ترسم که سه گانه کانتور واشر Sierpinski را تنظیم کند ، باعث می شود که من بخواهم گریه کنم و یک میلیون مایل دورتر از یک پروانه در یک روز سرد نوامبر بالها را ببندممردی به نام Benoit Mandelbrot متولد شد " - Jonathan Coulton ، اشعار" Mandelbrot Set "
روزی یک دوره دبیرستان به نام "هندسه" را گذراندم. شاید شما هم این کار را کرده اید. شما در مورد شکل ها در یک بعد ، دو بعد و شاید حتی سه نفر آموخته اید. دور یک دایره چیست؟منطقه مستطیل؟فاصله بین یک نقطه و یک خط؟بیایید به آن فکر کنیم ، ما در این کتاب هندسه را مطالعه کرده ایم و از بردارها برای توصیف حرکت اجسام در فضای دکارتی استفاده می کنیم. این نوع هندسه معمولاً پس از اقلیدس ریاضیدان یونانی به عنوان هندسه اقلیدسی گفته می شود.
برای ما رمزگذارهای طبیعت ، ما باید این سؤال را بپرسیم: آیا می توانیم دنیای خود را با هندسه اقلیدسی توصیف کنیم؟صفحه LCD که من در حال حاضر به آن خیره شده ام مطمئناً مانند یک مستطیل به نظر می رسد. و آلو که امروز صبح خوردم دایره ای است. اما اگر بخواهم بیشتر نگاه کنم ، و درختانی را که در خیابان قرار دارد ، در نظر بگیرم ، برگهایی که آن درختان را آویزان می کنند ، رعد و برق از رعد و برق شب گذشته ، گل کلم که برای شام خوردم ، رگ های خونی در بدن من و کوه هاو خطوط ساحلی که زمین فراتر از شهر نیویورک را پوشش می دهد؟بیشتر چیزهایی که در طبیعت پیدا می کنید با اشکال هندسی ایده آل هندسه اقلیدسی قابل توصیف نیست. بنابراین اگر می خواهیم طرح های محاسباتی را با الگوهای فراتر از اشکال ساده بیضی () ، رکت () و خط () شروع کنیم ، زمان آن رسیده است که ما در مورد مفاهیم پشت و تکنیک های شبیه سازی هندسه طبیعت بیاموزیم: فراکتال ها.
8. 1 فراکتال چیست؟
اصطلاح فراکتال (از فراکتوس لاتین ، به معنی "شکسته") توسط ریاضیدان بنویت ماندلبروت در سال 1975 ابداع شد. در کار اصلی خود "هندسه فراکتال طبیعت" ، او یک Fractal را "یک شکل هندسی خشن یا تکه تکه می کند که می تواند تعریف کندبه قطعات تقسیم شوید ، که هر یک از آنها (حداقل تقریباً) یک کپی با اندازه کاهش یافته از کل است. "
شکل 8. 2: یکی از مشهورترین و قابل تشخیص ترین الگوهای فراکتالی برای خود Benoit Mandelbrot نامگذاری شده است. تولید مجموعه Mandelbrot شامل آزمایش خواص اعداد پیچیده پس از عبور از یک عملکرد تکراری است. آیا آنها تمایل به بی نهایت دارند؟آیا آنها محدود می شوند؟در حالی که یک بحث ریاضی جذاب ، این الگوریتم "زمان فرار" یک روش کمتر عملی برای تولید فراکتال است تا تکنیک های بازگشتی که در این فصل بررسی خواهیم کرد. با این حال ، نمونه ای برای تولید مجموعه Mandelbrot در مثالهای کد گنجانده شده است.
بیایید این تعریف را با دو مثال ساده نشان دهیم. اول ، بیایید در مورد ساختار انشعاب درخت (که بعداً کد را برای آن خواهیم نوشت) فکر کنیم:
توجه کنید که چگونه درخت در شکل 8. 3 دارای یک ریشه واحد با دو شاخه در انتهای آن است. هر یک از این شاخه ها در انتهای آن دو شاخه دارند و آن شاخه ها دارای دو شاخه و غیره و غیره هستند. اگر بخواهیم یک شاخه را از درخت بکشیم و به تنهایی آن را بررسی کنیم ، چه می شود؟
با نگاهی دقیق به یک بخش معین از درخت ، می فهمیم که شکل این شاخه شبیه خود درخت است. این به عنوان خود شفقت شناخته می شود. همانطور که ماندلبروت اظهار داشت ، هر قسمت "کپی با اندازه کاهش یافته از کل" است.
درخت فوق کاملاً متقارن است و قطعات در واقع ماکت های دقیقی از کل هستند. با این حال ، Fractals لازم نیست کاملاً خودکشی باشد. بیایید نگاهی به نمودار بازار سهام (اقتباس از داده های واقعی سهام اپل) بیندازیم.
شکل 8. 5: نمودار a
شکل 8. 6: نمودار B
در این نمودارها ، محور x زمان است و محور y مقدار سهام است. این یک حادثه نیست که من برچسب ها را حذف کردم. نمودارهای داده های بازار سهام نمونه هایی از فراکتال ها هستند زیرا در هر مقیاس یکسان به نظر می رسند. آیا این نمودارهای سهام بیش از یک سال است؟یک روز؟یک ساعت؟هیچ راهی برای دانستن بدون برچسب وجود ندارد.(اتفاقاً ، نمودار A داده های شش ماهه داده و نمودار B را به بخش کوچکی از نمودار A نشان می دهد ، شش ساعت را نشان می دهد.)
این نمونه ای از یک فراکتال تصادفی است ، به این معنی که از احتمالات و تصادفی ساخته شده است. بر خلاف ساختار قطعی و شاخه ای از درخت ، از نظر آماری خود مخفی است. همانطور که در این فصل نمونه هایی را طی می کنیم ، برای تولید الگوهای فراکتالی به هر دو تکنیک قطعی و تصادفی خواهیم پرداخت.
در حالی که خود شنی بودن یک ویژگی اصلی فراکتال ها است ، مهم است که درک کنیم که خود شنی بودن به تنهایی باعث ایجاد یک فراکتال نمی شود. از این گذشته ، یک خط خودی است. یک خط در هر مقیاس یکسان به نظر می رسد ، و می توان آن را شامل بسیاری از خطوط کوچک شد. اما این یک فراکتال نیستفراکتال ها با داشتن یک ساختار خوب در مقیاس های کوچک (به بزرگنمایی در نمودار بازار سهام و به نوسانات خود ادامه خواهید داد) مشخص می شود و با هندسه اقلیدسی قابل توصیف نیست. اگر می توانید بگویید "این یک خط است!"سپس این یک فراکتال نیست.
یکی دیگر از مؤلفه های اساسی هندسه فراکتال ، بازگشت است. فراکتال ها همه تعریف بازگشتی دارند. ما قبل از ایجاد تکنیک ها و نمونه های کد برای ایجاد الگوهای فراکتالی در پردازش ، با بازگشت دوباره شروع خواهیم کرد.
8. 2 بازگشت
بیایید با بررسی اولین ظاهر فراکتال ها در ریاضیات مدرن ، بحث خود را در مورد بازگشت آغاز کنیم. در سال 1883 ، جورج کانتور ، ریاضیدان آلمانی قوانین ساده ای را برای تولید یک مجموعه بی نهایت تهیه کرد:
شکل 8. 8: مجموعه کانتور
در اینجا یک حلقه بازخورد در محل کار وجود دارد. یک خط واحد بردارید و آن را به دو قسمت بشکنید. سپس به آن دو خط برگردید و همان قانون را اعمال کنید ، هر خط را به دو خط بشکنید ، و اکنون ما با چهار نفر مانده ایم. سپس به آن چهار خط برگردید و قانون را اعمال کنید. اکنون هشت نفر دارید. این فرایند به عنوان بازگشت شناخته می شود: کاربرد مکرر یک قانون برای نتایج پی در پی. کانتور به آنچه اتفاق می افتد هنگام اعمال این قوانین ، تعداد بی نهایت بارها علاقه مند بود. با این حال ، ما در یک فضای پیکسل محدود کار می کنیم و بیشتر می توانیم سوالات و پارادوکس هایی را که ناشی از بازگشت بی نهایت است نادیده بگیریم. در عوض ما کد خود را به گونه ای می سازیم که قوانین را برای همیشه اعمال نمی کنیم (که باعث می شود برنامه ما یخ بزند).
قبل از اجرای مجموعه کانتور ، بیایید نگاهی بیندازیم که به معنای بازگشت مجدد کد چیست. در اینجا کاری است که ما همیشه برای انجام آن استفاده کرده ایم - یک تابع را در یک عملکرد دیگر قرار دهید.