1
Làm thế nào để tính khai triển Maclaurin của hàm $e^x$ trong C/C++?
0
Cộng đồng đã đăng:

Khai triển Maclaurin của hàm $e^x$ như sau:

$$ f(x) = 1 + \frac{x^1}{1!} + \frac{x^2}{2!} + ... + \frac{x^n}{n!} $$

Độ chính xác của giá trị tính được lệ thuộc vào số lần tính n, n càng lớn kết quả tính càng chính xác.

Viết hàm có tên emux trả giá trị về kiểu double và có 2 tham số (x kiểu doublen kiểu int), trong hàm main() dùng vòng lặp gọi hàm emux để kiểm tra tính chính xác khi n tăng dần.

thêm bình luận...
0
Hữu Long50 đã đăng:

Đọc bài toán của bạn thì mình hiểu vấn đề như sau, viết một chương trình sử dụng vòng lặp xuất ra dãy kết quả khai triển Maclaurin của $e^x$ theo $x$ và $n$, tại mỗi vòng lặp, dùng hàm emux() nhận vào $x$ và $n$ để tính giá trị của mỗi biểu thức $\frac{x^n}{n!}$, khi $n$ càng tăng chúng ta cần mở rộng độ chính xác của phép tính lên bởi vì khi $n$ càng tăng, kết quả phép tính sẽ càng bé.

Mình sử dụng C++, C cũng tương tự, chỉ cần thay các câu lệnh nhập xuất.

#include <iostream>
#include <math.h>
using namespace std;

double emux(double x, int n) {
    if (n == 0) return 1;

    // Tính lũy thừa ở tử số: x^n
    double numerator = pow(x, n);

    // Tính giai thừa ở mẫu số: n!
    double denominator = 1;
    for (int i = 1; i <= n; i++)
        denominator *= i;

    // Thực hiện phép chia giữa tử và mẫu
    double result = numerator / denominator;

    return result;
}

int main() {
    double x;
    int n;

    // Nhập vào x (không cần kiểm tra điều kiện với x)
    cout << "Nhap vao x = ";
    cin >> x;

    // Nhập vào số n
    do {
        cout << "Nhap vao n = ";
        cin >> n;

        if (n < 0)
            cout << "So n phai lon hoac bang 0, xin nhap lai.\n";

    } while (n < 0);

    // Xem chuỗi khai triển Maclaurin của e^x
    cout << "f(x) = 1 + ";
    for (int i = 1; i <= n; i++) {
        if (i < n)
            cout << "x^" << i << "/" << i << "!" << " + ";
        else
            cout << "x^" << i << "/" << i << "!" << endl;
    }

    // Chạy vòng lặp từ 0 đến n, mỗi lần chạy gọi hàm enumx để
    // tính giá trị của từng phần tử trong chuỗi và xuất ra kết quả
    // theo định dạng của chuỗi Maclaurin
    cout << "--------" << endl;
    for(int i = 0; i <= n; i ++){

        // Mở rộng độ chính xác của kết quả tính khi n tăng.
        cout.precision(i);

        if (i < n)
            cout << emux(x, i) << " + ";
        else
            cout << emux(x, i);
    }

    return 0;
}

Kết quả xuất ra màn hình Console:

Khai triển Maclaurin của hàm e^x trong C/C++

đã bổ sung 5.4 năm trước bởi
Avatar: B-Editor B-Editor0
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)