رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
کامبیز اسدزاده

توابع ریاضی ویژه در استاندارد ۱۷ از سی‌پلاس‌پلاس


امتیاز دادن به این موضوع:

پست های پیشنهاد شده

در این مقاله نیاز است بدانید که، کتابخانهٔ توابع ویژه ریاضی در اصل بخشی از کتابخانه TR1 ISO / IEC TR 19768: 2007 بود، سپس به عنوان یک استاندارد ISO مستقل، ISO / IEC 29124: 2010 منتشر شد و در نهایت از C++ 17 به استاندارد ایزو ادغام شد.

برای استفاده از توابع ریاضیاتی مانند هرمیتی، بسل و غیره کافی است فایل سرآیند <cmath> را فراخوانی کنید.

به عنوان مثال توابع چند‌جمله‌ای لگر به صورت زیر می‌توانند مورد استفاده قرار گیرند:

#include <cmath>
#include <iostream>

double L1(unsigned m, double x) { return -x + m + 1; }
double L2(unsigned m, double x) { return 0.5*(x*x-2*(m+2)*x+(m+1)*(m+2)); }

int main()
{
    // spot-checks
    std::cout << std::assoc_laguerre(1, 10, 0.5) << '=' << L1(10, 0.5) << '\n'
              << std::assoc_laguerre(2, 10, 0.5) << '=' << L2(10, 0.5) << '\n';
}

مثالی از کاربرد توابع چندجمله‌ای‌های لژاندر bd51c7228067db4bea119843fb19c6caab834954:

#include <cmath>
#include <iostream>
double P20(double x) { return 0.5*(3*x*x-1); }
double P21(double x) { return 3.0*x*std::sqrt(1-x*x); }
double P22(double x) { return 3*(1-x*x); }
int main()
{
    // spot-checks
    std::cout << std::assoc_legendre(2, 0, 0.5) << '=' << P20(0.5) << '\n'
              << std::assoc_legendre(2, 1, 0.5) << '=' << P21(0.5) << '\n'
              << std::assoc_legendre(2, 2, 0.5) << '=' << P22(0.5) << '\n';
}

نحوهٔ استفاده از توابع بتا 72079677c102d13255997ca503995071751bc415

#include <cmath>
#include <string>
#include <iostream>
#include <iomanip>

double binom(int n, int k) { return 1/((n+1)*std::beta(n-k+1,k+1)); }

int main()
{
    std::cout << "Pascal's triangle:\n";
    for(int n = 1; n < 10; ++n) {
        std::cout << std::string(20-n*2, ' ');
        for(int k = 1; k < n; ++k)
            std::cout << std::setw(3) << binom(n,k) << ' ';
        std::cout << '\n';
    }
}

اطلاعات بیشتر از این تابع، در این لینک.

نحوهٔ استفاده از توابع انتگرال بیضوی نوع اول 8c44bc76409dc7c70cedbd000891b672bede1487 :

#include <cmath>
#include <iostream>

int main()
{
    double hpi = std::acos(-1)/2;

    std::cout << "K(0) = " << std::comp_ellint_1(0) << '\n'
              << "π/2 = " << hpi << '\n'
              << "K(0.5) = " << std::comp_ellint_1(0.5) << '\n'
              << "F(0.5, π/2) = " << std::ellint_1(0.5, hpi) << '\n';
    std::cout << "Period of a pendulum length 1 m at 90° initial angle is "
              << 4*std::sqrt(1/9.80665)*
                 std::comp_ellint_1(std::pow(std::sin(hpi/2),2)) << " s\n";
}

اطلاعات بیشتر از این تابع، در این لینک.

نحوهٔ استفاده از توابع انتگرال بیضوی نوع دوم f1bcc3ab6912f07c1fefa24902e3c7b793b886fb :

#include <cmath>
#include <iostream>

int main()
{
    double hpi = std::acos(-1)/2;

    std::cout << "E(0) = " << std::comp_ellint_2(0) << '\n'
              << "π/2 = " << hpi << '\n'
              << "E(1) = " << std::comp_ellint_2(1) << '\n'
              << "E(1, π/2) = " << std::ellint_2(1, hpi) << '\n';
}

اطلاعات بیشتر از این تابع، در این لینک.

نحوهٔ استفاده از توابع انتگرال بیضوی نوع سوم 50b0c46b333ed1f25110f8fbfcf6d01ee7275277 :

#include <cmath>
#include <iostream>

int main()
{
    std::cout << std::fixed
              << "Π(0.5,0) = " << std::comp_ellint_3(0.5, 0) << '\n'
              << "K(0.5)   = " << std::comp_ellint_1(0.5) << '\n'
              << "Π(0,0)   = " << std::comp_ellint_3(0, 0) << '\n'
              << "π/2      = " << std::acos(-1)/2 << '\n'
              << "Π(0.5,1) = " << std::comp_ellint_3(0.5, 1) << '\n';
}

اطلاعات بیشتر از این تابع، در این لینک.

نحوهٔ استفاده از توابع بسل نوع اول ed47616b50abbef012a9a4e0069b50d4894ac320 :

#include <cmath>
#include <iostream>

int main()
{
    // spot check for ν == 0
    double x = 1.2345;
    std::cout << "I_0(" << x << ") = " << std::cyl_bessel_i(0, x) << '\n';
 
    // series expansion for I_0
    double fct = 1;
    double sum = 0;
    for(int k = 0; k < 5; fct*=++k) {
        sum += std::pow((x/2),2*k) / std::pow(fct,2);
        std::cout << "sum = " << sum << '\n';
    }        
}

اطلاعات بیشتر از این تابع، در این لینک.

نحوهٔ استفاده از توابع بسل نوع دوم ff32812f22090cd5898d99213a194f53c511387c :

#include <cmath>
#include <iostream>

int main()
{
    // spot check for ν == 0
    double x = 1.2345;
    std::cout << "J_0(" << x << ") = " << std::cyl_bessel_j(0, x) << '\n';
 
    // series expansion for J_0
    double fct = 1;
    double sum = 0;
    for(int k = 0; k < 6; fct*=++k) {
        sum += std::pow(-1, k)*std::pow((x/2),2*k) / std::pow(fct,2);
        std::cout << "sum = " << sum << '\n';
    }        
}

اطلاعات بیشتر از این تابع، در این لینک.

همچنین در مورد توابع دیگر مانند هرمیتی و غیره می‌توانید از مرجع آن استفاده کنید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
مهمان
این موضوع برای عدم ارسال قفل گردیده است.

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...