前提・実現したいこと
C言語を学習している者です。
矩形波1周期分(t=0~1[s])を1/1000[s]刻みでプロットするプログラムを作成して、時刻とその時の変位をファイルに書き込むのが目標です。
次の式のようにN個のsin波(今回は10個)を足し合わせると、振幅1の矩形波ができると学習したのですが、以下のソースコードでは何故か振幅が1になりません。
自分のソースコードのどの部分が原因なのか全く分からないので、ミスを犯している箇所を教えて頂きたいです。
些細なヒントでも良いので、アドバイスを下さい。
宜しくお願い致します。
※追記
f=10とタイプミスしていたのでf=2*n-1と修正しました。
発生している問題・エラーメッセージ
矩形波の振幅が1にならない。(失敗の実行結果は以下)
エラーは出ていない。
該当のソースコード
C
1#define _USE_MATH_DEFINES 2#define N 10 3#include<stdio.h> 4#include<math.h> 5 6void Save(int i, double t, double x, FILE *fp){ 7 double sinarray[1000][2]; 8 sinarray[i][0] = t; 9 sinarray[i][1] = x; 10 fprintf(fp, "%lf %lf\n", sinarray[i][0], sinarray[i][1]); 11 return; 12} 13 14int main(){ 15 FILE *fp; 16 fp = fopen("20266005_rectangularwave.txt", "a+"); 17 int i, n, len=1000; 18 double x, t, f=2.0*n-1, a=4.0/(M_PI*(2.0*n-1)), delta=1.0e-3; 19 for(i=0; i<len; i++){ 20 x = 0.0; 21 t = (double)i*delta; 22 for(n=1; n<=N; n++){ 23 x += a * sin(2.0*M_PI*f*t); 24 } 25 Save(i, t, x, fp); 26 } 27 fclose(fp); 28 return 0; 29} 30
失敗の実行結果の一部
全て載せると10000字を超えるため、一部を載せます。これ以降は同様に繰り返されます。
0.000000 0.000000 0.001000 0.000002 0.002000 0.000002 0.003000 -0.000001 0.004000 -0.000002 0.005000 -0.000001 0.006000 0.000001 0.007000 0.000002 0.008000 0.000001 0.009000 -0.000002 0.010000 -0.000002 0.011000 0.000000 0.012000 0.000002 0.013000 0.000002 0.014000 -0.000001 0.015000 -0.000002 0.016000 -0.000001 0.017000 0.000002 0.018000 0.000002 0.019000 0.000000 0.020000 -0.000002 0.021000 -0.000002 0.022000 0.000000 0.023000 0.000002 0.024000 0.000001 0.025000 -0.000001 0.026000 -0.000002 0.027000 -0.000001 0.028000 0.000002 0.029000 0.000002 0.030000 0.000000 0.031000 -0.000002 0.032000 -0.000002 0.033000 0.000001 0.034000 0.000002 0.035000 0.000001 0.036000 -0.000001 0.037000 -0.000002 0.038000 -0.000001 0.039000 0.000002 0.040000 0.000002 0.041000 -0.000000 0.042000 -0.000002 0.043000 -0.000002 0.044000 0.000001 0.045000 0.000002 0.046000 0.000001 0.047000 -0.000001 0.048000 -0.000002 0.049000 -0.000000 0.050000 0.000002 0.051000 0.000002 0.052000 -0.000000 0.053000 -0.000002 0.054000 -0.000002 0.055000 0.000001 0.056000 0.000002 0.057000 0.000001 0.058000 -0.000002 0.059000 -0.000002 0.060000 -0.000000 0.061000 0.000002 0.062000 0.000002 0.063000 -0.000000 0.064000 -0.000002 0.065000 -0.000001 0.066000 0.000001 0.067000 0.000002 0.068000 0.000001 0.069000 -0.000002 0.070000 -0.000002 0.071000 -0.000000 0.072000 0.000002 0.073000 0.000002 0.074000 -0.000001 0.075000 -0.000002 0.076000 -0.000001 0.077000 0.000001 0.078000 0.000002 0.079000 0.000001 0.080000 -0.000002 0.081000 -0.000002 0.082000 0.000000 0.083000 0.000002 0.084000 0.000002 0.085000 -0.000001 0.086000 -0.000002 0.087000 -0.000001 0.088000 0.000001 0.089000 0.000002 0.090000 0.000000 0.091000 -0.000002 0.092000 -0.000002 0.093000 0.000000 0.094000 0.000002 0.095000 0.000002 0.096000 -0.000001 0.097000 -0.000002 0.098000 -0.000001 0.099000 0.000002 0.100000 0.000002 0.101000 0.000000 0.102000 -0.000002 0.103000 -0.000002 0.104000 0.000000 0.105000 0.000002 0.106000 0.000001 0.107000 -0.000001 0.108000 -0.000002 0.109000 -0.000001 0.110000 0.000002 0.111000 0.000002 0.112000 0.000000
###利用環境
Visual Studio Codeで実行。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/11 03:18