1. ホーム
  2. c

[解決済み] C言語で複素数を扱うには?

2022-06-19 14:17:24

質問

C言語で複素数を扱うにはどうしたらよいでしょうか。私は complex.h ヘッダーファイルがありますが、それをどう使うかについてあまり情報をくれません。実部や虚部に効率的にアクセスするにはどうしたらよいでしょうか?モジュールと位相を得るためのネイティブ関数はありますか?

どのように解決するのですか?

このコードはあなたの助けになりますし、それはかなり自明です。

#include <stdio.h>      /* Standard Library of Input and Output */
#include <complex.h>    /* Standard Library of Complex Numbers */

int main() {

    double complex z1 = 1.0 + 3.0 * I;
    double complex z2 = 1.0 - 4.0 * I;

    printf("Working with complex numbers:\n\v");

    printf("Starting values: Z1 = %.2f + %.2fi\tZ2 = %.2f %+.2fi\n", creal(z1), cimag(z1), creal(z2), cimag(z2));

    double complex sum = z1 + z2;
    printf("The sum: Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));

    double complex difference = z1 - z2;
    printf("The difference: Z1 - Z2 = %.2f %+.2fi\n", creal(difference), cimag(difference));

    double complex product = z1 * z2;
    printf("The product: Z1 x Z2 = %.2f %+.2fi\n", creal(product), cimag(product));

    double complex quotient = z1 / z2;
    printf("The quotient: Z1 / Z2 = %.2f %+.2fi\n", creal(quotient), cimag(quotient));

    double complex conjugate = conj(z1);
    printf("The conjugate of Z1 = %.2f %+.2fi\n", creal(conjugate), cimag(conjugate));

    return 0;
}

  を使っています。

creal(z1) : 実数部を取得する(float の場合 crealf(z1) を、長二重の場合は creall(z1) )

cimag(z1) : 虚数部を取得する(float の場合 cimagf(z1) の場合、長二重の場合 cimagl(z1) )

複素数を扱う際のもう一つの重要なポイントは、以下のような関数があることです。 cos() , exp()sqrt() は、その複合型に置き換えなければなりません。 ccos() , cexp() , csqrt() .