stuck in a small issue related to implementation of an aircraft trim condition code with cost function: error is "TOO MANY INPUT ARGUMENTS"

4 Ansichten (letzte 30 Tage)
% 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 Kommentare
John
John am 9 Feb. 2024
Error using transp
Too many input arguments.
Error in trim (line 21)
disp(['Initial cost= ', num2str(feval(name,s0))]);
John
John am 9 Feb. 2024
the transp function here defines three input arguments: time, x, and u.... Dont know how to get over with this error.....

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

VBBV
VBBV am 9 Feb. 2024
Bearbeitet: VBBV am 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');
name = 'cost_func'
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))]);
Initial cost= 2.3959
[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
minimizing vector= 1.3641
disp(['minimum cost vector= ',num2str(s)]);
minimum cost vector= 3677.669497 175148.1444 -1989.451985
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

Weitere Antworten (1)

Matthew Sisson
Matthew Sisson am 9 Feb. 2024
Bearbeitet: Matthew Sisson am 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

Kategorien

Mehr zu Multimodal finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by