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

📄 penddemo.m

📁 数字通信第四版原书的例程
💻 M
📖 第 1 页 / 共 2 页
字号:
function [ret,x0,str,ts,xts]=penddemo(t,x,u,flag);
%PENDDEMO	is the M-file description of the SIMULINK system named PENDDEMO.
%	PENDDEMO has a total of 2 states, 6 discrete states, 0 outputs and 0 inputs.
%	The block-diagram can be displayed by typing: PENDDEMO.
%
%	SYS=PENDDEMO(T,X,U,FLAG) returns depending on FLAG certain
%	system values given time point, T, current state vector, X,
%	and input vector, U.
%	FLAG is used to indicate the type of output to be returned in SYS.
%
%	Setting FLAG=1 causes PENDDEMO to return state derivatives, FLAG=2
%	discrete states, FLAG=3 system outputs and FLAG=4 next sample
%	time. For more information and other options see SFUNC.
%
%	Calling PENDDEMO with a FLAG of zero:
%	[SIZES]=PENDDEMO([],[],[],0),  returns a vector, SIZES, which
%	contains the sizes of the state vector and other parameters.
%		SIZES(1) number of states
%		SIZES(2) number of discrete states
%		SIZES(3) number of outputs
%		SIZES(4) number of inputs.
%	For the definition of other parameters in SIZES, see SFUNC.
%	See also, TRIM, LINMOD, LINSIM, EULER, RK23, RK45, ADAMS, GEAR.

% Note: This M-file is only used for saving graphical information;
%       after the model is loaded into memory an internal model
%       representation is used.

% the system will take on the name of this mfile:
sys = mfilename;
new_system(sys)
simver(1.3)
if (0 == (nargin + nargout))
     set_param(sys,'Location',[448,114,1132,470])
     open_system(sys)
end;
set_param(sys,'algorithm',     'RK-45')
set_param(sys,'Start time',    '0')
set_param(sys,'Stop time',     '10000')
set_param(sys,'Min step size', '0.0001')
set_param(sys,'Max step size', '5')
set_param(sys,'Relative error','1e-3')
set_param(sys,'Return vars',   '')

add_block('built-in/To Workspace',[sys,'/','To Workspace'])
set_param([sys,'/','To Workspace'],...
		'mat-name','y',...
		'buffer','[1000 1 0.1]',...
		'position',[615,96,650,114])


%     Subsystem  'Pendulum'.

new_system([sys,'/','Pendulum'])
set_param([sys,'/','Pendulum'],'Location',[97,238,630,546])

add_block('built-in/Fcn',[sys,'/','Pendulum/Fcn2'])
set_param([sys,'/','Pendulum/Fcn2'],...
		'hide name',0,...
		'Expr','(-u[1]*cos(u[3])/m + (M+m)*g*sin(u[3])/m - l*power(u[2],2)*sin(u[3])*cos(u[3]))/(l*(M/m + power(sin(u[3]),2)))',...
		'position',[210,175,250,195])

add_block('built-in/Integrator',[sys,'/','Pendulum/Integrator4'])
set_param([sys,'/','Pendulum/Integrator4'],...
		'position',[305,90,325,110])

add_block('built-in/Mux',[sys,'/','Pendulum/Mux1'])
set_param([sys,'/','Pendulum/Mux1'],...
		'hide name',0,...
		'inputs','3',...
		'position',[140,84,170,116])

add_block('built-in/Fcn',[sys,'/','Pendulum/Fcn1'])
set_param([sys,'/','Pendulum/Fcn1'],...
		'hide name',0,...
		'Expr','(u[1]/m - g*sin(u[3])*cos(u[3]) + l*power(u[2],2)*sin(u[3]))/(M/m + power(sin(u[3]),2))',...
		'position',[210,90,250,110])

add_block('built-in/Mux',[sys,'/','Pendulum/Mux'])
set_param([sys,'/','Pendulum/Mux'],...
		'hide name',0,...
		'inputs','3',...
		'position',[140,169,170,201])

add_block('built-in/Integrator',[sys,'/','Pendulum/Integrator1'])
set_param([sys,'/','Pendulum/Integrator1'],...
		'position',[385,90,405,110])

add_block('built-in/Integrator',[sys,'/','Pendulum/Integrator3'])
set_param([sys,'/','Pendulum/Integrator3'],...
		'position',[305,175,325,195])

add_block('built-in/Integrator',[sys,'/','Pendulum/Integrator2'])
set_param([sys,'/','Pendulum/Integrator2'],...
		'position',[385,175,405,195])

add_block('built-in/Inport',[sys,'/','Pendulum/in_1'])
set_param([sys,'/','Pendulum/in_1'],...
		'position',[15,80,35,100])

add_block('built-in/Outport',[sys,'/','Pendulum/out_1'])
set_param([sys,'/','Pendulum/out_1'],...
		'position',[470,90,490,110])

add_block('built-in/Outport',[sys,'/','Pendulum/out_2'])
set_param([sys,'/','Pendulum/out_2'],...
		'Port','2',...
		'position',[470,105,490,125])
add_line([sys,'/','Pendulum'],[410,185;450,185;450,115;465,115])
add_line([sys,'/','Pendulum'],[430,185;430,235;75,235;75,195;135,195])
add_line([sys,'/','Pendulum'],[330,185;380,185])
add_line([sys,'/','Pendulum'],[355,185;355,215;105,215;105,185;135,185])
add_line([sys,'/','Pendulum'],[420,185;420,130;100,130;100,110;135,110])
add_line([sys,'/','Pendulum'],[40,90;135,90])
add_line([sys,'/','Pendulum'],[40,90;45,175;135,175])
add_line([sys,'/','Pendulum'],[347,185;347,150;85,150;85,100;135,100])
add_line([sys,'/','Pendulum'],[330,100;380,100])
add_line([sys,'/','Pendulum'],[255,100;300,100])
add_line([sys,'/','Pendulum'],[175,100;205,100])
add_line([sys,'/','Pendulum'],[175,185;205,185])
add_line([sys,'/','Pendulum'],[255,185;300,185])
add_line([sys,'/','Pendulum'],[410,100;465,100])
set_param([sys,'/','Pendulum'],...
		'Mask Display','',...
		'Mask Type','Inverted pendulum on cart')
set_param([sys,'/','Pendulum'],...
		'Mask Dialogue','Unmask and double-click to see dynamics|Mass of cart (kg):|Mass of pendulum (kg):|Distance to pendulum center of mass(m):|Acceleration of gravity (m/s^2):')
set_param([sys,'/','Pendulum'],...
		'Mask Translate','M=@1; m=@2; l=@3; g=@4;',...
		'Mask Help','Nonlinear dynamics of inverted pendulum on cart.',...
		'Mask Entries','0.455\/0.21\/0.61/2\/9.8\/')


%     Finished composite block 'Pendulum'.

set_param([sys,'/','Pendulum'],...
		'position',[425,107,455,158])

add_block('built-in/Note',[sys,'/',['Inverted pendulum on cart with Animation',13,'(Double click on the "?" for more info)']])
set_param([sys,'/',['Inverted pendulum on cart with Animation',13,'(Double click on the "?" for more info)']],...
		'position',[176,265,181,270])


%     Subsystem  'Animation'.

new_system([sys,'/','Animation'])
set_param([sys,'/','Animation'],'Location',[445,59,728,223])

add_block('built-in/S-Function',[sys,'/','Animation/S-function'])
set_param([sys,'/','Animation/S-function'],...
		'function name','pendan',...
		'parameters','RefBlock',...
		'position',[120,53,175,77])

add_block('built-in/Inport',[sys,'/','Animation/in_1'])
set_param([sys,'/','Animation/in_1'],...
		'position',[75,55,95,75])
add_line([sys,'/','Animation'],[100,65;115,65])
set_param([sys,'/','Animation'],...
		'Mask Display','plot([-10 10],[0 0],[-2 -2 2 2],[0 1 1 0],[0 3],[1 5])',...
		'Mask Type','Pendulum plot',...
		'Mask Dialogue','Pendulum plot|DC reference signal block name:')
set_param([sys,'/','Animation'],...
		'Mask Translate','RefBlock = @1;',...
		'Mask Help','Pendulum animation function using Handle graphics.',...
		'Mask Entries','''Constant''\/')


%     Finished composite block 'Animation'.

set_param([sys,'/','Animation'],...
		'position',[610,20,665,70])

add_block('built-in/Mux',[sys,'/','Mux'])
set_param([sys,'/','Mux'],...
		'inputs','3',...
		'position',[525,29,555,61])

add_block('built-in/Transfer Fcn',[sys,'/','Feedforward gain'])
set_param([sys,'/','Feedforward gain'],...
		'Numerator','[7.12 0]',...
		'Denominator','[1 2]',...
		'position',[190,182,245,218])

add_block('built-in/Gain',[sys,'/','Proportional gain'])
set_param([sys,'/','Proportional gain'],...
		'Gain','-9.4',...
		'position',[200,57,245,93])

add_block('built-in/Gain',[sys,'/',['Integral',13,'gain']])
set_param([sys,'/',['Integral',13,'gain']],...
		'Gain','0.06',...
		'position',[185,112,230,148])

add_block('built-in/Sum',[sys,'/','Sum'])
set_param([sys,'/','Sum'],...
		'inputs','+++-',...
		'position',[340,112,360,158])

add_block('built-in/Sum',[sys,'/','Sum2'])
set_param([sys,'/','Sum2'],...
		'hide name',0,...
		'inputs','-+',...
		'position',[140,120,160,140])


%     Subsystem  ['Limited ',13,'Integrator'].

new_system([sys,'/',['Limited ',13,'Integrator']])
set_param([sys,'/',['Limited ',13,'Integrator']],'Location',[0,0,791,233])

add_block('built-in/Saturation',[sys,'/',['Limited ',13,'Integrator/Saturation']])
set_param([sys,'/',['Limited ',13,'Integrator/Saturation']],...
		'Lower Limit','lb',...
		'Upper Limit','ub',...
		'position',[630,121,675,149])

add_block('built-in/Fcn',[sys,'/',['Limited ',13,'Integrator/Fcn']])
set_param([sys,'/',['Limited ',13,'Integrator/Fcn']],...
		'Expr','u[2]*((((u[1]>lb)+(u[2]>=0))>0) * (((u[1]<ub)+(u[2]<=0))>0))',...
		'position',[150,116,520,154])

add_block('built-in/Inport',[sys,'/',['Limited ',13,'Integrator/In_1']])
set_param([sys,'/',['Limited ',13,'Integrator/In_1']],...
		'position',[20,130,40,150])

add_block('built-in/Outport',[sys,'/',['Limited ',13,'Integrator/Out_1']])
set_param([sys,'/',['Limited ',13,'Integrator/Out_1']],...
		'position',[720,125,740,145])

add_block('built-in/Integrator',[sys,'/',['Limited ',13,'Integrator/Integrator']])
set_param([sys,'/',['Limited ',13,'Integrator/Integrator']],...
		'Initial','xi',...

⌨️ 快捷键说明

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