📄 io.c
字号:
/* Copyright (c) 1994-98 by The MathWorks, Inc. */
/* $Revision: 1.8 $ $Date: 1997/12/01 21:45:35 $ $Author: moler $ */
static double **
#ifdef __STDC__
fisGetFismatrix(char *filename, int *mp, int *np)
#else
fisGetFismatrix(filename, mp, np)
char *filename;
int *mp;
int *np;
#endif
{
double **fismatrix;
int element_n = 0, row_n = 0, col_n = 0, i, j;
FILE *fp;
char tmp_char;
double tmp_double;
/* find the size of the data file */
/* find row number */
fp = fisOpenFile(filename, "r");
while (fscanf(fp, "%c", &tmp_char) != EOF)
if (tmp_char == '\n')
row_n++;
fclose(fp);
/* find element number */
fp = fopen(filename, "r");
while (fscanf(fp, "%lf", &tmp_double) != EOF)
element_n++;
fclose(fp);
col_n = element_n/row_n;
/*
printf("row_n = %d\n", row_n);
printf("element_n = %d\n", element_n);
printf("col_n = %d\n", col_n);
*/
fp = fisOpenFile(filename, "r");
fismatrix = (double **)fisCreateMatrix(row_n, col_n, sizeof(double));
for (i = 0; i < row_n; i++)
for (j = 0; j < col_n; j++)
fscanf(fp, "%lf", &fismatrix[i][j]);
fclose(fp);
*mp = row_n;
*np = col_n;
return(fismatrix);
}
/* move training or checking data to fis structure */
/* flag == 0 --> training data */
/* flag != 0 --> checking data */
static void
#ifdef __STDC__
anfisGetData(FIS *fis, char *data_file, int flag)
#else
anfisGetData(fis, data_file, flag)
FIS *fis;
char *data_file;
int flag;
#endif
{
int i, j;
double tmp;
FILE *fp;
int element_n, row_n, column_n;
double **destination;
if (flag == 0) { /* reading training data */
printf("Reading training data ...\n");
fp = fisOpenFile(data_file, "r");
} else { /* reading checking data */
fp = fopen(data_file, "r");
if (fp == NULL) {
printf("Cannot open %s --> no checking data\n", data_file);
fis->chk_data_n = 0;
return;
} else
printf("Reading checking data ...\n");
}
element_n = 0;
while (fscanf(fp, "%lf", &tmp) != EOF)
element_n++;
fclose(fp);
column_n = fis->in_n + fis->out_n;
row_n = element_n/column_n;
if (flag == 0) {
fis->trn_data = (double **)
fisCreateMatrix(row_n, column_n, sizeof(double));
fis->trn_data_n = row_n;
destination = fis->trn_data;
} else {
fis->chk_data = (double **)
fisCreateMatrix(row_n, column_n, sizeof(double));
fis->chk_data_n = row_n;
destination = fis->chk_data;
}
fp = fisOpenFile(data_file, "r");
for (i = 0; i < row_n; i++)
for (j = 0; j < column_n; j++)
if (fscanf(fp, "%lf", &tmp) != EOF)
destination[i][j] = tmp;
else
fisError("Not enough data!");
fclose(fp);
}
/* Inital message, for off-line only */
static void
#ifdef __STDC__
anfisInitialMessage(FIS *fis)
#else
anfisInitialMessage(fis)
FIS *fis;
#endif
{
if (!fis->display_anfis_info)
return;
printf("\nANFIS info: \n");
printf("\tNumber of nodes: %d\n", fis->node_n);
printf("\tNumber of linear parameters: %d\n",
((fis->order)*(fis->in_n)+1)*fis->rule_n);
printf("\tNumber of nonlinear parameters: %d\n",
fis->para_n-((fis->order)*(fis->in_n)+1)*fis->rule_n);
printf("\tTotal number of parameters: %d\n", fis->para_n);
printf("\tNumber of training data pairs: %d\n", fis->trn_data_n);
printf("\tNumber of checking data pairs: %d\n", fis->chk_data_n);
printf("\tNumber of fuzzy rules: %d\n\n", fis->rule_n);
/*
PRINT(fis->epoch_n);
PRINT(fis->trn_error_goal);
PRINT(fis->ss);
PRINT(fis->ss_dec_rate);
PRINT(fis->ss_inc_rate);
PRINT(fis->display_anfis_info);
PRINT(fis->display_error);
PRINT(fis->display_ss);
PRINT(fis->display_final_result);
*/
if (fis->trn_data_n < fis->para_n)
printf("Warning: number of data is smaller than number of modifiable parameters\n");
}
/* Initial message, for on-line only */
static void
#ifdef __STDC__
anfisInitialMessage1(FIS *fis)
#else
anfisInitialMessage1(fis)
FIS *fis;
#endif
{
if (!fis->display_anfis_info)
return;
printf("\nANFIS info: \n");
printf("\tNumber of nodes: %d\n", fis->node_n);
printf("\tNumber of output membership function parameters: %d\n",
(fis->in_n+1)*fis->rule_n);
printf("\tNumber of input membership function parameters: %d\n",
fis->para_n-(fis->in_n+1)*fis->rule_n);
printf("\tTotal number of parameters: %d\n", fis->para_n);
printf("\tNumber of fuzzy rules: %d\n\n", fis->rule_n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -