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àm | Cơ số | Header |
|---|---|---|
log(z) | e (tự nhiên) | <complex> |
log10(z) | 10 | <complex> |
log2(z) | 2 | C++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).