2017-03-19 2 views
0

Ich habe dieses Matlab-Projekt, aber aus irgendeinem Grund kann ich einfach nicht aufhören darüber nachzudenken, weil ich es nicht zur Arbeit bringen konnte.Wie debugge ich diesen Matlab-Code, um den Gleitflug-Abstieg zu modellieren?

Ziel:

Dies ist ein MATLAB-Skript, das die Änderung von Druck, Temperatur und Dichte eines Segelflugzeugs berechnen würde, die von 10000 Fuß fallen gelassen wird. Wenn es fällt, wollen wir diese neuen Werte berechnen und dann eine Funktion einfügen, die 4 Gleichungen hat, die an jedem Punkt unter Verwendung von ode45 sowie der neuen Werte von P T und Rho differenziert werden müssen.

Hier ist der Hauptcode:

% HouseKeeping: 

clc 
clear all 
close all 

% Constants: 
S = 232;           % ft^2 
Cd0 = 0.02; 
K = 0.07; 
W = 11000;          % lbf 
Cl_max = sqrt(Cd0/K); 
Cd_max = 2*K*Cl_max^2; 
Rho_10000 = .001756;        % slugs/ ft^3 

%Initial conditions: 
t = 0;           % Sec 
x = 0;           % ft 
h = 10000;          % ft 
v = sqrt((2*W)/(Rho_10000*S*Cl_max));   %ft/s 
gamma = -Cd_max/Cl_max; 

% Find Endurance: 
V_RD= sqrt((2*W)/(S* Rho_10000* sqrt(3*Cd0/K))); 
RD= V_RD/((sqrt(3*Cd0/K))/(2*Cd0)) ;   % ft/s 
Endurcance= h/RD;        % 958.3515 sec 

% Sea Level values: 
TSL = 518.69;         % Rankine 
PSL = 2116.199414;        % lbs/ft^2 
RhoSL = 0.0023769;       % slugs/ft^3 

while h > 0 

    tspan = [t t+1]; 
    i=1; 
    X = [x;h;v;gamma;Rho_10000]; 
    Time(i)= t; 

    % Calling ODE45: 
    [F] = ode45(@ D,tspan, X) 

    % Hight Varying Parameters: 
    T = TSL - 0.00356616*h; 
    P = (1.137193514E-11)*(T)^5.2560613; 
    Rho = (RhoSL * TSL/PASL)*(P/T); 
    a = 49.0214 * (T)^.5; 

    H_Del(i) = (-Cd_max/Cl_max)*(plotted_x(i))+10000; 
    V_Del(i) = sqrt((2*W)/(Rho*S*Cl_max)); 
    Gamma_Del(i) = -Cd_max/Cl_max; 
    i= i+1; 

    X = [ x ; H_Del(i); V_Del(i); Gamma_Del(i); Rho]; 

end 



% Plots: 

%1 
figure (1) 
plot(F(:,1),'-r',F(:,3),'-b') 
title('Velocity vs Distance'); 
xlabel('x (ft)'); 
ylabel('v (ft/s)'); 


%2 
Figure (2) 
plot(F(:,1),'-r',F(:,2),'-b') 
title('Altitude vs Distance '); 
xlabel('x (ft)'); 
ylabel('h (ft)'); 


%3 
figure (3) 
plot(F(:,1),'-r',F(:,4),'-b') 
title('Gamma vs Distance'); 
xlabel('x (ft)'); 
ylabel('Gamma (rad)'); 

%4 
figure (4) 
plot(t,'-r',F(:,3),'-b') 
title('Velocity vs Time'); 
xlabel(' t (s)'); 
ylabel('v (ft/s)'); 

%5 
figure (5) 
plot(t,'-r',F(:,1),'-b') 
title(' Distance vs Time '); 
xlabel('t (s)'); 
ylabel('x (ft)'); 


%6 
figure (6) 
plot(t,'-r',F(:,4),'-b') 
title('Gamma vs Time '); 
xlabel('t (s)'); 
ylabel('Gamma (rad)'); 

%7 
figure (7) 
plot(t,'-r',F(:,3),'-b') 
title('Velocity vs Time'); 
xlabel('t (s)'); 
ylabel('V (ft/s)'); 

Hier wird die Funktion ist

function [F] = D(X) 

% Constants: 
S = 232;           % ft^2 
Cd0 = 0.02; 
K = 0.07; 
W = 11000;          % lbf 
Cl_max = sqrt(Cd0/K); 
Cd_max = 2*K*Cl_max^2; 
Rho_10000 = .001756;        % slugs/ ft^3 

% Initial conditions: 
t = 0;           % Sec 
x = 0;           % ft 
h = 10000;          % ft 
v = sqrt((2*W)/(Rho_10000*S*Cl_max));   % ft/s 
gamma = -Cd_max/Cl_max; 
g= 32.2;           % ft/s^2 

% Equations: 
X_Pr = X(3)*cos(X(4)); 
H_Pr = X(3)*sin(X(4)); 
V_Pr = (-32.2./W)*(0.5*X(5)*Cd_max*S*X(3)^2 + W*sin(X(4))); 
G_Pr = (32.2./(W*X(3)))*(0.5*X(5)*Cl_max*S*X(3)^2 - W*cos(X(4))); 

F = [X_Pr;H_Pr;V_Pr;G_Pr]; 

Ich bin nicht sehr gut mit Matlab, aber ich habe mein Bestes! Ich ging zu meinen Professoren um Hilfe, aber sie sagten, sie seien zu beschäftigt. Ich stakste sogar jeden Älteren, den ich kannte, und sie sagten alle, dass sie nicht wussten, wie es geht. Mein nächstes Projekt wird bald vergeben und ich denke, wenn ich das nicht kann, dann kann ich das nächste nicht machen.

+1

'Ich konnte es nicht zum Laufen bringen ???' - erkläre das Problem! Syntaxfehler, Lauffehler? unerwartete Ergebnisse? Machen Sie nicht nur Code durch und erwarten Sie, dass wir die Arbeit für Sie erledigen. – hpaulj

+0

Danke, Sir, und ich entschuldige mich aufrichtig dafür, dass Sie denken, dass ... wie ich bereits erwähnt habe, ich seit fast einem Monat an diesem Tag arbeite, ich weiß, dass mir das fehlt und ich natürlich nicht weiß, wie ich das machen soll, aber ich habe es wirklich versucht! Du kannst mich für meine Unfähigkeit verantwortlich machen, aber du kannst nicht sagen, dass ich es einfach rausschmeiße, damit die Leute es für mich tun, weil es nicht wahr ist. Und um Ihre Frage zu beantworten, ist es ALLE. Ich bin kein Programmierer und habe keine Erfahrung mit MATLAB, und auf einmal müssen wir es für etwas verwenden, das so kompliziert ist und erwarten, es richtig zu machen. – Gadless

Antwort

1

Ihr Code erzeugt den folgenden Fehler:

Error using main>D

Too many input arguments.

Das bedeutet, dass ode45 versucht Ihre bereitgestellte Funktion D mit zu vielen Eingabeargumente zu nennen. Sie sollten das gewünschte odefun Format in der ode45 Dokumentation überprüfen: dydt = odefun(t,y)

Also, sollten Sie Ihre Funktionsdeklaration von D zu

function [F] = D(t, X) 

Dieser Änderung sollte Ihr erstes Problem lösen, aber eine folgende Fehlermeldung erscheint:

D returns a vector of length 4, but the length of initial conditions vector is 5. The vector returned by D and the initial conditions vector must have the same number of elements.

Auch hier sollten Sie die ode45 Dokumentation überprüfen. Ihre Funktion sollte die Ableitungen aller Ihrer Eingabevariablen X: F = dX/dt zurückgeben. Sie sollten auch das Derivat des fünften Elements Rho_10000 zurückgeben.

Als nächstes habe ich einen Fehler über undefinierte Variablen wie PASL. Wahrscheinlich, weil Sie Ihren vollständigen Code nicht veröffentlicht haben.

Neben den Fehlern sollten Sie Ihren Code wirklich erneut überprüfen. Sie haben eine unendliche While-Schleife while h > 0 geschrieben. Sie ändern nie h in der Schleife, noch verwenden Sie die Ausgabe von ode45 in Ihrer Schleife. Außerdem überschreiben Sie immer Ihren Wert i und X am Anfang der Schleife, was wahrscheinlich nicht das ist, was Sie wollen.

Dies ist keine vollständige Antwort auf Ihre Frage, aber ich hoffe, dass Sie in der Lage sein werden, kleinere, gut definierte Probleme zu veröffentlichen, statt eines großen Problems, das sehr schwer vollständig zu beantworten ist.

+0

Vielen Dank Herr. Das war sehr hilfreich! danke, dass du dir die Zeit genommen hast, mein Drehbuch anzusehen, es bedeutet mir so viel. Ich werde es wieder versuchen mit allem, was ich von dir gelernt habe. Vielen Dank! – Gadless

Verwandte Themen