対数関数
指数関数の逆関数だから、
とおいて、
atan2は便宜的に使った。
だから、
ところが、atan2は周期2πの多価関数だから、logも同様となる。
例えば、を考えると、
となるが、同時に、
となるため、は多価関数である。
プログラムとして、
返り値が複数あるのでは成り立たないため、
代表的な値をとる。
これを主値と呼ぶ。
C++ではどうなっているのかというと、
#include
#include
#includeusing namespace std;
typedef complex
cplx; void main(void) {
cout << log(cplx(-1, 0)) << endl; // (0,3.14159)
cout << log(cplx(-1, -1)) << endl; // (0.346574,-2.35619)
}
虚部θは、-π<θ≦πとなっているようである。
すなわち、atan2がそのまま使える。
import std.cstream;
import std.math;void main(char[][] args) {
dout.writefln(log(-1+0i)); // 0+3.14159i
dout.writefln(log(-1-1i)); // 0.346574+-2.35619i
}cdouble log(cdouble z) {
double x = z.re;
double y = z.im;
return std.math.log(x * x + y * y) / 2 + 1i * atan2(y, x);
}