PDA

View Full Version : تابع معكوس گاما



farmande
سه شنبه 21 خرداد 1392, 18:14 عصر
سلام دوستان برنامه نويس
من مشغول شبيه سازي يك شبكه با شبيه ساز امنت هستم كه از زبان C++‎ پشتيباني ميكند
حال مشكلي دارم اين است كه نياز به استفاده از تابع معكوس گاما دارم(Inverse Gamma).
در نرم افزار متلب اين تابه با سه آرگمان ورودي هست اما در شبيه ساز امنت تنها خود تابع گاما هست
راهنماييم كنيد:
1- آيا تابعي كه من مي خوام تو كتابخونه C++ وجود داره ( كدوم كتابخونه؟)
2- اگر وجود نداره كسي كدشو داره؟
ممنون

darknes666
سه شنبه 21 خرداد 1392, 19:35 عصر
سلام دوست عزیز.
دقت کارت باید تا چند رقم اعشار باشه؟
از کدوم تابع گاما میخوای استفاده کنی؟
1پارامتری
یا
2پارامتری که خودش دو نوع upper و lower داره
اول اینا رو مشخص کن :لبخندساده:

darknes666
سه شنبه 21 خرداد 1392, 19:57 عصر
حالا تا شما بگین من یه سری مطالب راجبش میگم.

تابع گاما در ریاضی به شکل زیر تعریف میشه:
http://www.8pic.ir/images/25864319585142877176.png

خب اونایی که راجب فاکتوریل تو کتاب های ناقص وزارتی خوندن شاید ندونن.
اما فاکتوریل نه تنها برای اعداد حقیقی بلکه برای اعداد مختلط هم تعریف شده و نحوه ی محاسبش رو اونایی که با حد اشنایی دارن میتونن متوجه بشن.
مثلا تابع گاما برای 1 میشه 1 و برای 2 میشه 2 و برای 3 میشه 6 و الی اخر....

خب حالا اگر یکی بخواد تابع گاما رو محاسبه کنه(تو C++‎‎‎‎‎) باید از سری های توانی استفاده کنه سری توانی تابع گاما به شکل:
http://www.8pic.ir/images/36321568817473192505.png
(e همون عدد نپر هست)
و نماد y هم خودش با یه سری دیگه محاسبه میشه.با حد و انتگرال میشه این مقدار رو پیدا کرد:
http://www.8pic.ir/images/18435693840728331549.png
که به طور تقریبی میشه 0.577215664901532860606512090082402431042159335939
خب حالا معکوس گاما اینجوری میشه:
http://www.8pic.ir/images/74633894058665926327.png

خلاصه این که باید از این سری های توانی و سری های دیگه استفاده کنی.

و حالا دوست عزیز بهتر اول عنوان تاپیک رو درست مینوشتی چون اون تابعی که از نوع گاماست و دوتا پارامتر داره اسمش Incomplete gamma هست.

خیلی خوب بریم سراغ Incomplete gamma
این تابع دو نوع upper و lower داره.
این دوتابع به شکل زیر تعریف و محاسبه میشه:
http://www.8pic.ir/images/05450988316059728810.png
اما خوب بازم از سری های توانی برای محاسبه ی این دو تابع استفاده کنین که به قرار زیر هست:
1)upper
خوب از الگوی زیر بهره بگیرین
http://www.8pic.ir/images/03019784322691245136.png
از این الگو به صورت بازگشتی استفاده کنین.
یا
http://www.8pic.ir/images/47746015201116015695.png
2)lower
سری توانیش به شکل زیر هست(که استفاده از اون نسبت به بقیه راحت تر هست):
http://www.8pic.ir/images/70164526846455723763.png

حالا دیگه حوصله میخواد تا بشینین و با C++‎ بنویسین.
موفق باشین.

darknes666
سه شنبه 21 خرداد 1392, 20:32 عصر
و در اخر اگر علاقه ای به صرف وقت و درک کدها نداری برو به اینجا
http://www.johndcook.com/cpp_gamma.html

Gamma.hوGamma.cpp رو در کنار کامپایلرت استفاده کن.

hadi0x7c7
چهارشنبه 22 خرداد 1392, 00:50 صبح
نه خداییش این چیزا رو یه آدم 15 ساله میفهمه ؟

farmande
چهارشنبه 22 خرداد 1392, 13:27 عصر
ممنون دستت درد نكنه وقت گذاشتي
اون كد منم پيدا كردم
اما يه مسيله جديد برخوردم
خروجي اين تابع در نرم افزار متلب با خروجي آن تو ++C متفاوته!!!!

darknes666
چهارشنبه 22 خرداد 1392, 13:33 عصر
به خاطر همین پرسیدم دقت اعشار باید چقدر باشه.
چون ما باید تعداد جمله ها رو به بی نهایت میل بدیم به خاطر همین هر نرم افزار یه جور خروجی میده حتی اگر تعداد جمله ها تو یکی 20 عدد کمتر از اون یکی باشه
تفاوت رو میتونی حس کنی.
بسته به دقتی که میخوای باید از یکی استفاده کنی.
از طرفی اینجا خود y و e(عدد نپر) عدد گنگ هستن.پس دقت خیلی افت پیدا میکنه.