به محفل ریاضی ایرانیان خوش آمدید! لطفا برای استفاده از تمامی امکانات عضو شوید
سایت پرسش و پاسخ ریاضی
+4 امتیاز
478 بازدید
در دانشگاه توسط vali (297 امتیاز)
برچسب گذاری دوباره توسط AmirHosein

آیا از بزرگ‌واران شخصی با رسم نمودار برد توابع مختلط به عنوان مثال تابع $f(z)= \sqrt{1+z} $ با دامنه قرص باز واحد با استفاده نرم‌افزار Mathematica آشنایی دارد؟ لطفاً راهنمایی کنید.

3 پاسخ

+4 امتیاز
توسط AmirHosein (10,683 امتیاز)
انتخاب شده توسط vali
 
بهترین پاسخ

سال پیش که پاسخ پیشین را برای پرسش‌تان ارسال کرده‌بودم دسترسی به نرم‌افزار commercial مالیِ Mathematica نداشتم. در دانشگاه Copenhagen (تا زمانی که من آنجا بودم) نرم‌افزارهای Maple و Matlab خریداری و قابل استفاده هستند (که بیشتر Maple به کار می‌برند)، اما اکنون که در دانشگاه سِگِد هستم از نرم‌افزار Mathematica استفاده می‌کنند. امروز دوباره این پست را دیدم بنابراین نگاهی به امکاناتش انداختم. دو روش برای رسم‌کردن یک تابع مختلط مقدار تک‌متغیره در این نرم‌افزار تهیه شده‌اند که تا حدی ایدهٔ شبیهی به ایدهٔ پارسال خودم دارند. دو دستورِ آماده در این نرم‌افزار عبارت‌انداز ComplexPlot و ComplexPlot3D. شما باید محدوده‌ای از دامنهٔ تابع‌تان که می‌خواهید بررسی شود را نیز بدهید. محدوده را باید به شکل یک مربع در صفحهٔ مختلط بیان کنید یعنی پائین‌ و چپ‌ترین نقطهٔ مربع به شکل $a_1+b_1 i$ و بالا و راست‌ترین گوشهٔ این مربع به شکل $a_2+b_2i$. پس یعنی تمام نقطه‌های $z\in\mathbb{C}$ای که $a_1\leq \Re (z)\leq a_2$ و $b_1\leq \Im (z)\leq b_2$. که $\Re$ یعنی قسمت حقیقی و $\Im$ یعنی قسمت موهومی. آنگاه خروجی همین مربع را می‌کشد و نقاطش را با توجه به مقدارِ $f(z)$ رنگ می‌زند. در دستورِ ComplexPlot دو کُدِ رنگی همزمان به کار می‌رود. ۱- رنگ نقطه نشان دهندهٔ $\theta$ در نمایشِ $f(z)$ به شکل $re^{i\theta}$ را اعلام می‌کند که $\theta$ را بین $-\pi$ و $\pi$ گرفته‌است و روشن و تیره (به سفید و به سیاه نزدیک‌بودن) بودن رنگ فاصله‌اش از کمینه و بیشنهٔ ممکن برای $r$ (که مثبت در نظر گرفته‌شده‌است) را نشان می‌دهد. برای اینکه نوارِ مقیاس رنگ و روشنی را ببینید می‌توانید به دستورِ ترسیم گزینهٔ PlotLegends->Automatic را بیفزائید. در زیر دستور لازم برای تابع آمده در پرسش‌تان و شکل خروجی را می‌بینید.

ComplexPlot[Sqrt[1 + z], {z, -1 - I, 1 + I}, PlotLegends -> Automatic]

توضیحات تصویر

توجه کنید که همانطور که خودتان در دیدگاهی در زیر پاسخ پیشینم اشاره کرده‌بودید تنها یک شاخه از دو شاخهٔ فرجهٔ دوم را برداشته‌است که شاخهٔ سمت راست است. چون مقدار $|f(z)|$ که همان $r$-ِ نمایش‌مان است بر روی بازهٔ $-1-i$ تا $1+i$ بین $0$ و $\sqrt{3}$ تغییر می‌کند، در نوار مقیاس هم تیره‌ترین حالت یعنی صفر و روشن‌ترین حالت یعنی $\sqrt{3}$ که تقریبا یک و شش دهم می‌شود. همانطور که می‌بینید تنها در نقطهٔ $z=-1$ تیره‌ترین مقدار رنگ دیده می‌شود که به خاطر این است که تابع در اینجا صفر می‌شود. بعلاوه $\theta$ بین $-\frac{\pi}{4}$ و $\frac{\pi}{4}$ تغییر می‌کند که اگر به نزدیکیِ $z=-1$ نگاه کنید همان رنگ‌های نوار مربوط به بازهٔ $[-\frac{\pi}{4},\frac{\pi}{4}]$ را می‌بینید که چون هر چه از این نقطه دورتر می‌شوید مقدارِ $r$ افزایش می‌یابد رنگ آنها کمرنگ‌تر می‌شود و تشخیص زاویه کمی سخت می‌شود.

و اما نمایش دوم در Mathematica به جای استفاده از کمرنگ و پررنگ بودن برای رساندنِ $r$ از بلندی و پستی استفاده می‌کند (ارتفاع) یعنی یک شکل ۳-بعدی به شما می‌دهد که صفحهٔ $x\circ y$-ِ آن همان محدوده‌ای از دامنه است که می‌خواهدی مقدار $f(z)$ بر روی آن را ببینید. محور $z$ها مقدارِ $r=|f(z)|$ را نشان می‌دهد و $\theta$ کماکان با رنگ نمایش داده‌می‌شود ولی چون دیگر خبری از کمرنگ و پررنگی نیست تشخیص آن کمی ساده‌تر می‌شود. دستور و شکل خروجی را در زیر می‌بینید.

ComplexPlot3D[Sqrt[1 + z], {z, -1 - I, 1 + I}, PlotLegends -> Automatic]

توضیحات تصویر

هر دو نمایش هم مزیت دارند و هم عیب. در یکُمی تشخیص رنگ وقتی خیلی پررنگ یا خیلی کمرنگ می‌شوند ممکن است سخت شود، در دومی زمانیکه خیلی بالا و پائین رفتن داشته‌باشید دیدن برخی ناحیه‌ها همزمان سخت می‌شود. پس انتخاب کدام ترسیم برایتان مناسب‌تر است وابسته به تایع‌تان خواهد بود. سرعت ترسیم برای این تابع نیز خیلی خوب بود. با استفاده از دستورِ Timing برای رسم نخست $0.66$ ثانیه و برای رسم دوم $0.67$ ثانیه بر روی رایانهٔ من زمان مصرف شد. و در آخر توجه کنید که عدد موهومی در نرم‌افزار Mathematica با حرف بزرگ I وارد می‌شود ولی در خروجی‌ها با حرف کوچک i برایتان نمایش داده می‌شود.

توسط vali (297 امتیاز)
+2
@AmirHosien ممنون از لطف‌تون. ظاهراً از آخرین نسخه Mathematica که ۱۲ باشه استفاده کرده‌اید و به تجزیه و تحلیل برد تابع پرداخته‌اید. نسخه Mathematica من ۱۱ هست و این شکل از برد را نتواستم خروجی بگیریم. اما با دستور ParametricPlot تونستم برد شکل را رسم کنم.
توسط AmirHosein (10,683 امتیاز)
+1
@vali بلی از نسخهٔ ۱۲ استفاده می‌کنم. اگر تمایل داشتید می‌توانید استفاده از دستور ParametricPlot‌تان را در قالب پاسخ بفرستید، البته کاملا وابسته به تمایل خودتان است.
+3 امتیاز
توسط AmirHosein (10,683 امتیاز)
ویرایش شده توسط AmirHosein

فرمول‌های زیادی برای رابطهٔ بین یک عدد مختلط چه در مختصات دکارتی چه در مختصات قطبی و ریشه‌هایش می‌توانید بنویسید. برای چند نمونه می‌توانید به پیوند زیر نگاه بیندازید.

پیوند به چند نمونه فرمول برای جذر اعداد مختلط

کاری که شما باید انجام بدهید (با هر نرم‌افزار یا زبان برنامه‌نویسی) این است که نمایش اعداد مختلط دامنه و هم‌دامنه را انتخاب و سپس فرمول نگاشت‌تان (ضابطه‌تان در اینجا به هر نقطه، دو نقطه تصویر می‌کند پس تابع نیست) که از نمایش نقاط دامنه به نمایش تصویر تابع در آن نقاط در هم‌دامنه می‌رود را بنویسید و سپس به نرم‌افزار بدهید یا برنامه‌نویسی کنید که نقاط رسم شوند.

من اینطور عمل کردم؛ برای دامنه از نمادهای $z=x+iy=re^{i\theta}$ و برای هم‌دامنه از نمادهای $f(z)=u+iv=se^{i\theta}$ استفاده کردم. یک نقطه از دیسک واحد به شکلِ $re^{i\theta}$ نوشته‌ می‌شود که $0\leq r\leq 1$ (توجه کنید که دیسک واحد باز یا بسته همه‌اش تنها در مرز دایره فرق می‌کند، شما می‌توانید مساوی سمت یک را حذف کنید) و $0\leq \theta\leq 2\pi$. اگر با نمایش‌های اعداد مختلط آشنا باشید با یک ساده‌سازی ساده دارید؛ $$se^{i\phi}=f(re^{i\theta})= \sqrt{(1+r\cos\theta)+i(r\sin\theta)}$$ دوباره با توجه به اینکه جذر گرفتن از یک عدد مختلط در مختصات قطبی برابر با نصف کردن زاویه و جذر گرفتن از اندازه و قرار دادن یک مثبت‌منفی است با کمک رابطهٔ نمایش اعداد مختلط و کمی ساده‌سازی می‌فهمید که؛ $$s=\pm\sqrt{\sqrt{r^2+1+2r\cos\theta}},\quad \phi=\frac{1}{2}\arctan(\frac{r\sin\theta}{1+r\cos\theta})$$ و $$u=s\cos\phi,\quad v=s\sin\phi$$ از طرفی برای خود دامنه هم داریم؛ $$x=r\cos\theta,\quad y=r\sin\theta$$ پس برای رسم نمودار در Python به صورت کاملا از پایه (تنها از توابع sqrt و arctan2 و sin و cos که در library پیش‌فرضِ math در Python موجود هستند استفاده کردم) و با نقطه‌نقطه نگاری برای تعداد $10^4$ نقطه (یعنی بازهٔ $[0,1)$-ِ $r$ را ۱۰۰ قسمت و بازهٔ $[0,2\pi)$ -ِ $\theta$ را نیز ۱۰۰ قسمت مساوی و سپس $(x,y)$ و $(u,v)$ را با رابطه‌های بالا برای هر انتخاب از $(r,\theta)$ محاسبه) بوسیلهٔ library نگارندهٔ matplotlib شکل یکُم را رسم کردم که کمتر از یک ثانیه اجرایش طول می‌کشد. در سمت راست دامنه را می‌بینید و در سمت چپ تصویر تابع از این دامنه. تصویر هر نقطه دو نقطه است که با همان رنگ نمایش داده شده است، پس می‌توانید نقاط را دنبال کنید. مثلا وقتی قرار می‌دهید $z=0$ دارید $f(z)=\pm 1$ که در شکل سوم با فلش‌های نیلی‌رنگ مشخص کردم.

برای اینکه پیوستگی شکل بیشتر بشود و به کل شکل نزدیک‌تر شویم باید مقدار تقسیم‌بندی‌ها را افزایش دهیم. شکل دوم برای $10^6$ یعنی هر یک از بازه‌های $r$ و $\theta$ ۱۰۰۰ بخش، می‌باشد. البته مدت زمان محاسبات ۱۰۰ برابر می‌شود پس تقریبا یک دقیقه وقت نیاز است ولی مشکل اصلی بحث گرافیکی می‌شود که کمی برای پایتون سنگین می‌شود (امکان گرفتن پیام خطای not responding وابسته به مشخصات رایانه‌تان هست).

یک نکتهٔ مهم دیگر این است که زمانی‌که دیسک باز را در نظر می‌گیرید نقطهٔ $(0,0)$ را در تصویر نخواهید داشت (چون تصویر نقطهٔ $(-1,0)$ است که بر روی مرز دیسک قرار دارد و این تنها نقطهٔ وصل کنندهٔ دو شاخهٔ راست و چپ تصویر است. بسادگی می‌توانید ثابت کنید که تصویر دیسک باز توسط این نگاشت ناهمبند می‌شود.

اگر چیزی به نظرتان در شکل درست نیست، لطفا خبر دهید تا کد را بازبینی کنم.

توسط vali (297 امتیاز)
+2
جناب آقای امیرحسین، ممنون بابت پاسخ‌گویی‌تون. من گرایش‌م در مقطع دکتری آنالیز مختلط هست. همکارم در نگارش مقاله چون خارجی هستن ایشون زحمت رسم نگاره را انجام داده‌اند. اخیراً در مقالات مربوط به آنالیز مختلط از نرم‌افزار Mathematica استفاده می‌کنند. به همین منظور شروع به یاد‌گیری این نرم‌افزار کرده‌ام. جواب شما کاملا درست می‌باشد. البته در توابع مختلط، برای توابع چند مقداری، شاخه‌ای از لگاریتم را در نظر می‌گیرند که مقدار لگاریتم در نقطه ۱ برابر صفر شود و معمولاً با این شاخه که شاخه اصلی نامیده می‌شود محاسبات را انجام می‌دهند. پس بر طبق شاخه اصلی نگاره شبه‌-برگ نیم‌صفحه راست قابل قبول می‌باشد.
توسط AmirHosein (10,683 امتیاز)
+1
@vali سپاس از دیدگاهتان (به خاطر مطلب شاخهٔ اصلی). دانشگاه ما از نرم‌افزارهای پولی، نرم‌افزارهای Maple و Matlab (که من Mapleکار هستم) را اشتراک دارد و دسترسی به نرم‌افزار پولی Mathematica را ندارم. Mathematica را در برخی گروه‌ها به خاطر بحث گرافیکی‌اش محبوبیت دارد. Python هم رایگان هست هم اینکه چون برنامه‌نویسی پایه هست، اگر کاری را با پایتون بکنید تقریبا می‌توانید مطمئن باشید همان ایده را در نرم‌افزارهای بزرگ ریاضی هم می‌توانید پیاده کنید، برای همین اول با پایتون فکر کردم. اگر دوباره وقت کنم با نرم‌افزارهای دیگه هم فکر می‌کنم.
توسط vali (297 امتیاز)
+3
@AmirHosein سپاس از صبر و حوصله شما بابت توضحیات مفصل در این گروه. همچنین سپاس از حسن‌توجه‌تون. حتماً راهنمایی‌ شما را مدنظر خواهم داشت.
+2 امتیاز
توسط vali (297 امتیاز)

در ابتدا باید توجه داشته باشیم که نرم‌افزار Mathematica برای توابع چندمقداری، مقدار شاخه اصلی را به عنوان پیش‌فرض دارد. بنابراین تابع $f(z)=(1+z)^{1/2}$ به‌صورت $$f(z)=(1+z)^{1/2}=e^{\frac{1}{2}\ln (1+z)}, \quad -\pi< \Im\{ \ln (1+z)\}< \pi$$ تعریف می‌شود که $f(0)=1$. یکی از روش‌های رسم نگاره تابع مختلط استفاده از نرم‌افزار Mathematica و به کمک دستور ParametricPlot است. در زیر کد ParametricPlot برای تابع $f(z)=(1+z)^{1/2}$ با دامنه قرص باز واحد و خروجی را می توانید ببینید.

ParametricPlot[{Re[(1 + r*Exp[I*t])^(1/2)],   Im[(1 + r*Exp[I*t])^(1/2)]}, {r, 0, 1}, {t, -\[Pi], \[Pi]}]

توضیحات تصویر


حمایت مالی

کانال تلگرام محفل ریاضی
امروز : تاریخ شمسی اینجا نمایش داده می‌شود
...