• ベストアンサー

C言語で複素数の計算を行いたいと思っております。

C言語で複素数の計算を行いたいと思っております。 プログラミングソフトは、C言語を始めよう!を用いています。 しかし変数定義の仕方が分かりません。 複素計算とは具体的に、 exp( i π) (i は虚数単位)です 最初に#include<complex.h>を行いましたが 変数の定義の方法、exp( i π)の定義の方法が いまひとつわからない状態です。 保存するときに、Cファイルではなく、 拡張子をcppに変更してCPPファイルでコンパイルを行っています。 exp( i π)を計算可能なプログラムを 教えて頂ければ幸いです。 ご面倒かと思いますが 回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

complex.h が include できたのなら、こんな感じでできるのではなかろうかと思います。 #include <complex> #include <iostream> int main() { std::complex<double> x(0, 3.1416); std::cout << std::exp(x) << "\n"; return 0; }

その他の回答 (1)

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.1

関連するQ&A

  • C言語の複素数についてです。

    C言語で複素数を使うことになりましたが、複素数をプログラム上でどう使うかわかりません。 粒子の複素屈折率を計算してシミュレーションするというものです。 その複素屈折率は 0.57+2.74i と表されます。iが虚数です。 一般的にCプログラムで複素数を使えるようにする一番簡単な方法はなんでしょうか? 具体的に参考にできるプログラムコードとかあれば是非教えて下さい。 #define complex とか使うのでしょうか? おそらくcomplexというものを使うんだとは思います。実数部と虚数部を分けて考えるのでしょうか。 C言語、いまいちよくわからなくて……どなたか詳しい方、教えて下さい。

  • C++Builder6 での複素数計算

    C++builder6 で複素数計算が出来なくて困っています、 UNIT1.CPPのヘッダー部分に  #include <vcl.h>  #pragma hdrstop  #include <iostream>  #include <complex.h>  #include "Unit1.h" //-----------------------------  #pragma package(smart_init)  #pragma resource "*.dfm" を書いて イベントハンドラ部分に変数の宣言   complex<double> z; として緑色三角形の実行ボタンをクリックすると   「未定義のシンボル complex」 と言うエラーが発生します、 この解決方法を教えて頂ければ幸いです、宜しくお願いします。 (なお C++builder5 では何の問題もなく複素数計算のソフトが出来ていました)   

  • C言語で

    C言語で複素行列の和と積を計算するプログラムを作りたいのですが、 よくわからないので教えてほしいです。複素数を構造体で定義して、配列を使えば いいと思うのですが・・・。 ちなみに実数の行列の和と積を求めるプログラムはわかっています。

  • c++builder6で複素数計算教えて下さい

    私は今までwindows xp を使い c++builder5 で復素数の電気関係の簡単なソフトを作って来ました、 これからはc++buildre6で複素数計算をさせたいのですが下記の様なエラーが発生して前に進めず に困っています(OS は windows xp 及び windows 8 でエラーは同じ様に発生) unit1.cppの  ヘッダー部分に #include <complex.h> を書き  イベントハンドラ部分に complex<double> z; と書いて 実行ボタンを押すと  complex<double> z; の行で 「未定義のシンボル complex」 のエラーが発生します 上記の解決方法を教えて頂ければ幸いです。

  • 複素数の計算で困っています…

    複素数の計算で困っています… オイラーの公式 exp(-i * φ) = cosφ - i*sinφ および、  E_p = A_p*exp(-i * φ_p) 、E_m = A_m*exp(-i * φ_m) の関係式を用いると、 E_x = (E_p + E_m)/√2 E_y = i * (E_p - E_m)/√2 の2式から |E_x|^2 = |E_y|^2 = はどのように変換できるでしょうか。(iは虚数です) (A_p,A_m,φ_p,φ_mを用いて) 大学の授業の関係で困っています… どなたか分かる方教えていただけないでしょうか?

  • Linux C言語開発 インクルードについて

    C言語開発初心者です。 LinuxでC言語開発をするにあたり、どのディストリビューションにしても インクルードしたいヘッダファイルが既定の場所には無く別の場所にカーネルのバージョンごとに保存されているようなのです。 このままコンパイルを試みるとインクルードファイルが存在しませんとエラーが返ります。 既定のヘッダファイルの保存場所にはC言語開発に必要なヘッダファイルが存在しませんので、この問題を皆さんはどのように解決しておりますか?どなたかご教授お願いいたします。 C言語でincludeする場所は<>でくくった場合 /usr/include/ 以下を参照する設定になっていると思うのですが、 例えばmodule.h やinit.h などの開発用ヘッダファイル?を探してみると /usr/include/linux/ には存在せず、 find / -name module.h と入力して検索してみると /usr/src/kernels/2.6.32-131.21.1.el6.i686/include/linux/module.h と別な場所にあります。 ネットであれやこれや調べてみても コンパイル時にincludeの参照先を指定する方法はあるようなのですが、 コンパイルする度にいちいち指定するのは面倒だと思います。(gcc -I) かといって開発しているカレントディレクトリにヘッダファイルをコピーしても includeするヘッダファイルが別のヘッダファイルを参照することもあるようなので、 あまり現実的ではないようです。 一番安全な方法としてincludeする参照先が環境変数か何かで追加及び変更するのではないかと思います。 試してみましたがenvコマンドで表示されるOSの環境変数とは別のもののようなのです。 環境変数 C_INCLUDE_PATH とはどのようにして変更・追加するのでしょう? また、上記の方法以外で良い方法がございましたらそれでもかまいません。 よろしくお願いいたします。 開発環境 ・OS centos6 ・以下のパッケージはインストール済み kernel-headers-2.6.32-131.21.1.el6.i686 kernel-devel-2.6.32-131.21.1.el6.i686 make-3.81-19.el6.i686 gcc-4.4.5-6.el6.i686 ・GUI開発環境 netbeans ・uname -r 実行結果 2.6.32-131.21.1.el6.i686

  • 複素数について

    虚数単位iを導入すると複素係数多項式の解は複素数の中にある。つまり複素数の代数閉体は複素数というのがありますが、何故なんでしょう。言いたいことは分かるのですが、例えばX^2=iの解も複素数ということになります。どうして多項式の解は複素数の範囲に収まるんでしょうか?哲学的というか直感的な説明を誰かしていただけませんか?

  • 【C++】複素数で配列を使いたい

    昨日QNo.3714177で「複素数complex.hがおかしいのでしょうか?」 と言うタイトルで質問させて頂いた、C言語初心者です。 お世話になっております。 今日一日中やっており、C++も少しは理解できるようになったぞっと思った矢先、またまた、問題が発生しました。 複素数の中で、配列を使おうとするとエラーが発生します。 ソースは以下の通りです。上段に私が書いたもの、下段に前回の質問時に教えて頂き、動いたものを記載しております。 どこが間違えているのか教えて頂きたく思います。 よろしくお願い致します。 ============================================================================================================ #include <iostream> #include <iomanip> #include <complex> using namespace std; int main () { int i; for (i=0; i<3; i++) { std::complex <double> Z[i] (i,i); std::cout << "Z[" << i << "]= " << Z[i] << "\n"; } return 0; } //ここより下のみでは動きます。 #if0 #include <iostream> #include <complex> int main() { std::complex<double> x(1.2, 3.4); std::complex<double> y(5.6, 7.8); std::cout << "x = " << x <<"\n"; std::cout << "x = " << y <<"\n"; } #endif ============================================================================================================ Borland C++ 5.6 for Win32 Copyright (c) 1993, 2002 Borland keisan.cpp: エラー E2313 keisna.cpp 11: 定数式が必要(関数 main() ) エラー E2034 keisna.cpp 11: 'int' 型は 'complex<double>[1]' 型に変換できない(関数 main() ) エラー E2293 keisna.cpp 11: ) が必要(関数 main() ) *** 3 errors in Compile ***

  • 複素変数に値が正しく代入されない

    複素変数を使ったプログラムを作るために、 まず複素変数を作成して値を表示するだけのプログラムを作ったのですが、 虚数部分に代入されるはずの値が実数部分に表示され、 虚数部分には0が表示されてしまいます。 書いたプログラムは #include<stdio.h> #include<complex.h> int main(void){ complex<double> a=(1.2,2.3); printf("%g %gi\n",real(a),imag(a)); } 結果は 2.3 0i でした。 どこで書き方を間違えているのでしょうか。 cファイルだとcomplex.hをインクルードしようとすると stdcomp.hでエラーが出るのでcppファイルにしています。 コンパイラはBorland C++ Compiler 5.5を使っています。

  • 複素数

    複素数について質問させて頂きます。 参考書には、 「複素数zが実数でない場合つまり、虚部が0でないときzは虚数である」という。 というように記載されていました。 私は複素数は常に虚数だと認識していましたがそうでない場合もあるのでしょうか? 複素数zが実数でない場合と記載されていたので複素数が実数の場合もあるのでは ないかと考えた次第です。 つまり、 z=x+iy (z:複素数、x,y:実数、i:虚数単位) において、y=0の場合でもzを複素数と呼ぶのですか? 上記の場合、zは虚数ではないですが複素数とは言えるのでしょうか? 複素数の定義は、 実数x,yと虚数単位iを用いてz=x+iyの形で表すことのできる数です。 (定義にy≠0は特に記載されていませんでした。) なので、z=x+iyにおいてy=0の場合は複素数とは言わないと考えています。 質問内容を整理しますと、 (1)複素数は常に虚数である (2)z=x+iyにおいて、y=0のときzは複素数ではない   複素数の定義にy≠0は必要なのでしょうか? 以上、ご回答よろしくお願い致します。

専門家に質問してみよう