Spec-Zone.ru › D

std.complex

В этом модуле содержится тип Complex, используемый для представления комплексных чисел, а также связанные математические операции и функции.

Complex в конечном итоге заменит встроенные типы cfloat, cdouble, creal, ifloat, idouble, и ireal.

Авторы:
Lars Tandle Kyllingstad, Don Clugston
Лицензия:
Boost License 1.0
Источник
std/complex.d
pure nothrow @nogc @safe auto complex(R)(const R re)
Constraints: if (is(R : double));

pure nothrow @nogc @safe auto complex(R, I)(const R re, const I im)
Constraints: if (is(R : double) && is(I : double));

Вспомогательная функция, возвращающая комплексное число с заданными действительной и мнимой частями.

Параметры:
R (параметр шаблона) тип действительной части комплексного числа
I (параметр шаблона) тип мнимой части комплексного числа
R re действительная часть комплексного числа, подлежащего построению
I im (необязательно) мнимая часть комплексного числа, 0, если опущено.
Возвращает:
Complex экземпляр с действительной и мнимой частями, установленными в значения, предоставленные в качестве входных данных. Если ни re ни im не являются числами с плавающей точкой, тип возвращаемого значения будет Complex!double. В противном случае тип возвращаемого значения выводится с помощью std.traits.CommonType!(R, I).
Примеры:
auto a = complex(1.0);
static assert(is(typeof(a) == Complex!double));
writeln(a.re); // 1.0
writeln(a.im); // 0.0

auto b = complex(2.0L);
static assert(is(typeof(b) == Complex!real));
writeln(b.re); // 2.0L
writeln(b.im); // 0.0L

auto c = complex(1.0, 2.0);
static assert(is(typeof(c) == Complex!double));
writeln(c.re); // 1.0
writeln(c.im); // 2.0

auto d = complex(3.0, 4.0L);
static assert(is(typeof(d) == Complex!real));
writeln(d.re); // 3.0
writeln(d.im); // 4.0L

auto e = complex(1);
static assert(is(typeof(e) == Complex!double));
writeln(e.re); // 1
writeln(e.im); // 0

auto f = complex(1L, 2);
static assert(is(typeof(f) == Complex!double));
writeln(f.re); // 1L
writeln(f.im); // 2

auto g = complex(3, 4.0L);
static assert(is(typeof(g) == Complex!real));
writeln(g.re); // 3
writeln(g.im); // 4.0L
struct Complex(T) if (isFloatingPoint!T);

Комплексное число, параметризованное типом T, который должен быть либо float, либо double, либо real.

T re;

Действительная часть числа.

T im;

Мнимая часть числа.

const @safe string toString();

const void toString(Writer, Char)(scope Writer w, ref scope const FormatSpec!Char formatSpec)
Constraints: if (isOutputRange!(Writer, const(Char)[]));

Преобразует комплексное число в строковое представление.

Вторая форма этой функции обычно не вызывается напрямую; вместо этого она используется через std.string.format, как показано в примерах ниже. Поддерживаемые символы формата: 'e', 'f', 'g', 'a' и 's'.

См. документацию std.format и std.string.format для получения дополнительной информации.

Примеры:
auto c = complex(1.2, 3.4);

// Vanilla toString formatting:
writeln(c.toString()); // "1.2+3.4i"

// Formatting with std.string.format specs: the precision and width
// specifiers apply to both the real and imaginary parts of the
// complex number.
import std.format : format;
writeln(format("%.2f", c)); // "1.20+3.40i"
writeln(format("%4.1f", c)); // " 1.2+ 3.4i"
this(R : T)(Complex!R z);

this(Rx : T, Ry : T)(const Rx x, const Ry y);

this(R : T)(const R r);

Создает комплексное число с указанными действительной и мнимой частями. В случае, если передается единственный аргумент, который не является комплексным, мнимая часть результата будет равна нулю.

pure nothrow @nogc @safe T abs(T)(Complex!T z);
Параметры:
Complex!T z Комплексное число.
Возвращает:
Модуль (или абсолютное значение) z.
Примеры:
static import std.math;
writeln(abs(complex(1.0))); // 1.0
writeln(abs(complex(0.0, 1.0))); // 1.0
writeln(abs(complex(1.0L, -2.0L))); // std.math.sqrt(5.0L)
pure nothrow @nogc @safe T sqAbs(T)(Complex!T z);

pure nothrow @nogc @safe T sqAbs(T)(const T x)
Constraints: if (isFloatingPoint!T);
Параметры:
Complex!T z Комплексное число.
T x Действительное число.
Возвращает:
Квадрат модуля z. Для универсальности, если вызывается для вещественного числа, возвращает его квадрат.
Примеры:
import std.math;
writeln(sqAbs(complex(0.0))); // 0.0
writeln(sqAbs(complex(1.0))); // 1.0
writeln(sqAbs(complex(0.0, 1.0))); // 1.0
assert(approxEqual(sqAbs(complex(1.0L, -2.0L)), 5.0L));
assert(approxEqual(sqAbs(complex(-3.0L, 1.0L)), 10.0L));
assert(approxEqual(sqAbs(complex(1.0f,-1.0f)), 2.0f));
pure nothrow @nogc @safe T arg(T)(Complex!T z);
Параметры:
Complex!T z Комплексное число.
Возвращает:
Аргумент (или фаза) z.
Примеры:
import std.math;
writeln(arg(complex(1.0))); // 0.0
writeln(arg(complex(0.0L, 1.0L))); // PI_2
writeln(arg(complex(1.0L, 1.0L))); // PI_4
pure nothrow @nogc @safe T norm(T)(Complex!T z);

Извлекает норму комплексного числа.

Параметры:
Complex!T z Комплексное число
Возвращает:
Квадрат модуля z.
Примеры:
import std.math : isClose, PI;
writeln(norm(complex(3.0, 4.0))); // 25.0
writeln(norm(fromPolar(5.0, 0.0))); // 25.0
assert(isClose(norm(fromPolar(5.0L, PI / 6)), 25.0L));
assert(isClose(norm(fromPolar(5.0L, 13 * PI / 6)), 25.0L));
pure nothrow @nogc @safe Complex!T conj(T)(Complex!T z);
Параметры:
Complex!T z Комплексное число.
Возвращает:
Комплексно сопряженное число z.
Примеры:
writeln(conj(complex(1.0))); // complex(1.0)
writeln(conj(complex(1.0, 2.0))); // complex(1.0, -2.0)
Complex!T proj(T)(Complex!T z);

Возвращает проекцию z на сферу Римана.

Параметры:
Complex!T z Комплексное число
Возвращает:
Проекция z на сферу Римана.
Примеры:
writeln(proj(complex(1.0))); // complex(1.0)
writeln(proj(complex(double.infinity, 5.0))); // complex(double.infinity, 0.0)
writeln(proj(complex(5.0, -double.infinity))); // complex(double.infinity, -0.0)
pure nothrow @nogc @safe Complex!(CommonType!(T, U)) fromPolar(T, U)(const T modulus, const U argument);

Строит комплексное число по его модулю и аргументу.

Параметры:
T modulus Модуль
U argument Аргумент
Возвращает:
Комплексное число с заданным модулем и аргументом.
Примеры:
import std.math;
auto z = fromPolar(std.math.sqrt(2.0), PI_4);
assert(approxEqual(z.re, 1.0L, real.epsilon));
assert(approxEqual(z.im, 1.0L, real.epsilon));
pure nothrow @nogc @safe Complex!T sin(T)(Complex!T z);

pure nothrow @nogc @safe Complex!T cos(T)(Complex!T z);

pure nothrow @nogc @safe Complex!T tan(T)(Complex!T z);

Тригонометрические функции для комплексных чисел.

Параметры:
Complex!T z Комплексное число.
Возвращает:
Синус, косинус и тангенс z, соответственно.
Примеры:
static import std.math;
writeln(sin(complex(0.0))); // 0.0
writeln(sin(complex(2.0, 0))); // std.math.sin(2.0)
Примеры:
static import std.math;
writeln(cos(complex(0.0))); // 1.0
writeln(cos(complex(1.3, 0.0))); // std.math.cos(1.3)
writeln(cos(complex(0.0, 5.2))); // std.math.cosh(5.2)
Примеры:
static import std.math;
assert(ceqrel(tan(complex(1.0, 0.0)), complex(std.math.tan(1.0), 0.0)) >= double.mant_dig - 2);
assert(ceqrel(tan(complex(0.0, 1.0)), complex(0.0, std.math.tanh(1.0))) >= double.mant_dig - 2);
pure nothrow @nogc @trusted Complex!real expi(real y);
Параметры:
real y Действительное число.
Возвращает:
Значение cos(y) + i sin(y).
Примечание
expi включена для удобства и для легкой миграции кода.
Примеры:
import std.math : cos, sin;
writeln(expi(0.0L)); // 1.0L
writeln(expi(1.3e5L)); // complex(cos(1.3e5L), sin(1.3e5L))
pure nothrow @nogc @safe Complex!real coshisinh(real y);
Параметры:
real y Действительное число.
Возвращает:
Значение cosh(y) + i sinh(y)
Примечание
coshisinh включена для удобства и для легкой миграции кода.
Примеры:
import std.math : cosh, sinh;
writeln(coshisinh(3.0L)); // complex(cosh(3.0L), sinh(3.0L))
pure nothrow @nogc @safe Complex!T sqrt(T)(Complex!T z);
Параметры:
Complex!T z Комплексное число.
Возвращает:
Квадратный корень из z.
Примеры:
static import std.math;
writeln(sqrt(complex(0.0))); // 0.0
writeln(sqrt(complex(1.0L, 0))); // std.math.sqrt(1.0L)
writeln(sqrt(complex(-1.0L, 0))); // complex(0, 1.0L)
writeln(sqrt(complex(-8.0, -6.0))); // complex(1.0, -3.0)
pure nothrow @nogc @trusted Complex!T exp(T)(Complex!T x);

Вычисляет ex.

Параметры:
Complex!T x Комплексное число
Возвращает:
Комплексное экспоненциальное число e в степени x
Специальные значения
x exp(x)
(±0, +0) (1, +0)
(any, +∞) (NAN, NAN)
(any, NAN) (NAN, NAN)
(+∞, +0) (+∞, +0)
(-∞, any) (±0, cis(x.im))
(+∞, any) (±∞, cis(x.im))
(-∞, +∞) (±0, ±0)
(+∞, +∞) (±∞, NAN)
(-∞, NAN) (±0, ±0)
(+∞, NAN) (±∞, NAN)
(NAN, +0) (NAN, +0)
(NAN, any) (NAN, NAN)
(NAN, NAN) (NAN, NAN)
Примеры:
import std.math : isClose, PI;

writeln(exp(complex(0.0, 0.0))); // complex(1.0, 0.0)

auto a = complex(2.0, 1.0);
writeln(exp(conj(a))); // conj(exp(a))

auto b = exp(complex(0.0L, 1.0L) * PI);
assert(isClose(b, -1.0L, 0.0, 1e-15));
pure nothrow @nogc @safe Complex!T log(T)(Complex!T x);

Вычислите натуральный логарифм x. Разрез ветви расположен вдоль отрицательной оси.

Параметры:
Complex!T x Комплексное число
Возвращает:
Комплексный натуральный логарифм x
Значения по умолчанию
x log(x)
(-0, +0) (-∞, π)
(+0, +0) (-∞, +0)
(любое, +∞) (+∞, π/2)
(любое, NAN) (NAN, NAN)
(-∞, любое) (+∞, π)
(+∞, любое) (+∞, +0)
(-∞, +∞) (+∞, 3π/4)
(+∞, +∞) (+∞, π/4)
(±∞, NAN) (+∞, NAN)
(NAN, любое) (NAN, NAN)
(NAN, +∞) (+∞, NAN)
(NAN, NAN) (NAN, NAN)
Примеры:
import std.math : sqrt, PI, isClose;

auto a = complex(2.0, 1.0);
writeln(log(conj(a))); // conj(log(a))

auto b = 2.0 * log10(complex(0.0, 1.0));
auto c = 4.0 * log10(complex(sqrt(2.0) / 2, sqrt(2.0) / 2));
assert(isClose(b, c, 0.0, 1e-15));

writeln(log(complex(-1.0L, 0.0L))); // complex(0.0L, PI)
writeln(log(complex(-1.0L, -0.0L))); // complex(0.0L, -PI)
pure nothrow @nogc @safe Complex!T log10(T)(Complex!T x);

Вычислите логарифм по основанию 10 от x.

Параметры:
Complex!T x Комплексное число
Возвращает:
Комплексный логарифм по основанию 10 от x
Примеры:
import std.math : LN10, PI, isClose, sqrt;

auto a = complex(2.0, 1.0);
writeln(log10(a)); // log(a) / log(complex(10.0))

auto b = log10(complex(0.0, 1.0)) * 2.0;
auto c = log10(complex(sqrt(2.0) / 2, sqrt(2.0) / 2)) * 4.0;
assert(isClose(b, c, 0.0, 1e-15));

assert(ceqrel(log10(complex(-100.0L, 0.0L)), complex(2.0L, PI / LN10)) >= real.mant_dig - 1);
assert(ceqrel(log10(complex(-100.0L, -0.0L)), complex(2.0L, -PI / LN10)) >= real.mant_dig - 1);
pure nothrow @nogc @safe Complex!T pow(T, Int)(Complex!T x, const Int n)
Constraints: if (isIntegral!Int);

pure nothrow @nogc @trusted Complex!T pow(T)(Complex!T x, const T n);

pure nothrow @nogc @trusted Complex!T pow(T)(Complex!T x, Complex!T y);

pure nothrow @nogc @trusted Complex!T pow(T)(const T x, Complex!T n);

Вычисляет xn. Разрез ветви находится на отрицательной оси.

Параметры:
Complex!T x основание
Int n экспонента
Возвращает:
x в степени n
Примеры:
import std.math : isClose;

auto a = complex(1.0, 2.0);
writeln(pow(a, 2)); // a * a
writeln(pow(a, 3)); // a * a * a
writeln(pow(a, -2)); // 1.0 / (a * a)
assert(isClose(pow(a, -3), 1.0 / (a * a * a)));

auto b = complex(2.0);
assert(ceqrel(pow(b, 3), exp(3 * log(b))) >= double.mant_dig - 1);
Примеры:
import std.math : isClose;
writeln(pow(complex(0.0), 2.0)); // complex(0.0)
writeln(pow(complex(5.0), 2.0)); // complex(25.0)

auto a = pow(complex(-1.0, 0.0), 0.5);
assert(isClose(a, complex(0.0, +1.0), 0.0, 1e-16));

auto b = pow(complex(-1.0, -0.0), 0.5);
assert(isClose(b, complex(0.0, -1.0), 0.0, 1e-16));
Примеры:
import std.math : isClose, exp, PI;
auto a = complex(0.0);
auto b = complex(2.0);
writeln(pow(a, b)); // complex(0.0)

auto c = complex(0.0L, 1.0L);
assert(isClose(pow(c, c), exp((-PI) / 2)));
Примеры:
import std.math : isClose;
writeln(pow(2.0, complex(0.0))); // complex(1.0)
writeln(pow(2.0, complex(5.0))); // complex(32.0)

auto a = pow(-2.0, complex(-1.0));
assert(isClose(a, complex(-0.5), 0.0, 1e-16));

auto b = pow(-0.5, complex(-1.0));
assert(isClose(b, complex(-2.0), 0.0, 1e-15));

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_complex.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API