質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1542閲覧

【C言語】振幅スペクトルのグラフを出したい

im_a_student

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/11/03 07:01

前提・実現したいこと

イメージ説明
上図のような振幅スペクトルのグラフを指数関数(e^iみたいな)で作りたいです。
横軸が周波数、縦軸が振幅(の絶対値)です。
三角関数で式を表記した時はうまくいったのですが、指数関数で表記すると縦軸である振幅の絶対値(Fx[1])が0にしかならず、困っています。
式以外はすべて同じソースコードです。

うまくいったソースコード

C言語

1#include <stdio.h> 2#include <math.h> 3#include <complex.h> 4 5#define aM (10.0) //時刻tにおける加速度a_max[m/s/s] 6#define T (0.0332) //終端時刻[s]● 7 8int main(void) 9{ 10 double w = 0.0, dw = 1.0; //角周波数 11 12 do { 13 double _Complex Fx[2]; 14 double f; 15 16 f = w/(2.0*M_PI); //周波数 17 Fx[0] = aM*(cos(w*T) - I*sin(w*T) - 1.0)/(-I*w); //加速度のフーリエ変換 18 Fx[1] = cabs(Fx[0]); //Fx[0]の絶対値(振幅の絶対値) 19 20 printf("%g %g+%gi\n", f, creal(Fx[1]), cimag(Fx[1])); 21 22 w += dw; 23 } while (w <= 2000.0); 24}

うまくいかなかったソースコード

C言語

1#include <stdio.h> 2#include <math.h> 3#include <complex.h> 4 5#define aM (10.0) //時刻tにおける加速度a_max[m/s/s] 6#define T (0.0332) //終端時刻[s]● 7 8int main(void) 9{ 10 double w = 0.0, dw = 1.0; //角周波数 11 12 do { 13 double _Complex Fx[2]; 14 double f; 15 16 f = w/(2.0*M_PI); 17 Fx[0] = aM*(exp(-I*w*T) - 1.0)/(-I*w); 18 Fx[1] = cabs(Fx[0]); 19 20 printf("%g %g+%gi\n", f, creal(Fx[1]), cimag(Fx[1])); 21 22 w += dw; 23 } while (w <= 2000.0); 24}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2021/11/03 07:23

式以外が同じであれば、式の各要素を表示して確認してみては如何でしょうか。
jbpb0

2021/11/03 13:33

> Fx[0] = aM*(exp(-I*w*T) - 1.0)/(-I*w); 複素数で計算する場合は、「exp」ではなく「cexp」だったような
im_a_student

2021/11/03 13:55

それで解決しました!ありがとうございます!!
guest

回答1

0

ベストアンサー

Fx[0] = aM*(exp(-IwT) - 1.0)/(-I*w);

複素数で計算する場合は、「exp」ではなく「cexp」

投稿2021/11/04 08:45

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問