Too many input arguments.
1 view (last 30 days)
Show older comments
Turgut Ataseven
on 26 Dec 2021
Commented: Star Strider
on 26 Dec 2021
Hi. My code tries to solve 6 ODEs with 6 state variables [horizontal position (x1 and x2), altitude (x3), the true airspeed (x4), the heading angle (x5) and the mass of the aircraft (x6)] and 3 control inputs [engine thrust (u1), the bank angle (u2) and the flight path angle (u3)] by using Euler's method.
Velocities.m, Cruise_Vel.m, Des_Vel.m, Thr_cl.m, Thr_cr.m, Thr_des.m, fuel_cl.m, fuel_cr.m, fuel_des.m are functions in seperate files. Code in the main file (FlightPlan.m) is:
% Climb from h1=1100 [m] to h2=1600 [m] with α=5 flight path angle.
% Perform cruise flight for t=60 minutes.
% Turn with β=30 bank angle until heading is changed by η=270◦.
% Descent from h2=1600 [m] to h1=1100 [m] with ζ=4◦ flight path angle.
% Complete a 360◦ turn (loiter) at level flight.
% Descent to h3=800 [m] with κ=4.5◦ flight path angle.
% Aircraft Properties
W = .44225E+06; % .44225E+03 tons = .44225E+06 kg
S = .51097E+03; % Surface Area [m^2]
% Equations
% dx1 = x4*cos(x5/180*pi)*cos(u3/180*pi);
% dx2 = x4*sin(x5/180*pi)*cos(u3/180*pi);
% dx3 = x4*sin(u3/180*pi);
% dx4 = -C_D*S*p*x4.*x4/(2*x6)-g0*sin(u3/180*pi)+u1/x6;
% dx5 = -Cl*S*p*x4/(2*x6)/sin(u2/180*pi);
% dx6 = -f;
dx1dt = @(x4,x5,u3) x4.*cos(x5*pi/180).*cos(u3*pi/180);
dx2dt = @(x4,x5,u3) x4*sin(x5*pi/180)*cos(u3*pi/180);
dx3dt = @(x4,u3) x4*sin(u3*pi/180);
dx4dt = @(C_D,p,x6,x4,u3,u1) -C_D*S*p*x4.*x4/(2*x6)-g0*sin(u3)+u1/x6;
dx5dt = @(Cl,p,x6,x4,u2) -Cl*S*p*x4/(2*x6)/sin(u2);
dx6dt = @(f) -f;
% solving 1st order ODE using numerical methods
t0=0;
tend=66;
h=0.2;
N=(tend-t0)/h;
t=t0:h:tend;
% Initial conditions
x1(1) = 0; % Initial position [m]
x2(1) = 0; % Initial position [m]
x3(1) = 3608.92; % Initial altitude [ft]
x4(1) = Vtas_cl(1); % Initial speed [m/s]
x5(1) = 0; % Assuming aircraft headed to North initially.
x6(1) = W; % Initial mass [kg]
u1(1) = Thr_jet_climb_ISA(1); % Initial thrust [N]
u2(1) = 0; % Initial bank angle [deg]
u3(1) = 5; % Initial flight path angle [deg]
if and (t >= 0,t<=1) % Climb from h1=1100 [m] to h2=1600 [m] with α=5 flight path angle.
x3(t) = linspace(3608.9,5249.3,2); % Changing altitude [m] -> [ft]
x4(t) = Velocities(3608.9,5249.3); % Changing speed [m/s]
x5(t) = 0; % Changing head angle [deg]
f(t) = fuel_cl(3608.9,5249.3); % Changing fuel flow [kg/min]
u1(t) = Thr_cl(3608.9,5249.3); % Changing thrust [N]
u2(t) = 0; % Changing bank angle [deg]
u3(t) = 5; % Changing flight path angle [deg]
V_ver(t) = x4(t)*sin(u3(t)*pi/180); % Changing vertical speed [m/s]
end
if and (t >1,t<=61) % Perform cruise flight for t=60 minutes.
x3(t) = 5249.3; % Changing altitude [m] -> [ft]
x4(t) = Cruise_Vel(5249.3); % Changing speed [m/s]
x5(t) = 0; % Changing head angle [deg]
f(t) = fuel_cr(5249.3); % Changing fuel flow [kg/min]
u1(t) = Thr_cr(5249.3); % Changing thrust [N]
u2(t) = 0; % Changing bank angle [deg]
u3(t) = 0; % Changing flight path angle [deg]
V_ver(t) = x4(t)*sin(u3(t)*pi/180); % Changing vertical speed [m/s]
end
if and (t >61,t<=62) % Turn with β=30 bank angle until heading is changed by η=270◦.
x3(t) = 5249.3; % Changing altitude [m] -> [ft]
x4(t) = Cruise_Vel(5249.3); % Changing speed [m/s]
x5(t) = 0:30:270; % Changing head angle [deg]
f(t) = fuel_cr(5249.3); % Changing fuel flow [kg/min]
u1(t) = Thr_cr(5249.3); % Changing thrust [N]
u2(t) = 30; % Changing bank angle [deg]
u3(t) = 0; % Changing flight path angle [deg]
V_ver(t) = x4(t)*sin(u3(t)*pi/180); % Changing vertical speed [m/s]
end
if and (t >62,t<=63) % Descent from h2=1600 [m] to h1=1100 [m] with ζ=4◦ flight path angle.
x3(t) = linspace(5249.3,3608.9,2); % Changing altitude [m] -> [ft]
x4(t) = Des_Vel(5249.3,3608.9); % Changing speed [m/s]
x5(t) = 270; % Changing head angle [deg]
f(t) = fuel_des(5249.3,3608.9); % Changing fuel flow [kg/min]
u1(t) = Thr_des(5249.3,3608.9); % Changing thrust [N]
u2(t) = 0; % Changing bank angle [deg]
u3(t) = 4; % Changing flight path angle [deg]
V_ver(t) = x4(t)*sin(u3(t)*pi/180); % Changing vertical speed [m/s]
end
if and (t >63,t<=65) % Complete a 360◦ turn (loiter) at level flight.
x3(t) = 3608.9; % Changing altitude [m] -> [ft]
x4(t) = Cruise_Vel(3608.9); % Changing speed [m/s]
lon = [270 300 360 60 120 180 240 270];
x5(t) = wrapTo360(lon); % Changing head angle [deg]
f(t) = fuel_cr(3608.9); % Changing fuel flow [kg/min]
u1(t) = Thr_cr(3608.9); % Changing thrust [N]
u2(t) = 0; % Changing bank angle [deg]
u3(t) = 0; % Changing flight path angle [deg]
V_ver(t) = x4(t)*sin(u3(t)*pi/180); % Changing vertical speed [m/s]
end
if and (t >65,t<=66) % Descent to h3=800 [m] with κ=4.5◦ flight path angle.
x3(t) = linspace(3608.9,2624.67,2); % Changing altitude [m] -> [ft]
x4(t) = Des_Vel(3608.9,2624.67); % Changing speed [m/s]
x5(t) = 270; % Changing head angle [deg]
f(t) = fuel_des(3608.9,2624.67); % Changing fuel flow [kg/min]
u1(t) = Thr_des(3608.9,2624.67); % Changing thrust [N]
u2(t) = 0; % Changing bank angle [deg]
u3(t) = 4.5; % Changing flight path angle [deg]
V_ver(t) = x4(t)*sin(u3(t)*pi/180); % Changing vertical speed [m/s]
end
for i=1:N
% solving using Euler's explict method
x1(i+1)=x1(i)+h*dx1dt(t(i),x4(i),x5(i),u3(i)); % line 127 %%%%%%%%%%%%%%%%%%%%%%%%%
x2(i+1)=x2(i)+h*dx2dt(t(i),x4(i),x5(i),u3(i));
x3(i+1)=x3(i)+h*dx3dt(t(i),x4(i),u3(i));
x4(i+1)=x4(i)+h*dx4dt(t(i),C_D(i),p(i),x6(i),x4(i),u3(i),u1(i));
x5(i+1)=x5(i)+h*dx5dt(t(i),Cl(i),p(i),x6(i),x4(i),u2(i));
x6(i+1)=x6(i)+h*dx6dt(t(i),f(i));
end
tot=cell2mat(f); % Total fuel consumption during mission [kg/min]
Tot_fuel=sum(tot);
figure(1)
plot3(x1(:),x2(:),x3(:)); % 3D position graph
figure(2)
plot(t,x4(:)); % Vtas − Time graph
figure(3)
plot(t,V_ver(:)); % V_vertical − Time graph
figure(4)
plot(t,x5(:)); % Heading − Time graph
figure(5)
plot(t,x6(:)); % Mass − Time graph
figure(6)
plot(t,u1(:)); % Thrust − Time graph
figure(7)
plot(t,u2(:)); % Bank Angle − Time graph
figure(8)
plot(t,u3(:)); % Flight Path Angle − Time graph
fprintf('Total fuel consumption during mission is %.2f [kg]',Tot_fuel*tend);
legend('Euler');
And I encountered with this error:
Error using FlightPlan>@(x4,x5,u3)x4.*cos(x5*pi/180).*cos(u3*pi/180)
Too many input arguments.
Error in FlightPlan (line 127)
x1(i+1)=x1(i)+h*dx1dt(t(i),x4(i),x5(i),u3(i));
x3,x4,V_ver,x6,C_D,Cl,p,u1 varies with altitude. u1, u2 and u3 are not in any of the seperate files I mentioned above.
As you see, I need to plot "time vs variables" graphs and print total fuel consumption. I don't know if I defined them correctly with respect to time correctly, can you inform me?
What should I change to work Euler method correctly?
I can uplod other files if necessary.
Thank you all.
0 Comments
Accepted Answer
Star Strider
on 26 Dec 2021
The ‘dx1dt’ anonymous function takes 3 arguments —
dx1dt = @(x4,x5,u3) x4.*cos(x5*pi/180).*cos(u3*pi/180);
however the call to it in Line 127 gives it 4 arguments —
x1(i+1)=x1(i)+h*dx1dt(t(i),x4(i),x5(i),u3(i));
Therein lies the problem.
I have no idea which of those arguments need to be provided, however this (without the ‘t(i)’ argument, since the function does not use it anyway) —
x1(i+1)=x1(i)+h*dx1dt(x4(i),x5(i),u3(i));
will likely run without error.
.
2 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!