📄 penddemo.m
字号:
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 + -