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

📄 trn_1in.m

📁 其中提到遺傳學的程式碼與應用提供給次淚相向的研究者參考下載
💻 M
字号:
function trn_1in(mf_n, epoch_n)

if nargin < 2, epoch_n = 200; end;
if nargin < 1, mf_n = 5; end;

% ====== Generate training data
data_n = 101;
u = linspace(-1, 1, data_n)';
f = 0.6*sin(pi*u) + 0.3*sin(3*pi*u) +  0.1*sin(5*pi*u);
data = [u f];
%trn_data = data;
%chk_data = [];
trn_data = data(1:2:data_n, :);
chk_data = data(2:2:data_n, :);

% ====== Training options
ss = 0.01;
error_goal = 0;
mf_type = 'gbellmf';
in_fismat = genfis1(trn_data, mf_n, mf_type);

[trn_out_fismat, trn_error, step_size, chk_out_fismat, chk_error] = ...
	anfis(trn_data, in_fismat, ...
	[epoch_n error_goal ss nan nan], [1,1,1,1], chk_data);
trn_error(find(trn_error == -1)) = NaN*find(trn_error == -1);
if ~isempty(chk_data),
	chk_error(find(chk_error == -1)) = NaN*find(chk_error == -1);
end
step_size(find(step_size == -1)) = NaN*find(step_size == -1);

in = trn_data(:, 1);
out = evalfis(in, trn_out_fismat);
trn_RMSE = norm(out - trn_data(:,2))/sqrt(size(in, 1))

if ~isempty(chk_data),
	in = chk_data(:, 1);
	out = evalfis(in, chk_out_fismat);
	chk_RMSE = norm(out - chk_data(:,2))/sqrt(size(in, 1))
end

%genfig(['ANFIS: single-input system (file: ' mfilename ')']);
figure;
blackbg;
subplot(221);
in_range = getfis(in_fismat, 'inrange');
mf_type = getfis(in_fismat, 'inmftypes');
mf_para = getfis(in_fismat, 'inmfparams');
x = linspace(in_range(1, 1), in_range(1, 2), 101);
mf = evalmmf(x, mf_para, mf_type);
plot(x', mf');
axis([in_range 0 1.2]);
title('Initial MFs');

subplot(222);
in_range = getfis(trn_out_fismat, 'inrange');
mf_type = getfis(trn_out_fismat, 'inmftypes');
mf_para = getfis(trn_out_fismat, 'inmfparams');
x = linspace(in_range(1, 1), in_range(1, 2), 101);
mf = evalmmf(x, mf_para, mf_type);
plot(x', mf');
axis([in_range 0 1.2]);
title('Final MFs');

subplot(223);
if ~isempty(chk_data),
	data_n = size(trn_data, 1);
	new_data_n = data_n + 10*(data_n-1);
	dense_x = linspace(min(trn_data(:,1)), max(trn_data(:,1)), new_data_n)';
	dense_y = evalfis(dense_x, trn_out_fismat);
	plot(trn_data(:, 1), trn_data(:, 2), '+', ...
		chk_data(:, 1), chk_data(:, 2), 'o', ...
		dense_x, dense_y);
else
	data_n = size(trn_data, 1);
	new_data_n = data_n + 10*(data_n-1);
	dense_x = linspace(min(trn_data(:,1)), max(trn_data(:,1)), new_data_n)';
	dense_y = evalfis(dense_x, trn_out_fismat);
	plot(trn_data(:, 1), trn_data(:, 2), '+', ...
		dense_x, dense_y);
end
title('f(u) and ANFIS Outputs');
%axis([-inf inf -inf inf]);

subplot(224);
max_mf = ones(mf_n, 1)*max(mf);
index = find(mf ~= max_mf);
tmp = getfis(trn_out_fismat,'outmfparams');
tmp = tmp(:, 1:2);	% Bug due to getfis.m in FLT v2. Fixed in my getfis.m
rule_output = tmp*[x; ones(size(x))];
rule_output(index) = NaN*index;
plot(x', rule_output');
axis([-inf inf -inf inf]);
title('Each Rule''s Outputs');

cyclesty;

%genfig(['ANFIS: errors and step sizes (file: ' mfilename ')']);
figure;
blackbg;
subplot(221);
mf_sum = sum(mf);
normalized_mf = mf./mf_sum(ones(mf_n, 1), :);
plot(x', normalized_mf');
axis([in_range 0 1.2]);
title('Normalized Initial MFs');

subplot(222);
mf_sum = sum(mf);
normalized_mf = mf./mf_sum(ones(mf_n, 1), :);
plot(x', normalized_mf');
axis([in_range 0 1.2]);
title('Normalized Final MFs');

subplot(223);
tmp = [trn_error chk_error];
plot(tmp);
title('Error Curves');
axis([-inf inf -inf inf]);

subplot(224);
plot(step_size);
title('Step Sizes');
axis([-inf inf -inf inf]);

cyclesty;

figure;
k1=0:499;u1=sin(2*pi*k1/250);
k2=500:700; u2=0.5*sin(2*pi*k2/250)+0.5*sin(2*pi*k2/25);
k=[k1 k2];u=[u1 u2];
f=0.6*sin(pi*u)+0.3*sin(3*pi*u)+0.1*sin(5*pi*u);
y=0*ones(1,701);
for i=2:700
    y(i+1)=0.3*y(i)+0.6*y(i-1)+f(i);
    yh(i+1)=0.3*y(i)+0.6*y(i-1)+ evalfis(u(i), trn_out_fismat);
end
subplot(211);plot(k,u);title('u(k)')
subplot(212);plot(k,y,k,yh);title('Plant output and Model output')
xlabel('Time index')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -