cmath --- توابع ریاضی برای اعداد مختلط¶
این ماژول دسترسی به توابع ریاضی مربوط به اعداد مختلط را فراهم میکند. توابع این ماژول اعداد صحیح، اعداد ممیز شناور یا اعداد مختلط را بهعنوان آرگومان میپذیرند. این توابع همچنین هر شیء پایتونی را که دارای متد __complex__() یا __float__() باشد نیز میپذیرند: این متدها بهترتیب برای تبدیل شیء به عدد مختلط یا ممیز شناور استفاده میشوند و سپس تابع بر نتیجهی تبدیل اعمال میشود.
توجه
برای توابع دارای اسلایسهای شاخه، مسئلهی تصمیمگیری دربارهی نحوهی تعریف آن توابع روی خود اسلایس وجود دارد. با پیروی از مقالهی Kahan با عنوان «Branch cuts for complex elementary functions»، و همچنین پیوست G از C99 و استانداردهای بعدی C، از علامت صفر برای تمایز یک سمت اسلایس شاخه از سمت دیگر استفاده میکنیم: برای اسلایس شاخه در امتداد (بخشی از) محور حقیقی، علامت بخش موهومی را در نظر میگیریم، در حالی که برای اسلایس شاخه در امتداد محور موهومی، علامت بخش حقیقی را در نظر میگیریم.
برای مثال، تابع cmath.sqrt() دارای یک اسلایس شاخهای در امتداد محور حقیقی منفی است. با آرگومانی به مقدار -2-0j بهگونهای رفتار میشود که گویی در زیر اسلایس شاخهای قرار دارد، و بنابراین نتیجهای روی محور موهومی منفی میدهد:
>>> cmath.sqrt(-2-0j)
-1.4142135623730951j
اما آرگومانِ -2+0j بهگونهای رفتار میشود که گویی در بالای اسلایس شاخه (branch cut) قرار دارد:
>>> cmath.sqrt(-2+0j)
1.4142135623730951j
تبدیلها به مختصات قطبی و از مختصات قطبی |
|
فاز z را برمیگرداند |
|
بازگرداندن نمایش z در مختصات قطبی |
|
عدد مختلط z را با مختصات قطبی r و phi برمیگرداند |
|
توابع توانی و لگاریتمی |
|
e به توان z را برمیگرداند |
|
لگاریتم z را در مبنای base دادهشده برمیگرداند (بهطور پیشفرض e) |
|
لگاریتم z در مبنای ۱۰ را برمیگرداند |
|
ریشه دوم z را برمیگرداند |
|
توابع مثلثاتی |
|
آرککسینوس z را برمیگرداند |
|
برگرداندن سینوس معکوس z |
|
تانژانت معکوس z را برمیگرداند |
|
کسینوس z را برمیگرداند |
|
سینوس z را برمیگرداند |
|
تانژانت z را برمیگرداند |
|
توابع هذلولی |
|
بازگرداندن کسینوس هیپربولیک معکوس z |
|
سینوس هذلولی معکوس z را برمیگرداند |
|
تانژانت هیپربولیک معکوس z را برمیگرداند |
|
کسینوس هذلولی z را برمیگرداند |
|
سینوس هذلولی z را برمیگرداند |
|
تانژانت هیپربولیک z را برمیگرداند |
|
توابع طبقهبندی |
|
بررسی متناهی بودن همهی کامپوننتهای z |
|
بررسی کنید که آیا هیچیک از کامپوننتهای z بینهایت است یا خیر |
|
بررسی کنید که آیا یکی از کامپوننتهای z یک NaN است یا خیر |
|
بررسی کنید که آیا مقادیر a و b به یکدیگر نزدیک هستند |
|
ثابتها |
|
π = 3.141592... |
|
e = 2.718281... |
|
τ = 2π = 6.283185... |
|
بینهایت مثبت |
|
بینهایت موهومی خالص |
|
«عدد نامعتبر» (NaN) |
|
NaN موهومی خالص |
|
تبدیلها به مختصات قطبی و بالعکس¶
یک عدد مختلط در پایتون z بهصورت داخلی با استفاده از مختصات مستطیلی یا دکارتی ذخیره میشود. این عدد بهطور کامل توسط بخش حقیقی z.real و بخش موهومی z.imag آن تعیین میشود.
مختصات قطبی روشی جایگزین برای نمایش یک عدد مختلط ارائه میدهد. در مختصات قطبی، یک عدد مختلط z با اندازهی r و زاویهی فاز phi تعریف میشود. اندازهی r فاصلهی z تا مبدأ است، در حالی که فاز phi زاویهای در خلاف جهت عقربههای ساعت است که بر حسب رادیان، از محور x مثبت تا پارهخطی که مبدأ را به z متصل میکند، اندازهگیری میشود.
میتوان از توابع زیر برای تبدیل از مختصات مستطیلی ذاتی به مختصات قطبی و بالعکس استفاده کرد.
- cmath.phase(z)¶
فاز z (که همچنین بهعنوان آرگومان z نیز شناخته میشود) را بهصورت یک شناور برمیگرداند.
phase(z)معادلmath.atan2(z.imag, z.real)است. نتیجه در بازهی [-π, π] قرار دارد و اسلایس شاخهی این عملیات در امتداد محور حقیقی منفی قرار دارد. علامت نتیجه همان علامتz.imagاست، حتی زمانی کهz.imagصفر باشد:>>> phase(-1+0j) 3.141592653589793 >>> phase(-1-0j) -3.141592653589793
توجه
مدول (قدر مطلق) یک عدد مختلط z را میتوان با استفاده از تابع توکار abs() محاسبه کرد. برای این عملیات، تابع جداگانهای در ماژول cmath وجود ندارد.
- cmath.polar(z)¶
بازگرداندن نمایش z در مختصات قطبی. یک جفت
(r, phi)برمیگرداند که در آن r اندازهی z و phi فاز z است.polar(z)معادل(abs(z), phase(z))است.
- cmath.rect(r, phi)¶
عدد مختلط z با مختصات قطبی r و phi را برمیگرداند. معادل
complex(r * math.cos(phi), r * math.sin(phi))است.
توابع توانی و لگاریتمی¶
- cmath.exp(z)¶
مقدار e به توان z را برمیگرداند، که e پایهی لگاریتم طبیعی است.
- cmath.log(z[, base])¶
لگاریتم z را در base دادهشده برمیگرداند. اگر base مشخص نشده باشد، لگاریتم طبیعی z را برمیگرداند. یک اسلایس شاخه (branch cut) از ۰ در امتداد محور حقیقی منفی تا -∞ وجود دارد.
توابع مثلثاتی¶
- cmath.acos(z)¶
آرککسینوس z را برمیگرداند. دو اسلایس شاخه وجود دارد: یکی از ۱ به سمت راست در امتداد محور حقیقی تا ∞ ادامه دارد. دیگری از -۱ به سمت چپ در امتداد محور حقیقی تا -∞ ادامه دارد.
- cmath.atan(z)¶
آرکتانژانت z را برمیگرداند. دو اسلایس شاخه وجود دارد: یکی از
1jدر امتداد محور موهومی تا∞jادامه دارد. دیگری از-1jدر امتداد محور موهومی تا-∞jادامه دارد.
- cmath.cos(z)¶
کسینوس z را برمیگرداند.
- cmath.sin(z)¶
سینوس z را برمیگرداند.
- cmath.tan(z)¶
تانژانت z را برمیگرداند.
توابع هذلولی¶
- cmath.acosh(z)¶
کسینوس هیپربولیک معکوس z را برمیگرداند. یک اسلایس شاخه وجود دارد که از ۱ به سمت چپ در امتداد محور حقیقی تا -∞ ادامه دارد.
- cmath.asinh(z)¶
سینوس هذلولی معکوس z را برمیگرداند. دو اسلایس شاخه وجود دارد: یکی از
1jدر امتداد محور موهومی تا∞jکشیده شده است. دیگری از-1jدر امتداد محور موهومی تا-∞jکشیده شده است.
- cmath.atanh(z)¶
تانژانت هیپربولیک معکوس z را بازمیگرداند. دو اسلایس شاخه وجود دارد: یکی از
1در امتداد محور حقیقی تا∞ادامه دارد. دیگری از-1در امتداد محور حقیقی تا-∞ادامه دارد.
- cmath.cosh(z)¶
کسینوس هذلولی z را برمیگرداند.
- cmath.sinh(z)¶
سینوس هذلولی z را برمیگرداند.
- cmath.tanh(z)¶
تانژانت هذلولی z را برمیگرداند.
توابع طبقهبندی¶
- cmath.isfinite(z)¶
اگر هر دو بخش حقیقی و موهومی z متناهی باشند،
Trueو در غیر این صورتFalseرا برمیگرداند.اضافه شده در نسخهی 3.2.
- cmath.isinf(z)¶
اگر بخش حقیقی یا موهومی z بینهایت باشد،
Trueرا برمیگرداند و در غیر این صورتFalseرا برمیگرداند.
- cmath.isnan(z)¶
اگر بخش حقیقی یا موهومی z برابر با NaN باشد،
Trueو در غیر این صورتFalseبرمیگرداند.
- cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)¶
اگر مقادیر a و b به یکدیگر نزدیک باشند،
Trueو در غیر این صورتFalseبرمیگرداند.نزدیک بودن یا نبودن دو مقدار بر اساس تحملهای مطلق و نسبی دادهشده تعیین میشود. اگر هیچ خطایی رخ ندهد، نتیجه بهصورت زیر خواهد بود:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol).rel_tol مدارای نسبی است — این مقدار حداکثر اختلاف مجاز بین a و b، نسبت به قدر مطلق بزرگتر بین a و b است. برای مثال، برای تنظیم مدارای ۵٪، مقدار
rel_tol=0.05را ارسال کنید. مدارای پیشفرض1e-09است، که تضمین میکند دو مقدار تا حدود ۹ رقم اعشاری یکسان باشند. rel_tol باید غیرمنفی و کمتر از1.0باشد.abs_tol تحمل مطلق است؛ پیشفرض آن
0.0است و باید غیرمنفی باشد. هنگامی کهxرا با0.0مقایسه میکنید،isclose(x, 0)بهصورتabs(x) <= rel_tol * abs(x)محاسبه میشود، که برای هرxو rel_tol کمتر از1.0،Falseاست. بنابراین آرگومان abs_tol مثبت مناسبی به فراخوانی اضافه کنید.مقادیر ویژهی IEEE 754 یعنی
NaN،infو-infطبق قوانین IEEE مدیریت میشوند. بهطور مشخص،NaNنزدیک به هیچ مقدار دیگری، از جملهNaN، در نظر گرفته نمیشود.infو-infتنها به خودشان نزدیک در نظر گرفته میشوند.اضافه شده در نسخهی 3.5.
همچنین ملاحظه نمائید
PEP 485 -- تابعی برای آزمون برابری تقریبی
ثابتها¶
- cmath.pi¶
ثابت ریاضی π، بهعنوان یک عدد اعشاری .
- cmath.e¶
ثابت ریاضی e، بهعنوان یک float.
- cmath.tau¶
ثابت ریاضی τ، بهصورت یک عدد اعشاری.
اضافه شده در نسخهی 3.6.
- cmath.inf¶
بینهایت مثبت از نوع ممیز شناور. معادل
float('inf').اضافه شده در نسخهی 3.6.
- cmath.infj¶
عدد مختلط با بخش حقیقی صفر و بخش موهومی بینهایت مثبت. معادل
complex(0.0, float('inf')).اضافه شده در نسخهی 3.6.
- cmath.nan¶
یک مقدار ممیز شناور «نه یک عدد» (NaN). معادل
float('nan'). همچنینmath.nanرا ببینید.اضافه شده در نسخهی 3.6.
- cmath.nanj¶
عدد مختلط با بخش حقیقی صفر و بخش موهومی NaN. معادل با
complex(0.0, float('nan')).اضافه شده در نسخهی 3.6.
توجه داشته باشید که انتخاب توابع مشابه، اما نه یکسان، با انتخاب توابع در ماژول math است. دلیل وجود دو ماژول این است که برخی کاربران علاقهای به اعداد مختلط ندارند، و شاید حتی ندانند این اعداد چه هستند. آنها ترجیح میدهند math.sqrt(-1) بهجای برگرداندن یک عدد مختلط، یک استثنا پرتاب کند. همچنین توجه داشته باشید که توابع تعریفشده در cmath همیشه یک عدد مختلط برمیگردانند، حتی اگر پاسخ بتواند بهصورت یک عدد حقیقی بیان شود (در این حالت عدد مختلط دارای بخش موهومی صفر است).
نکتهای دربارهی اسلایسهای شاخه (branch cuts): اینها منحنیهایی هستند که تابع دادهشده در امتداد آنها پیوسته نیست. آنها ویژگی ضروری بسیاری از توابع مختلط هستند. فرض بر این است که اگر نیاز به محاسبه با توابع مختلط دارید، دربارهی اسلایسهای شاخه آگاه خواهید بود. برای روشن شدن موضوع، تقریباً به هر کتابی (نه خیلی مقدماتی) دربارهی متغیرهای مختلط مراجعه کنید. برای اطلاع از انتخاب مناسب اسلایسهای شاخه برای اهداف عددی، یک مرجع خوب باید مورد زیر باشد:
همچنین ملاحظه نمائید
Kahan، W: برشهای شاخهای برای توابع ابتدایی مختلط؛ یا، هیاهوی بسیار بر سر بیت علامت هیچ. در Iserles، A. و Powell، M. (ویراستاران)، وضعیت کنونی تحلیل عددی. انتشارات Clarendon (۱۹۸۷)، صص. ۱۶۵--۲۱۱.