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

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

std::log10 cho số phức (header <complex>) tính logarit cơ số 10 của một số phức. Trả về giá trị chính (principal value).

Cú pháp

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

Công thức

log10(z) = log(z) / log(10)
         = ln(z) / ln(10)

Trong đó log(z) (hoặc ln(z)) là logarit tự nhiên phức:

log(z) = ln|z| + i*arg(z),  -π < arg(z) ≤ π

Ví dụ 1: 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 (góc phần tư 3)
    complex<double> result = log10(z);
    
    cout << "log10(" << z << ") = " << result << '\n';
    return 0;
}

Đầu ra

log10(-4,-1) = (0.615224,-1.25798)

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

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

int main() {
    complex<double> z(-4.0, 1.0); // -4 + i (góc phần tư 2)
    complex<double> result = log10(z);
    
    cout << "log10(" << z << ") = " << result << '\n';
    return 0;
}

Đầu ra

log10(-4,1) = (0.615224,1.25798)

Phân tích kết quả

Với z = -4 ± i:

  • Module: |z| = sqrt(16 + 1) = sqrt(17) ≈ 4.1231
  • Logarit tự nhiên module: ln(4.1231) ≈ 1.4166
  • Logarit cơ số 10 module: log10(4.1231) = ln(4.1231)/ln(10) ≈ 1.4166/2.3026 ≈ 0.6152 (phần thực)
  • Góc (argument): arg(-4 ± i) = ±(π - atan(1/4)) ≈ ±2.8966 rad
  • Phần ảo của log10: arg(z)/ln(10) ≈ ±2.8966/2.3026 ≈ ±1.2580

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';   // ln(z)
    cout << "log10(z)= " << log10(z) << '\n'; // log10(z)
    cout << "log(z)/log(10) = " << log(z)/log(10.0) << '\n'; // Verify
    return 0;
}

Đầu ra

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

Lưu ý

  • Nhánh cắt (branch cut) của log phức là trục thực âm. Kết quả có thể khác nhau tùy implementation khiargument gần -π.
  • log10(0) không xác định (trả về -inf hoặc ném exception).
  • Dùng std::log cho logarit tự nhiên, std::log10 cho cơ số 10.