前回の解答
課題1
前回同様なので省略します.
comp_mlnm.cとcomp_admsm.cの指定部分に必要な関数を移植すればすぐに使えるようになります.
※0〜3ステップまで表示されない不具合を修正しましたので,見ておいて下さい.
0〜3ステップまではルンゲクッタで計算し,過去の4ステップを利用してミルンの方法やアダムスの
方法で修正を行います.epsを小さくすれば演算量が増えたりしますので試してみて下さい.
課題2
lpf.cについて通常のコンパイルを行えばよいので割愛します.
ステップ波形に対し,ダラダラと滑らかに上がってくるような応答であればおそらく間違いないと思います.
課題3
波形データを生成するファイルはcomp_random.cを参照のこと.
最終的には以下のようなソースファイルとヘッダファイルを生成し,makefileを作ればよい.
random1.c | random1.h |
#include <math.h> #include <time.h> #include "E_rand.h" static unsigned long int next = 1; /*乱数系列*/ int rand(void){ /*乱数発生関数*/ 中身 } void srand(unsigned int seed){ /*乱数種発生関数0〜UINT_MAX*/ 中身 } unsigned long int lsrand(unsigned long int seed){ /*乱数種発生関数0〜ULONG_MAX*/ 中身 } unsigned long int randomise(void){ /*乱数種初期化関数*/ 中身 } int zrand(int k){ /*-x〜+xまでの実数の乱数*/ 中身 } |
#ifndef _RANDOM1_H #define _RANDOM1_H #undef RAND_MAX #define RAND_MAX 32767 */ int rand(void); void srand(unsigned int); unsigned long int lsrand(unsigned long int); unsigned long int randomise(void); int zrand(int); #endif |
lpf.c | lpf.h |
#include <math.h> #include "lpf_.h" void lpf_const(double Fs, double f0, double Q, double *b0, double *b1, double *b2, double *a1, double *a2){ 中身 } double lpf_core(double in, double *b0, double *b1, double *b2, double *a1, double *a2, double *pre1, double *pre2){ 中身 } |
#ifndef _LPF_H #define _LPF_H void lpf_const(double, double, double, double*, double*, double*, double*, double*); double lpf_core(double, double*, double*, double*, double*, double*, double*, double*); #endif |
main.c |
#include <math.h> #include "sub1.h" #include "sub2.h" main(){ double・・・. int i; } |
makefile |
CC = bcc32 LINK = bcc32 TARGET = main OBJ = main.obj lpf.obj random1.obj SRC = $(OBJ:%.obj=%.c) .SUFFIXES: .obj .c .h $(TARGET).exe: $(OBJ) $(LINK) -e$@ $(OBJ) .c.obj: $(CC) -c $< $(TARGET): $(TARGET).c $(OBJ:%.obj=.h) lpf.obj: lpf.c lpf.h random.obj: random.c random.h #clean: # $(RM) $(TARGET) $(OBJ) *.tds *.bak |