(11) |
先程の例から数箇所変更すればすぐできます。
main
の部分の loop を入力を表す から時間を表す意味で に変更しておきます。
#define FROM 0.0 #define TO 100.0 #define STEP 0.01 #define INPUT 0.1 #define INITIAL_VALUE -10.0 int main(int argc, char **argv) { neuron a; double t; initialize_neuron(&a); t = FROM; while ( t <= TO ){ update_neuron(&a, INPUT); printf("%f %f\n", t, a.output); t += STEP; } }
while
文の繰り返し制御のための変数であり、
かつ、ニューロンへの入力値を表していたのですが、この例では新たに入力を表す
定数 INPUT
を定義しています。
さらに initialize_neuron()
関数と
update_neuron()
関数の内容を変更すれば完成です。
initialize_neuron()
では初期値を与える必要があるので
void initialize_neuron(neuron *x) { x->thres = 0.0; x->inp_wgt = 1.0; x->output = 0.0; x->inner_state = INITIAL_VALUE; }
INITIAL_VALUE
を与えておくことにします。
update_neuron()
を変更しプログラムを完成させなさい。
STEP
が入ります。
(12) | |||
(13) |
(2) 初期値をプログラムの引数として与えられるようにプログラムを変
更してください。
#include <stdio.h> int main(int argc, char **argv) { int i=0; fprintf(stderr,"argc=%d\n",argc); while ( i < argc ){ fprintf(stderr,"argv[%d]=%s\n", i, argv[i]); i++; } return 0; }
argv[i]
という変数に i
番目の引数が格納されているのが
わかるはずです。あとはこの変数を倍精度実数 double
に atof()
などを
使って変換して用いればよいです。