⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io.c

📁 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱
💻 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 + -