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

📄 gen_log.m

📁 由matlab开发的hybrid系统的描述语言
💻 M
字号:
function gen_log(S, log);% gen_log(S, log)% generates log-file of all variables%% INPUT:        % S  : structure containing the MLD-model% log: structure containing the log-data of all variables (d, z, u, x, y) %      obtained by runing 'hybsim.m' i.e.: log.x has the dimensions %      nx times nm (nx=number of states, nm=number of time-steps)%% OUTPUT:% a logfile ''systemname''.log on disk%% (C) 2002 Tobias Geyer% Automatic Control Laboratory, ETH Zentrum, CH-8092 Zurich, Switzerland% geyer@aut.ee.ethz.ch%% see license.txt for the terms and conditions.% History:      date         subject                                       %               2002.02.08   Initial Version  %               2002.05.07   displays logical outputs %               2002.05.15   display lower and upper bounds on variables%               2002.08.26   FT: modification in the input parameters%                                update to MLD struct 2% adapt this part according to your needs:% -------------------------------------------------m_start = 1;		% first time-step to be shownm_end   = 40;		% last time-step m_delta = 20;		% number of time-steps per lineperc = 0.2;             % suggest lower and upper bounds 'perc' lower/higher than the min/max% -------------------------------------------------m_end = min( m_end, size(log.D, 2) );tab_pos = 46;		% column with first data entry% filenamefname = [S.name '.log'];fid = fopen(fname, 'wt');fprintf(fid, ['logfile of ' S.name '.hys\n\n']);% extract different kinds:info.X = syminfo(S, '', '', 'x');info.U = syminfo(S, '', '', 'u');info.D = syminfo(S, '', '', 'd');info.Z = syminfo(S, '', '', 'z');info.Y = syminfo(S, '', '', 'y');info.P = syminfo(S, '', '', 'p');% write d, z, u, x and y% ------------------------------------------------------------------------------m = m_start;while (m <= min(length(log.Z(1,:)), m_end)) & (log.Z(1,m) ~= NaN) 	m0 = m;	m1 = min(m0+m_delta-1, m_end);	m1 = min(m1, length(log.Z));	disp(sprintf('m=%i', m))		str = '  i: t: var.name:       range:            m =';	min_len = tab_pos;	for n=m0:m1		while length(str) < min_len, str = [str ' ']; end;		min_len = min_len + 7;		str = [str num2str(n)];	end;	fprintf(fid, [str '\n']);	fprintf(fid, '--------------------------------------------------------------------------------\n');	fid = write_Rvar(fid, info.D, log.D, 0, tab_pos, m0, m1); fprintf(fid, '\n');	fid = write_Rvar(fid, info.Z, log.Z, 0, tab_pos, m0, m1); fprintf(fid, '\n');	fid = write_RBvar(fid,S, info.U, log.U, 0, tab_pos, S.nur, m0, m1); fprintf(fid, '\n');	fid = write_RBvar(fid,S, info.X, log.X, 0, tab_pos, S.nxr, m0, m1); fprintf(fid, '\n');	fid = write_RBvar(fid,S, info.Y, log.Y, 0, tab_pos, S.nyr, m0, m1); fprintf(fid, '\n');	fprintf(fid, '\n\n');		m = m+m_delta;end;	% write lower and upper bounds of z-variables% ------------------------------------------------------------------------------fprintf(fid, 'lower and upper bounds of real variables:\n');fprintf(fid, 'in simulation: minimal and maximal values of the variable during the simulation\n');fprintf(fid, 'suggested: bounds in simulation -/+ %2i percent or -/+ 0.1 whatever is small/larger\n', perc*100);fprintf(fid, '           afterwards, the bounds are rounded\n');fprintf(fid, 'actual: bounds as currently set in MLD model\n');fprintf(fid, '\n');fprintf(fid, '  i  t        var.name   in simulation         suggested       actual \n');fprintf(fid, '---------------------------------------------------------------------------------\n');fid = write_bounds(fid, info.Z, log.Z, perc); fprintf(fid, '\n');fid = write_bounds(fid, info.U, log.U, perc); fprintf(fid, '\n');fid = write_bounds(fid, info.X, log.X, perc); fprintf(fid, '\n');fid = write_bounds(fid, info.Y, log.Y, perc); fprintf(fid, '\n');fclose(fid);% convert .log to .ps% eval(['!a2ps -4 ' S.name '.log -o ' S.name '.ps']);			% ------------------------------------------------------------------------------% write lower and upper bounds of real variablefunction fid = write_bounds(fid, VarInfo, VarLog, perc)	for i=1:length(VarInfo)		for j=1:length(VarInfo)			v = VarInfo{j};			if (v.index == i) & (v.type == 'r')                x = VarLog(i,:);                                % suggested lower bound                sug_LB = min(x) - abs(max(x)-min(x))*perc;                  sug_LB = min( sug_LB, min(x)-0.1 );                sug_LB = floor(sug_LB*100) / 100;                                % suggested upper bound                sug_UB = max(x) + abs(max(x)-min(x))*perc;                  sug_UB = max( sug_UB, max(x)+0.1 );                sug_UB = ceil(sug_UB*100) / 100;                                % write the bounds				str = sprintf('%3i  %1s %15s   %2.5f  %0.5f', v.index, v.kind, v.name, min(x), max(x));                while length(str) < 47, str = [str ' ']; end;                str = [str sprintf('%0.2f  %0.2f ', sug_LB, sug_UB)];                while length(str) < 63, str = [str ' ']; end;                str = [str sprintf('%0.2f  %0.2f', v.min, v.max)];                                                % check for violations                if min(x) < v.min, str = [str '   error: lower bound violated']; end;                if max(x) > v.max, str = [str '   error: upper bound violated']; end;                if sug_LB < v.min, str = [str '   warning: suggested lower bound violated']; end;                if sug_UB > v.max, str = [str '   warning: suggested upper bound violated']; end;                                fprintf(fid, [str '\n']);            end;		end;	end;return% write real variablefunction fid = write_Rvar(fid, VarInfo, VarLog, index_off, tab_pos, m0, m1)	for i=1:length(VarInfo)		for j=1:length(VarInfo)			v = VarInfo{j};			if v.index == i				min_len = tab_pos;				str = sprintf('%3i  %1s %15s  %2.5f %9.5f', v.index+index_off, v.kind, v.name, v.min, v.max);				for m=m0:m1					while length(str) < min_len, str = [str ' ']; end;					min_len = min_len + 7;					x = VarLog(i,m);					if x == round(x)						str = [str sprintf('%1i', round(x))];					else						str = [str sprintf('%1.3f', x)];					end;				end;				fprintf(fid, [str '\n']);			end;		end;	end;return% write real and binary variablefunction fid = write_RBvar(fid, S, VarInfo, VarLog, index_off, tab_pos, nc, m0, m1)	% show real variable	for i=1:length(VarInfo)		for j=1:length(VarInfo)			v = VarInfo{j};			if (v.index == i) & (v.type == 'r')				min_len = tab_pos;				str = sprintf('%3i  %1sr%15s  %2.5f %9.5f', v.index+index_off, v.kind, v.name, v.min, v.max);				for m=m0:m1					while length(str) < min_len, str = [str ' ']; end;					min_len = min_len + 7;					x = VarLog(i,m);					if x == round(x)						str = [str sprintf('%1i', round(x))];					else						str = [str sprintf('%1.3f', x)];					end;				end;				fprintf(fid, [str '\n']);			end;		end;	end;	fprintf(fid, '\n');	% show boolean variable	for i=1:length(VarInfo)		for j=1:length(VarInfo)			v = VarInfo{j};			if (v.index == i) & (v.type == 'b')				min_len = tab_pos;				str = sprintf('%3i  %1sb%15s  %2.5f %9.5f', v.index+index_off, v.kind, v.name, v.min, v.max);				for m=m0:m1					while length(str) < min_len, str = [str ' ']; end;					min_len = min_len + 7;					x = VarLog(nc+i,m);					if x == round(x)						str = [str sprintf('%1i', round(x))];					else						str = [str sprintf('%1.3f', x)];					end;				end;				fprintf(fid, [str '\n']);			end;		end;	end;return	

⌨️ 快捷键说明

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