Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm log() cho số phức trong C++

std::log cho số phức (header <complex>) tính logarit tự nhiên (natural logarithm, ln) của một số phức. Trả về giá trị chính (principal value).

Cú pháp

template<class T> complex<T> log(const complex<T>& z);

Công thức toán học

Với z = x + iy = r·e^(iθ) (dạng cực), trong đó r = |z| ≥ 0, θ = arg(z) ∈ (-π, π]:

log(z) = ln(r) + iθ
       = ln|z| + i·arg(z)

Ví dụ 1: Số phức góc phần tư 2

#include <bits/stdc++.h>
using namespace std;

int main() {
    complex<double> z(-7.0, 1.0); // -7 + i
    complex<double> result = log(z);
    
    cout << "log(" << z << ") = " << result << '\n';
    return 0;
}

Đầu ra

log(-7,1) = (1.95601,2.9997)

Ví dụ 2: Số phức góc phần tư 3

#include <bits/stdc++.h>
using namespace std;

int main() {
    complex<double> z(-4.0, -1.0); // -4 - i
    complex<double> result = log(z);
    
    cout << "log(" << z << ") = " << result << '\n';
    return 0;
}

Đầu ra

log(-4,-1) = (1.41661,-2.89661)

Phân tích ví dụ 2

  • z = -4 - i
  • Module: |z| = sqrt(16 + 1) = sqrt(17) ≈ 4.1231
  • ln|z| = ln(4.1231) ≈ 1.41661 (phần thực)
  • Góc: arg(z) = -π + atan(1/4) ≈ -2.89661 rad (phần ảo)

Các hàm logarit phức liên quan

HàmCơ sốHeader
log(z)e (tự nhiên)<complex>
log10(z)10<complex>
log2(z)2C++26 (dự kiến) / tự cài đặt

Mối quan hệ: log10(z) = log(z) / log(10), log2(z) = log(z) / log(2).

Ví dụ so sánh log vs log10

#include <bits/stdc++.h>
using namespace std;

int main() {
    complex<double> z(-4.0, -1.0);
    cout << "log(z)   = " << log(z) << '\n';
    cout << "log10(z) = " << log10(z) << '\n';
    cout << "log(z)/ln(10) = " << log(z)/log(10.0) << '\n';
    return 0;
}

Đầu ra

log(z)   = (1.41661,-2.89661)
log10(z) = (0.615224,-1.25798)
log(z)/ln(10) = (0.615224,-1.25798)

Lưu ý quan trọng

  • Branch cut: Trục thực âm (real(z) < 0, imag(z) = 0). Khi qua nhánh cắt, phần ảo nhảy từ +π xuống -π.
  • log(0): Không xác định, thường trả về complex(-inf, 0) hoặc ném exception.
  • Khác với std::log(double) trong <cmath> (chỉ cho số thực dương).