stuck in a small issue related to implementation of an aircraft trim condition code with cost function: error is "TOO MANY INPUT ARGUMENTS"
4 views (last 30 days)
Show older comments
% TRIM.m
clear; clc; close all;
global x u gamma;
x(1) = 170;
x(5) = 0;
gamma = 0;
name = input('Name of Cost function file? : ','s');
cg= 0.25; land=1; % 0 = clean 1=gear+flaps;
u = [0.1 -10 cg land];
x(2)= .1; % Alpha, initial guess
x(3)=x(2) + gamma; % Theta
x(4)=0; % Pitch rate
x(6)=0;
s0=[u(1) u(2) x(2)];
% Now initialize any other states and get initial cost
disp(['Initial cost= ', num2str(feval(name,s0))]);
[s,fval]= fminsearch(name,s0);
x(2) = s(3) ; x(3) = s(3)+ gamma;
u(l)=s(1); u(2)=s(2);
disp(['minimizing vector= ',num2str(feval)]);
disp(['minimum cost vector= ',num2str(s)]);
temp=[length(x), length(u),x,u];
name= input('Name of output file? : ',' s');
dlmwrite(name,temp);
% Medium-sized transport aircraft, longitudinal dynamics
time = 0.0;
function[xd] = transp(time,x,u)
%Aircraft Data
S=2170.0; CBAR=17.5; MASS=5.0E3; IYY= 4.1E6;
TSTAT=6.0E4; DTDV =-38.0; ZE = 2.0; CDCLS= .042;
CLA = .085; CMA = -.022; CMDE =-.016; % per degree
CMQ =-16.0; CMADOT= -6.0; CLADOT= 0.0; % per radian
RTOD = 57.29578; GD=32.17;
% defining input parameters
THTL = u(1);
ELEV = u(2);
XCG = u(3);
LAND = u(4);
VT = x(1);
ALPHA= RTOD*x(2);
THETA= x(3);
Q = x(4);
H = x(5);
QBAR = 34.34; %0.5 * (2.377E-3) * VT^2;
QS = QBAR*S;
SALP= sin (x(2));
GAM = THETA - x(2); SGAM = sin(GAM); CGAM = cos(GAM);
if LAND == 0
CLO= .20; CDO= .016;
CMO= .05; DCDG= 0.0; DCMG= 0.0;
elseif LAND == 1 % LANDING FLAPS ON & GEAR DOWN
CLO= 1.0;
CMO= -.20; DCDG= 0.02; DCMG= -0.05;
else
disp('Landing Gear and Flaps ?')
end
THR= (TSTAT+VT*DTDV)*max(THTL,0); % THRUST
CL=CLO+CLA*ALPHA; % NONDIM. LIFT
CM=DCMG+CMO+CMA*ALPHA+CMDE*ELEV+CL*(XCG-.25); % MOMENT
CD = DCDG+CDO+(CDCLS*CL*CL); % DRAG POLAR
% State EQUATIONS NEXT
xd(1) = (THR*CALP) - (QS*CD)/ MASS - (GD*SGAM);
xd(2)= (-THR*SALP-QS*CL+MASS*((VT*Q)+(GD*CGAM)))/(MASS*VT+QS*CLADOT);
xd(3)= Q;
xd(5)= VT*SGAM; % Verticle Speed
xd(6)= VT*CGAM; % Horizonal Speed
D = .5*CBAR*(CMQ*Q+CMADOT*xd(2))/VT; % PITCH DAMPING
xd(4)= (QS*CBAR*(CM + D) + THR*ZE)/ IYY; % Q-DOT
end
%% COST FUNCTION
function[f]=cost_func(s)
global x u
u(1) = 0.1;
u(2) = -10;
x(2) = 0;
x(3) = x(2);
u(1)=s(1); u(2)=s(2);
x(2) = s(3);
s0=[u(1) u(2) x(2)];
time = 0.0;
[xd] = transp(time,x,u);
f= xd(1)^2 + 100*xd(2)^2 + 10*xd(4)^2;
end
3 Comments
Accepted Answer
VBBV
on 9 Feb 2024
Edited: VBBV
on 9 Feb 2024
Few syntax and typo errors that are persistent in your code need to checked.
% TRIM.m
clear; clc; close all;
% x u gamma;
x = zeros(1,6); % define x
u = zeros(1,4); % define u
x(1) = 170;
x(5) = 0;
gamma = 0;
name = 'cost_func' %input('Name of Cost function file? : ','s');
cg= 0.25;
land=1; % 0 = clean 1=gear+flaps;
u = [0.1 -10 cg land];
x(2)= .1; % Alpha, initial guess
x(3)=x(2) + gamma; % Theta
x(4)=0; % Pitch rate
x(6)=0;
s0=[u(1) u(2) x(2)];
% Now initialize any other states and get initial cost
disp(['Initial cost= ', num2str(feval(name,x,u,s0))]);
[s,fval]= fminsearch(@cost_func,s0); % syntax error while using fminsearch
x(2) = s(3) ; x(3) = s(3)+ gamma;
u(1)=s(1); % typo error
u(2)=s(2);
disp(['minimizing vector= ',num2str(fval)]); % typo error
disp(['minimum cost vector= ',num2str(s)]);
temp=[length(x), length(u),x,u];
% name= input('Name of output file? : ',' s');
% dlmwrite(name,temp);
% Medium-sized transport aircraft, longitudinal dynamics
time = 0.0;
%% COST FUNCTION
function[f]=cost_func(x,u,s)
% global x u
u(1) = 0.1;
u(2) = -10;
x(2) = 0;
x(3) = x(2);
x(4) = 0;
x(5) = 0; x(6) = 0;
% u(1)=s(1);
% u(2)=s(2);
% x(2) = s(3);
s0=[u(1) u(2) x(2)];
time = 0.0;
[xd] = transp(time,x);
f = xd(1)^2 + 100*xd(2)^2 + 10*xd(4)^2;
end
function[xd] = transp(time,x)
%Aircraft Data
S=2170.0; CBAR=17.5; MASS=5.0E3; IYY= 4.1E6;
TSTAT=6.0E4; DTDV =-38.0; ZE = 2.0; CDCLS= .042;
CLA = .085; CMA = -.022; CMDE =-.016; % per degree
CMQ =-16.0; CMADOT= -6.0; CLADOT= 0.0; % per radian
RTOD = 57.29578; GD=32.17;
cg= 0.25;
land=1; % 0 = clean 1=gear+flaps;
u = [0.1 -10 cg land];
% x = zeros(1,6);
% defining input parameters
THTL = u(1);
ELEV = u(2);
XCG = u(3);
LAND = u(4);
VT = x(1);
ALPHA= RTOD*x(2);
THETA= x(3);
Q = x(4);
H = x(5);
QBAR = 34.34; %0.5 * (2.377E-3) * VT^2;
QS = QBAR*S;
SALP= sin (x(2));
GAM = THETA - x(2);
SGAM = sin(GAM);
CGAM = cos(GAM);
THR= (TSTAT+VT*DTDV)*max(THTL,0); % THRUST
if LAND == 0
CLO= .20; CDO = .016;
CMO= .05; DCDG= 0.0; DCMG= 0.0;
CL=CLO+CLA*ALPHA; % NONDIM. LIFT
CM=DCMG+CMO+CMA*ALPHA+CMDE*ELEV+CL*(XCG-.25); % MOMENT
CD = DCDG+CDO+(CDCLS*CL*CL); % DRAG POLAR
elseif LAND == 1 % LANDING FLAPS ON & GEAR DOWN
CLO= 1.0;
CMO= -.20; DCDG= 0.02; DCMG= -0.05;
CDO = .016;
CL=CLO+CLA*ALPHA; % NONDIM. LIFT
CM=DCMG+CMO+CMA*ALPHA+CMDE*ELEV+CL*(XCG-.25); % MOMENT
CD = DCDG+CDO+(CDCLS*CL*CL); % DRAG POLAR
%
else
disp('Landing Gear and Flaps ?')
end
% State EQUATIONS NEXT
xd(1) = (THR*SALP) - (QS*CD)/ MASS - (GD*SGAM);
xd(2)= (-THR*SALP-QS*CL+MASS*((VT*Q)+(GD*CGAM)))/(MASS*VT+QS*CLADOT);
xd(3)= Q;
xd(5)= VT*SGAM; % Verticle Speed
xd(6)= VT*CGAM; % Horizonal Speed
D = .5*CBAR*(CMQ*Q+CMADOT*xd(2))/VT; % PITCH DAMPING
xd(4)= (QS*CBAR*(CM + D) + THR*ZE)/ IYY; % Q-DOT
end
More Answers (1)
Matthew Sisson
on 9 Feb 2024
Edited: Matthew Sisson
on 9 Feb 2024
Your error might be related to user input on the following line.
name = input('Name of Cost function file? : ','s');
I assume you are entering "cost_func" as shown:
--> Name of Cost function file? : cost_func
See Also
Categories
Find more on Multimodal in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!