| lcalc(1) | General Commands Manual | lcalc(1) |
نام (NAME)
lcalc - محاسبه صفرها و مقادیر تابعهای L
خلاصه دستور (SYNOPSIS)
lcalc [گزینهها]
توضیحات (DESCRIPTION)
برنامهٔ lcalc یک ابزار خط فرمانی برای محاسبهٔ صفرها و مقادیر تابعهای L (L-functions) است. چندین تابع L بهصورت توکار در آن قرار دارند و پیشفرض برنامه، تابع زتای ریمان است. شما همچنین میتوانید تابع L دلخواه خود را در قالب یک فایل داده که آن را توصیف میکند مشخص کنید؛ بخش DATA FILE FORMAT را در ادامه ببینید.
محاسبهٔ صفرها (COMPUTING ZEROS)
به ازای یک تابع L دادهشده (بهطور پیشفرض، زتای ریمان)، lcalc میتواند با استفاده از پرچمهای --zeros یا --zeros-interval صفرهای آن را محاسبه کند. برای نمونه،
$ lcalc --zeros 1000
هزار صفر نخست تابع زتای ریمان را محاسبه خواهد کرد، در حالی که فرضیهٔ (تعمیمیافتهٔ) ریمان را بررسی کرده و اطمینان حاصل میکند که هیچ صفری جا نمانده باشد. خروجی تنها شامل بخشهای موهومی صفرها است، چرا که تمام بخشهای حقیقی باید 0.5 باشند.
فرضیهٔ (تعمیمیافتهٔ) ریمان از طریق مقایسهٔ تعداد صفرهای یافتشده با جملهٔ اصلی در فرمول N(T) تأیید میشود. تفاضل، یعنی S(T)، بهطور میانگین باید کوچک باشد. در غیر این صورت، صفرهای از قلم افتاده شناسایی میشوند و برنامه با بازگشت به عقب، در گامهایی دقیقتر به جستجوی تغییر علامتها میپردازد. این روند تا زمانی که صفرهای از قلم افتاده در زمانی معقول پیدا شوند تکرار میشود؛ در غیر این صورت، برنامه خارج خواهد شد.
صفرهای یافتشده همچنین پیش از فرستاده شدن به خروجی وارسی میشوند؛ این کار با استفاده از فرمول صریح برای مقایسهٔ مجموعها روی صفرها با مجموعها روی اعداد اول صورت میگیرد. برنامه از این مقایسه برای تنظیم پویای دقت خروجی استفاده میکند و اگر هر دو طرف حداقل تا دو رقم پس از اعشار یکسان نباشند، خارج میشود. بهطور دقیقتر، همزمان با خروجی داده شدن صفرها، فرمول صریح ریمان-ویل مکرراً بررسی میشود. فرض کنید صفرهای غیربدیهی L(s) بهصورت 1/2 + i gamma باشند. فرض کنید f تابعی به شکل f(x) = exp(-A(x-x_0)^2) باشد، که در آن A = log(10)/Digits بوده و Digits تعداد ارقام دقت محاسباتی است (پانزده برای نوع دادهٔ double توکار)، و x_0 نیز همانطور که در ادامه توضیح داده میشود تغییر میکند.
سپس، مجموعها روی صفرها
-----
\
) f(gamma)
/
-----
gamma
به دو روش تا دقت محاسباتی محاسبه میشوند: نخست با بهکارگیری صفرهای بهدستآمده از روشهای عددی، و دوم با بهکارگیری فرمول صریح برای بیان مجموع روی صفرها بهصورت مجموعی روی توانهای اعداد اول. این دو با هم مقایسه میشوند و برنامه بر پایهٔ میزان تطابق میان آنها، دقت خروجی صفرها را تعیین میکند. اگر این دو حداقل تا دو رقم اعشار با هم همخوانی نداشته باشند، برنامه متوقف میشود.
مقدار x_0 بهگونهای انتخاب میشود که با یکی از صفرهای L(s)، مثلاً gamma_j، منطبق باشد، اما به اندازهٔ 0.5 جابهجا (انتقالیافته) میشود تا تقارن تابع f از بین برود (جابهجا نکردن، آن را به یک تابع زوج تبدیل میکند و حساسیت آن نسبت به نادقیقیهای صفرها، به جای خطی، بهصورت درجهدوم خواهد بود).
در ابتدا، برای هر یک از صفرها یک تابع آزمون f جداگانه استفاده میشود، بهطوری که x_0 با آن صفرها منطبق باشد. با این حال پس از مدتی، تنها به ازای هر پنج صفر یک تابع f جدید انتخاب میشود که x_0 آن نیز به همین ترتیب منطبق است.
شما همچنین میتوانید محاسبه را از پس از صفر Nام آغاز کنید. برای نمونه،
$ lcalc --zeros 5 --N 5
صفرهای ششم تا دهم را در خروجی چاپ میکند. هشدار: گزینهٔ --N مقدار N(T) را با استفاده از فرمول شامل جملهٔ اصلی (ناشی از فاکتورهای گاما) و S(T) ارزیابی میکند. مقدار S(T) با بررسی تغییرات آرگومان (arg) تابع L(s) هنگام حرکت از 1/2 - iT به infinity - iT و سپس به سمت بالا تا infinity + iT و نهایتاً به 1/2 + iT محاسبه میشود. اگر T نزدیک به عرض یک صفر باشد، این فرآیند ممکن است زمان زیادی ببرد. میتوان این مورد را با پیادهسازی روش تورینگ برای یافتن صفر Nام (تنها با بررسی تغییر علامتها روی خط بحرانی) یا با تنظیم نقطهٔ شروع و نادیده گرفتن تعداد متناظری از صفرها در صورت طولانی شدن زمان اجرا بهبود بخشید، اما در حال حاضر، تنها انتگرال کانتور محاسبه میشود.
گونهای از روش تورینگ که فقط روی خط بحرانی بررسی انجام میدهد، برای گزینهٔ --zeros به کار میرود تا اطمینان حاصل شود که تمام صفرها یافته شدهاند. با این حال، در رابطه با گزینهٔ --N، مقدار S(T) ابتدا از طریق انتگرالگیری کانتوری محاسبه میشود تا روی صفر Nام متمرکز شود.
اگر نگران بررسی فرضیهٔ (تعمیمیافتهٔ) ریمان نیستید، یا اگر انتظار ندارید برقرار باشد (برای نمونه، اگر قصد دارید سریهای دیریکله بدون ضرب اویلر را مطالعه کنید)، میتوانید با استفاده از گزینهٔ --zeros-interval در یک "بازه" به دنبال صفرها بگردید. برای نمونه،
$ lcalc --zeros-interval --x=10 --y=100 --stepsize=0.1
صفرهای تابع زتای ریمان را در بازهٔ 1/2 + 10i تا 1/2 + 100i با بررسی تغییر علامتها با گامهایی به اندازهٔ 0.1 جستجو میکند. ستون نخست خروجی شامل بخش موهومی صفر است و ستون دوم مقداری مرتبط با S(T) را نشان میدهد — هر بار که یک تغییر علامت، یعنی یک جفت صفر، از قلم بیفتد، این مقدار تقریباً دو واحد افزایش مییابد. در بخشهای بالاتر نوار بحرانی باید از اندازه گام کوچکتری استفاده کنید تا هیچ صفری از دست نرود. گزینهٔ --zeros-interval زمانی کاربرد دارد که بخواهید صفرها به محض یافت شدن در خروجی نمایش یابند.
گزینهٔ --zeros، که فرضیهٔ (تعمیمیافتهٔ) ریمان را تأیید میکند، پیش از چاپ هرگونه صفری در خروجی، به دنبال دهها صفر میگردد تا مطمئن شود هیچ صفری از قلم نیفتاده است؛ در نتیجه، خروجی دادن نخستین صفرها نسبت به --zeros-interval بیشتر زمان میبرد. برای به دست آوردن مقادیری فراتر از چند صفر انگشتشمار، یا برای اطمینان قطعی از اینکه هیچ صفری از قلم نیفتاده است، باید از گزینهٔ --zeros استفاده کرد..SH "محاسبه مقادیر (COMPUTING VALUES)"
برنامه lcalc همچنین میتواند مقادیر یک تابع L را با استفاده از پرچم --value محاسبه کند. برای مثال،
$ lcalc --value --x=0.5 --y=100
مقدار تابع زتای ریمان (پیشفرض) را در نقطه x + yi = 0.5 + 100i محاسبه خواهد کرد. هر دو بخش حقیقی و موهومی در خروجی چاپ میشوند و با یک فاصله جدا شدهاند؛ در این حالت، خروجی تقریباً 2.692619886 -0.0203860296 است که نمایانگر zeta(x+yi) = 2.692619886 - 0.0203860296i میباشد.
شما همچنین میتوانید مقادیر را در طول یک پارهخط در نقاط با فواصل یکسان محاسبه کنید:
$ lcalc --value-line-segment --x=0.5 --X=0.5 --y=0 --Y=10 --number-samples=100
مقادیر تابع زتای ریمان را از 0.5 + 0i تا 0.5 + 100i در 1000 نقطه با فواصل برابر محاسبه میکند. خروجی شامل چهار ستون است: بخشهای حقیقی و موهومی نقطه کنونی (دو ستون)، و بهدنبال آن بخشهای حقیقی و موهومی مقدار تابع (دو ستون).
توابع L خم بیضوی (ELLIPTIC CURVE L-FUNCTIONS)
اگر lcalc با پشتیبانی از PARI ساخته شده باشد، گزینه --elliptic-curve را میتوان با پرچمهای --a1 تا --a6 ترکیب کرد تا یک تابع L خم بیضوی مشخص شود. برای مثال،
$ lcalc --zeros=5 --elliptic-curve --a1=0 --a2=0 --a3=0 --a4=0 --a6=1
پنج ریشه (صفر) اول تابع L مرتبط با خم بیضوی y^2 = x^3 + 1 را محاسبه میکند.
پیچشها (TWISTS)
پیچشها با مشخصههای دیریکله در حال حاضر برای تمامی توابع زتا و توابع L فرمهای کاسپ (cusp-form) در دسترس هستند. برای مثال،
$ lcalc --value --x=0.5 --y=0 --twist-quadratic --start -100 --finish 100
مقدار L(1/2, chi_d) را برای d بین -100 و 100 (شامل هر دو) خروجی میدهد. سایر گزینههای پیچش نیز در دسترس هستند. برای مثال
$ lcalc --zeros=200 --twist-primitive --start 3 --finish 100
دویست صفر نخست تمامی L(s,chi)های اولیه (primitive) با هادی (conductor) بین 3 و 100 (شامل هر دو) را ارائه میدهد.
توجه داشته باشید که با گزینه --twist-quadratic شما مبین (discriminant) را مشخص میکنید که میتواند منفی باشد، در حالی که با گزینه --twist-primitive هادی (conductor) مشخص میشود که باید مثبت باشد.
هنگام استفاده از گزینههای مختلف پیچش، غیر از --twist-quadratic، ستون دوم خروجی یک برچسب برای مشخصه به پیمانه n است. این مقدار عددی صحیح بین 1 و phi(n) است. اگر محدود به مشخصههای اولیه باشید، تنها زیرمجموعهای از این اعداد صحیح در ستون دوم نمایش داده میشوند.
میتوان با استفاده از گزینه --output-character جدول مشخصهها را بهدست آورد. این قابلیت با گزینه --twist-quadratic کار نمیکند، اما با سایر گزینههای پیچش کار میکند.
گزینه --output-character آرگومانی برابر با 1 یا 2 میپذیرد. برای نمونه، آرگومان 1 جدولی جامع از chi(n) را برای تمامی gcd(n,conductor) = 1 چاپ خواهد کرد.
مشخصهها بهصورت ضربی بر حسب مولدهای گروههای دوری به پیمانه توانهای اول مقسومعلیه n ساخته میشوند، و هیچ فرمول سادهای برای تبدیل برچسب به مشخصه وجود ندارد. در نتیجه، --output-character پیش از چاپ صفرهای تابع L مربوطه، جدولی را نیز برای هر مشخصه نمایش خواهد داد (اما نه با گزینه --twist-quadratic).
این جدولها شامل شش ستون هستند:
- 1
- مقدار n
- 2
- برچسبی برای مشخصه، یک عدد صحیح بین 1 و phi(n)
- 3
- هادی (conductor) مشخصه القاگر (در صورتی که اولیه باشد، همانند ستون اول است).
- 4
- ستون ۴: m، یک عدد صحیح که نسبت به n متباین (هماول) است
- 5
- Re(chi(m))
- 6
- Im(chi(m))
اگر در عوض، --output-character=2 داده شود، تنها مقدار chi(-1) (یعنی اینکه آیا chi زوج است یا فرد) و اینکه آیا chi اولیه است یا خیر چاپ خواهد شد..SH "گزینهها (OPTIONS)"
برای کاربرد مقدماتی برنامه، دستور زیر را اجرا کنید:
$ lcalc --help
بیشتر گزینههای lcalc در خروجی آن به اندازه کافی توضیح داده شدهاند. در اینجا اطلاعات بیشتری درباره گزینههای مشخصی گردآوری شده است.
- --rank-compute, -r
- رتبه تحلیلی (analytic rank) را محاسبه میکند. محاسبه رتبه تحلیلی حتی برای رتبههای بالا نیز به خوبی عمل میکند، زیرا روش مورد استفاده مشتقات را محاسبه نمیکند، بلکه به رفتار تابع L در نزدیکی نقطه بحرانی مینگرد.
- --derivative=<n>, -d <n>
- مشتق nام را محاسبه میکند. در حال حاضر گزینه derivative از مشتقگیری عددی استفاده میکند (با گرفتن ترکیبهای خطی از L(s + mh) برای اعداد صحیح m، تا ضریب تیلور مربوطه از L(s) استخراج شود). برای دریافت نتایج مطلوب در مشتقهای مرتبه بالاتر، باید libLfunction/lcalc با دقت (precision) بیشتری ساخته شود.
مثالها (EXAMPLES)
- •
- محاسبه
هزار صفر
نخست تابع
زتای ریمان
با استفاده
از گزینه --zeros
و چاپ
بخشهای
موهومی
آنها (پس
از بررسی
اینکه
بخشهای
حقیقی همه
آنها
یکدوم
است):
$ lcalc --zeros 1000
- •
- محاسبه
مقدار تابع
زتای ریمان
در x + iy با
استفاده از
گزینههای
--value، --x و --y:
$ lcalc --value --x=0.5 --y=14.134725141738
- •
- محاسبه ۱۰
صفر نخست
تابع L
تائوی
رامانوجان
با استفاده
از
گزینههای
--tau و --zeros (-z):
$ lcalc --tau --zeros=10
- •
- محاسبه
نخستین صفر
تابع L
دیریکله
درجه دوم
حقیقی با
هادی ۴ (conductor 4) پس
از استفاده
از
گزینههای
--twist-quadratic، --start و --finish
برای تعیین
تابع L:
$ lcalc --twist-quadratic --start=-4 --finish=-4 --zeros=1
قالب فایل داده (DATA FILE FORMAT)
گزینه lcalc -F به شما امکان میدهد دادههای تابع L را از یک فایل بارگذاری کنید. در اینجا ساختار این فایل را توضیح میدهیم. اساساً این فایل باید شامل معادله تابعی، ضرایب دیریکله و برخی اطلاعات مفید دیگر باشد.
خط نخست باید حاوی یک عدد صحیح باشد؛ یا 1، 2 یا 3: مقدار 1 مشخص میکند که ضرایب دیریکله به صورت اعداد صحیح (تا ۳۲ بیت) ارائه میشوند، 2 نشاندهنده اعداد ممیز شناور است و 3 نشاندهنده اعداد مختلط. بنابراین، برای نمونه، خط نخست برای تابع L فرم کاسپ (cusp form) یا فرم ماس (Maass form) برابر ۲ خواهد بود (ما تابع L را طوری نرمالسازی میکنیم که معادله تابعی s <-> 1-s باشد، در نتیجه ضرایب دیریکله نرمالشده برای یک تابع L فرم کاسپ عدد صحیح نخواهند بود).
خط دوم اطلاعاتی را مشخص میکند که ماشینحساب میتواند از آنها بهره ببرد (یا در آینده بهره خواهد برد). این یک عدد صحیح است که به انواع مختلف توابع L نسبت داده میشود. در حال حاضر:
- •
- -2 برای L(s,chi) اما در شرایطی که تعداد ضرایب محاسبهشده کمتر از دوره تناوب است
- •
- -1 برای زتا (zeta)
- •
- 0 برای ناشناخته
- •
- 1 برای متناوب، شامل L(s,chi)
- •
- 2 برای فرم کاسپ (در S_K(Gamma_0(N))
- •
- 3 برای فرم ماس برای SL_2(Z)
- •
- سایر اعداد
صحیح برای
انواع
آینده رزرو
شدهاند.
خط سوم یک عدد صحیح است که مشخص میکند چه تعداد از ضرایب دیریکله از فایل خوانده شوند؛ باید حداقل همین تعداد ضریب دیریکله در فایل وجود داشته باشد. این مقدار برای مشخص کردن بسیار کاربردی است، زیرا ممکن است فایل داده مثلاً یک میلیون ضریب داشته باشد، اما کاربر بخواهد تنها ده هزار مورد از آنها را بخواند.
خط چهارم اگر ضرایب دیریکله متناوب نباشند برابر 0 است، و در غیر این صورت یک عدد صحیح مثبت است که دوره تناوب را مشخص میکند (این حالت در توابع L دیریکله رخ میدهد). برای یک فرم ماس این مقدار باید 0 باشد.
خط پنجم یک عدد صحیح مثبت، یعنی شبهدرجه (quasi-degree) است. این مقدار، تعداد فاکتورهای گاما به شکل Gamma(gamma s + lambda) در معادله تابعی است، که در آن gamma یا 0.5 است یا 1، و lambda عددی مختلط با Re(lambda) >= 0 است. برای نمونه، این مقدار برای توابع L دیریکله برابر 1، برای توابع L فرم کاسپ 1، برای توابع L فرم ماس 2 و غیره است. توجه داشته باشید که مقدار "1" برای توابع L فرم کاسپ، چنانچه بخواهید فاکتور گاما را با استفاده از فرمول تکثیر لژاندر تفکیک کنید، میتواند "2" باشد؛ اما بهتر است این کار را انجام ندهید.
سپس فاکتورهای گاما میآیند که برای هر فاکتور گاما دو خط اختصاص داده میشود. خط اول از هر جفت خط شامل gamma (یا 0.5 یا 1) است، و خط دوم شامل یک جفت عدد ممیز شناور جدا شده با فاصله است که بخشهای حقیقی و موهومی lambda را مشخص میکند (حتی اگر کاملاً حقیقی باشد، lambda باید به صورت یک جفت عدد داده شود که در این حالت عدد دوم 0 خواهد بود).
سپس معادله تابعی را مشخص میکنید. فرض کنید
a
--------'
' | |
| |
Lambda(s) = Q^s | | Gamma(gamma_j*s + lambda_j)*L(s)
| |
j = 1در رابطه Lambda(s) = omega*conj(Lambda(1-conj(s))) صدق کند، که در آن Q یک عدد حقیقی، omega مختلط و "conj" نشاندهنده مزدوج مختلط است. توجه داشته باشید که معادله تابعی از s به 1-s است؛ بدین معنا که فاکتورهای گاما و ضرایب دیریکله L(s) باید به درستی نرمالسازی شوند تا خط بحرانی Re(s) = 1/2 حاصل گردد.
خط بعدی در فایل داده Q است که به صورت یک عدد ممیز شناور ارائه میشود، و خط بعد از آن omega را به صورت یک جفت عدد ممیز شناور x y شامل بخشهای حقیقی و موهومی omega ارائه میدهد (حتی زمانی که omega یک باشد، باید به صورت جفتی از اعداد ممیز شناور ارائه شود، برای نمونه 1 0 برای نشان دادن 1 + 0i).
باید احتمال وجود قطبها (poles) را در نظر گرفت. برای نمونه، اگر L(s) = zeta(s) باشد، آنگاه Lambda(s) دارای قطبهای ساده با مانده (residue) 1 در s=1 و مانده -1 در s=0 است. برای در نظر گرفتن چنین احتمالی فرض شده است که Lambda(s) حداکثر دارای قطبهای ساده باشد. بنابراین، خط بعدی تعداد قطبها را مشخص میکند (معمولاً 0) و سپس به ازای هر قطب دو خط وجود دارد. خط اول در هر جفت، قطب x+iy را به صورت یک جفت عدد ممیز شناور x y ارائه میدهد. خط دوم مانده در آن قطب را، باز هم به عنوان یک جفت عدد ممیز شناور، مشخص میکند.
در نهایت ضرایب دیریکله قرار دارند. خطوط باقیمانده در فایل شامل فهرستی از ضرایب دیریکله هستند، حداقل به همان تعدادی که در خط سوم فایل داده مشخص شده است. ضرایب میتوانند صحیح، حقیقی یا مختلط باشند. اگر مختلط باشند، طبق معمول باید به عنوان یک جفت عدد ممیز شناور x y جدا شده با یک فاصله ارائه گردند. در غیر این صورت باید به ترتیب به عنوان یک ستون منفرد از اعداد صحیح یا ممیز شناور ارائه شوند.
فایل داده باید تنها حاوی اعداد باشد و هیچ توضیحی (کامنت) نداشته باشد. توضیحات زیر صرفاً برای درک ساختار فایل داده آورده شدهاند.
یک نمونه فایل داده برای فرم ماس برای SL_2(Z) وابسته به مقدار ویژه با R = 13.779751351891 در زیر آمده است (توجه: ضرایب دیریکله برای این تابع L خاص تنها تا چند رقم اعشار دقیق هستند، به ویژه در نزدیکی انتهای فایل).
2 ضرایب دیریکله حقیقی هستند 3 این یک تابع L فرم ماس است 29900 استفاده از این تعداد از ضرایب دیریکله 0 صفر، زیرا ضرایب متناوب نیستند 2 دو فاکتور گاما .5 نخستین فاکتور گاما 0 6.88987567594535 نخستین lambda .5 دومین فاکتور گاما 0 -6.88987567594535 دومین lambda .3183098861837906715 مقدار Q در معادله تابعی 1 0 مقدار omega برابر 1 + 0i در معادله تابعی 0 تعداد قطبهای Lambda(s) 1 نخستین ضریب دیریکله 1.549304477941 دومین ضریب دیریکله 0.246899772454 سومین ضریب دیریکله 1.400344365369 چهارمین ضریب دیریکله ...
چندین نمونه از این فایلهای داده همراه با lcalc ارائه شدهاند..SH "گزارش باگها (BUGS)"
باگها را به https://gitlab.com/sagemath/lcalc/issues گزارش دهید.