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

📄 trimdemo.m

📁 matlab的FDC工具箱
💻 M
字号:
%-----------------------------------------------------------------% TRIMDEMO% ========% Demonstrates the trimming facility by determining trimmed-flight% elevator deflections as a function of the true airspeed V for% the DHC-2 'Beaver' aircraft (horizontal, wings-level flight).%% The trim code from this program has largely been copied from% ACTRIM.M. See the source code of that program for more info% about the optimization process. Note: in future versions of the% FDC toolbox, it is planned to put the actual trim-computations% completely into separate Matlab functions in order to enhance% the flexibility of ACTRIM. That will make it easier to create% applications such as this trim-demo program.%-----------------------------------------------------------------clcdisp('  The FDC toolbox - TRIMDEMO');disp('  ==========================');disp('  Demonstration of the trimming facility. Determining trimmed-');disp('  flight elevator deflections for ten different airspeeds V by');disp('  calling the Beaver model. This will take some time to compute!');disp(' ');% Load aircraft parameters for the 'Beaver' model.% ------------------------------------------------load aircraft.dat -matxinco=[45,zeros(1,11)]';xfix=1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% USER INPUTS: (PARTLY) DEFINE FLIGHT CONDITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Steady horizontal wings-level flight-condition (user-input% for altitude, flaps and engine speed only).% ----------------------------------------------------------H = input('  Altitude [ft], default = 3000: ');if isempty(H)   H = 3000;endH = H*0.3048; % feet to metresdeltaf = input('  Flap angle [deg], default = 0: ')*pi/180;if isempty(deltaf)   deltaf = 0;endn = input('  Engine speed [RPM], default = 1800: ');if isempty(n)   n = 1800;endpsi      = 0;                        % heading [rad]phi      = 0;                        % roll angle [rad]gamma    = 0;                        % flightpath angle [rad]phidot   = 0;                        % roll rate [rad/s]psidot   = 0;                        % yaw rate [rad/s]thetadot = 0;                        % pitch rate [rad/s]G        = 0;                        % centripetal acceleration [m/s^2]pz       = 20; % Initial guess of manifold pressure ["Hg]deltae   = []; % Will be filled with deltae-value for 10 velocities.% Display results header% ----------------------disp(' ');disp('  ---');disp(' ');disp('  TRIMDEMO will now compute steady-state flight conditions');disp('  for ten different values of the airspeed.');disp(' ');disp('  <<< Press any key to continue >>>');pause;disp(' ');disp('  ---');disp(' ');disp('  Working ... ');disp(' ');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ACTUAL TRIM PROCESS                                       %%                                                           %% MOST OF THE FOLLOWING CODE HAS BEEN COPIED FROM ACTRIM.M! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The Simulink system BEAVER or an equivalent aircraft model is called by% the function call xdot = feval('beaver',t,x,u,'outputs'), followed by% xdot = feval('beaver',t,x,u,'derivs') to obtain the time-derivatives of% the state vector x. Here t = 0 (system is time-independent). The% function call is created here, and stored in the variable modfun.% Note: the aircraft model itself will be compiled before applying these% function calls!% -----------------------------------------------------------------------modfun   = ['xdot = feval(''beaver'',0,x,u,''outputs''); '];modfun   = [modfun 'xdot = feval(''beaver'',0,x,u,''derivs'');'];% Pre-compile the aircraft model.% -------------------------------warning offfeval('beaver',[],[],[],'compile');warning on% Set default warning flag (will be set to 1 if optimization solution% doesn't converge)% -------------------------------------------------------------------warningflag = 0;% Take 10 different velocities within the 'Beaver' flight-envelope% ================================================================for V = 30:3:60,                                  % TAS-range [m/s]  % Initial guess of state vector  % -----------------------------  xinco = [V 0 0 0 0 0 0 0 0 0 0 0]';  % constant variables  % ------------------  ctrim = [V H psi gamma G psidot thetadot phidot deltaf n phi]';  % vtrim = [alpha beta deltae deltaa deltar pz]', will be adjusted  % by trim algorithm  % ---------------------------------------------------------------  vtrim = [0 0 0 0 0 pz]';  options = optimset('Display','off','TolX',1e-10,'MaxFunEvals',5000,'MaxIter',3000);  [vtrimmed,fval,exitflag,output] = fminsearch('accost',vtrim,options,...                                   ctrim,'s','c','f',modfun);    % Display error message when maximum number of iterations is   % reached before finding converged solution  % ----------------------------------------------------------  if exitflag == 0      warning('Maximum number of iterations was exceeded!');      disp(['- velocity in loop: ' num2str(V) 'm/s']);      disp(['- number of function evaluations: ' num2str(output.funcCount)]);      disp(['- number of iterations: ' num2str(output.iterations)]);      disp(' ');      warningflag = 1;  else       disp(['Converged to a trimmed solution at V = ' num2str(V) 'm/s']);  end     % Call subroutine ACCONSTR, which contains the flight-path constraints   % once more to obtain the final values of the inputvector and states   % --------------------------------------------------------------------   [x,u] = acconstr(vtrimmed,ctrim,'s','c','f');   deltae = [deltae u(1)];end% Release compiled aircraft model now that all results are known% --------------------------------------------------------------feval('beaver',[],[],[],'term');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CREATE TRIMMED-FLIGHT ELEVATOR DEFLECTION CURVE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot results% ------------V = [30:3:60];plot(V,-deltae*180/pi);title('Elevator deflection vs. true airspeed');xlabel('V [m/s]');ylabel('-\delta_{e} [deg]');text(35, 0  , ['Flap angle: ' num2str(deltaf*180/pi) ' deg']);text(35, 0.8, ['Engine speed: ' num2str(n) ' RPM']);text(35, 1.6, ['Altitude: ' num2str(H) ' m']);% If one or more points did not converge, display warning message% ---------------------------------------------------------------if warningflag == 1   h=text(35,5,'Warning: one or more solutions did not converge!');   set(h,'Color',[1 0 0]);end% Plot ready message% ------------------disp(' ');disp('  ---');disp(' ');disp('  Trimming process is finished. The resulting elevator');disp('  deflection curve has been plotted in the figure window.');if warningflag == 1   disp(' ');   disp('  Warning: one or more solutions did not converge!');   disp('  Try to increase max. number of iterations in FMINSEARCH');   disp('  call to obtain a more accurate solution.');enddisp(' ');figure(gcf);disp(' ');% Get rid of variables from optimization process which% are not needed anymore.% ----------------------------------------------------clear ctrim vtrim vtrimmed fval options output modfun exitflag warningflag%-----------------------------------------------------------------------% The Flight Dynamics and Control Toolbox version 1.4.0. % (c) Copyright Marc Rauw, 1994-2003. Licensed under the Open Software % License version 2.1; see COPYING.TXT and LICENSE.TXT for more details.% Last revision of this file: December 31, 2004.  %-----------------------------------------------------------------------

⌨️ 快捷键说明

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