Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Softwareentwickler Automotive Getriebesteuerungen (m/w)
Umsetzung der Softwarefunktionalität modellbasiert nach Spezifikation
MBtech Group GmbH & Co. KGaA - Sindelfingen

Systemingenieur (m/w) Funktionsentwicklung Automotive
Konzeption und Spezifikation von spezifischen Funktionen in elektronischen Steuergeräten
DRÄXLMAIER Group - Vilsbiburg bei Landshut

Applikationsingenieur (w/m) Testsysteme HIL-Simulation
Projektierung von Hardware-in-the-Loop-Systemen (Hardware und Software) in Kundenprojekten
dSPACE GmbH - Paderborn

Resident-Ingenieur (w/m) Hardware-in-the-Loop-Simulation
Inbetriebnahme und Software-Anpassungen der HIL-Systeme
dSPACE GmbH - Wolfsburg

System-Entwickler (m/w)
Analyse und Spezifikation von Systemanforderungen & Abstimmung von Anforderungen
MicroNova AG - Friedrichshafen

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

x-Wert abhängige Variable aus Wertetabelle auslesen

 

Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2017, 12:09     Titel: x-Wert abhängige Variable aus Wertetabelle auslesen
  Antworten mit Zitat      
Guten Tag zusammen,
mein Name ist Benjamin und ich habe ein Problem. Wink

Ich berechne mit meinem Matlabprogramm die Trajektorie eines Projektils (ich weiß - schon tausend mal hier gewesen).

Das Programm steht soweit, lediglich bei der Luftdichte stoße ich an ein (eigentlich recht einfaches) Problem, dass ich selbst nicht lösen kann. Leider blieb auch die Forensuche erfolglos.

Am einfachsten wäre es für die Luftdichte eine Wertetabelle anzulegen. Das habe ich getan. Und direkt eine neue Variable eingeführt, wo die erste Spalte meine Höhe, die zweite meine Luftdichte ist.

Jetzt soll innerhalb von ODE45 der aktuelle x-Wert mit Spalte 1 verglichen werden und anschließend der passende Luftdichte-Wert (ggfs interpoliert mit interp1) in die Berechnung mit eingehen. Die Tabelle hat 2 Spalten 101 Zeilen.


folgend ein kleiner Ausschnitt zur Verdeutlichung.
______________________________________________________________
% Integration des Anfangswertproblems:
% options = odeset( 'MaxStep' , 0.01) ;
[t, x] = ode45 (@dp , tspan , y0) ;


H = x(:,1)/1000;
v = x(:,2)/1000;

% festlegen der Grafikfenstergröße
scrsz = get(0,'ScreenSize');
%figure = Grafikfenster öffnen,
figure('Position',[scrsz(3)/3 scrsz(4)/50 scrsz(3)/2 scrsz(4)*.5]);


hoehemin = str2num(get(handles.hoehemin, 'String'))
hoehemax = str2num(get(handles.hoehemax, 'String'))
geschwmin = str2num(get(handles.geschwmin, 'String'))
geschwmax = str2num(get(handles.geschwmax, 'String'))

plot (H , v) , grid on , title (['Startwerte: x0=' num2str(x0) ' v0=' num2str(v0) ' Geschossparameter: m=' num2str(mSat) ' d=' num2str(d) ' cW=' num2str(cW)]), xlabel ('Höhe [km]'), ylabel ('Geschwindigkeit [km/s]')
axis([hoehemin, hoehemax, geschwmin, geschwmax]); % axis([xmin, xmax, ymin, ymax])



function dxdt = dp(t, x)

global mE G mM rEM g0 RL A mSat cW roh rE



div1 = (rE + x(1)); % Abstand zum Erdmittelpunkt
div2 = (rEM - rE - x(1)); % Abstand zum Mondmittelpunkt

dxdt(1) = x(2);
dxdt(2) = -0.5 * cW * roh * (A/mSat)*x(2)^2 - (G * mE)/div1.^2 + (G * mM)/div2.^2;

_______________________________________________


Bislang habe ich mit Schleifen versucht das Problem zu lösen, die Lösung hinkt allerdings sobald noch andere Werte variieren.

Programm bisher:

if (x(1) < 11000)
betta = - 6.5/1000;
elseif (11000 < x(1) < 20000)
betta = 0;
elseif (20000 < x(1) < 32000)
betta = 1/1000 ;
elseif (32000 < x(1) < 47000)
betta = 2.8/1000;
elseif (47000 < x(1) < 51000)
betta = 0;
elseif (51000 < x(1) < 71000)
betta = -2.8/1000 ;
elseif (71000 < x(1) < 80000)
betta = -2/1000 ;
else
betta = 0 ;
end


Temp = Temp0 + betta*(x(1));
% pL = p0 * exp(-(g0 *x(1)) /(RL*Temp));
pL = p0 *(1 + (betta * x(1))/Temp)^(-g0/(betta * RL));
roh = pL/(RL*Temp);

Das Problem ist hier alleine der Startwert für die Höhe. Dann wird die erste Abnahme der Luftdichte nicht mehr mit in die Berechnung genommen.

Hat jemand zufällig einen Vorschlag wie man es elegant lösen könnte?

Ich würde mich über einen Hinweis sehr freuen.

LG


Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 14.12.2017, 22:40     Titel:
  Antworten mit Zitat      
Hallo,

was nun die Frage ist, ist mir nicht wirklich klar. Statt Zeilen wie
Code:
elseif (11000 < x(1) < 20000)

solltest du
Code:
elseif (11000 < x(1) && x(1) < 20000)

verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2017, 09:28     Titel:
  Antworten mit Zitat      
Hallo Harald, vielen Dank schon mal.

Was würde sich dadurch ändern? && sagt doch nur, dass es ein Skalarvergleich ist, oder?



Meine Frage: Anstelle der IF - Elseif - Schleife, würde ich gerne Werte für "roh" in einer Wertetabelle angeben. Aktuell wird es über die Schleife ausgerechnet.

Heißt ich will eine Variable mit zwei Spalten haben, erste Spalte die Höhe, zweite Spalte die dazugehörige Luftdichte. Dann soll der x(1)-Wert mit der Höhe verglichen und der jeweilige Luftdichtenwert interpoliert an die Funktion übergeben werden.

Im Endeffekt möchte ich nur schauen wie die Werte von der aktuellen Berechnung abweichen. Nur weiß ich leider nicht wie ich eine Variable mit den zwei Spalten vergleichend und interpolierend einbaue. (den Befehl interp1 habe ich schon im Forum gefunden, nur komme ich damit nicht weiter)


Ich hoffe das hilft um mein Problem einzugrenzen.

LG
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 15.12.2017, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Was würde sich dadurch ändern?

Es würde nicht mehr etwas gerechnet, das du vermutlich nicht willst.

11000 < x(1) < 20000 ist immer erfüllt, da es von links nach rechts ausgewertet wird:

11000 < x(1) ist true oder false, was in 1 oder 0 umgewandelt wird. 0 und 1 sind aber < 20000.

interp1 mit Interpolationsmethode previous dürfte die Lösung sein. Was hast du mit interp1 versucht und welche Probleme sind dabei aufgetreten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2017, 12:08     Titel:
  Antworten mit Zitat      
Hallo und Danke dir!

Ich würde gerne die IF-Schleife durch eine Variable "roh" ersetzen.
Also roh als Wertetabelle einbinden. - Dann fiele die ganze Schleife weg.

roh ändert sich ja in Abhängigkeit von x(1) (der aktuellen Höhe)
ich dachte also daran eine neue Variable, z.B. 'rohTab' einzuführen, die für einige Höhen die dazugehörigen Dichten enthält.

Höhe m Luftdichte kg/m³
0 1.225863821138
1000 1.109079821450
2000 0.998601188436
3000 0.894511991890
... ...
Jetzt würde ich gerne x(1) zyklisch mit Spalte 1 vergleichen und dann den dazugehörigen Dichte-Wert als roh herausziehen. Wäre x(1) z.B. = 500, soll der Dichtewert zwischen 0 und 1000 m interpoliert werden.

Ich würde dir gerne Ausschnitte zeigen, allerdings weiß ich nicht einmal wie ich dort anfangen könnte.


LG

luftdichte.JPG
 Beschreibung:

Download
 Dateiname:  luftdichte.JPG
 Dateigröße:  68.13 KB
 Heruntergeladen:  16 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 15.12.2017, 12:35     Titel:
  Antworten mit Zitat      
Hallo,

dann etwa so:

Code:
neueDichte = interp1(hoehe, dichte, x(1))


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2017, 12:20     Titel:
  Antworten mit Zitat      
Hallo Harald,

Wenn ich den Code ändere zu:
dxdt(1) = x(2); % Ableitung von x ist Geschwindigkeit
dxdt(2) = - 0.5 * cW * neueDichte * (A/mSat)*x(2)^2 - (G * mE)/div1.^2 + (G * mM)/div2.^2;
% dxdt (2) = Beschleunigung = ist gleich..
roh = [0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000 21000 22000 23000 24000 25000 26000 27000 28000 29000 30000 31000 32000 33000 34000 35000 36000 37000 38000 39000 40000 41000 42000 43000 44000 45000 46000 47000 48000 49000 50000 ... ; 1.22586382113800 1.10907982145000 0.998601188436000 0.894511991890000 0.796870777754000 0.705708371803000 0.621025791351000 0.542792323930000 0.470943840142000 0.405381416014000 0.345970347386000 0.292539644796000 0.244882100917000 0.202755023024000 0.165881718908000 0.133953814858000 0.106634467365000 0.0835625045400000 0.0643574978730000 0.0486257188320000 0.0359668781830000 0.0299205963160000 0.0249438227250000 0.0208384253940000 0.0174445647930000 0.0146329983680000 0.0122989886680000 0.0103574694450000 0.00873920095300000 0.00738770497600000 0.00625681590700000 ...]

Hoehe = roh(1)
Dichte = roh(2)

neueDichte = interp1(Hoehe, Dichte, x(1))

kommt die Fehlermeldung:
In an assignment A(Smile = B, the number of elements in A and B must be the same.

Woran könnte das liegen?

Vielen Dank und LG
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 19.12.2017, 13:27     Titel:
  Antworten mit Zitat      
Hallo,

die Definition von rho ist so nicht gültig.

Vermutlich sollen Hoehe und Dichte Zeilen oder Spalten von rho sein? Du extrahierst nur einzelne Elemente.

Am einfachsten ist das ganze mit einem reproduzierbaren Beispiel.

Bei Fehlermeldungen bitte immer dazuschreiben, in welcher Zeile sie auftreten, und für Code die Code-Umgebung verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2017, 14:35     Titel:
  Antworten mit Zitat      
Hallo Harald,
genau so ist es. Hoehe und Dichte sollen die Spalten von roh sein.

Ich denke es ist am einfachsten den Code im ganzen zu sehen:


function Sat()

% Werteänderungen nur hier erforderlich, da Variablen als "global"
global mE G rE mM rM rEM gM g0 Temp0 p0 RL d A mSat cW x0 v0
% Daten der Erde
mE = 5.977e24 ; % Masse Erde (kg)
rE = 6.368e6 ; % Mittlerer Erdradius (m)
g0 = 9.80665 ; % Fallbeschleunigung Erde



% Daten des Mondes
mM = 7.349e22 ; % Masse Mond
% mM = mE/81 Masse Mond in Relation zu Erdmasse
rM = 0.273*rE ; % Mittlerer Mondradius (m)
rEM = 60.3*rE ; % Mittlerer Bahnradius um die Erde / Abstand zur Erde
gM = 1.63 ; % Fallbeschleunigung Mond



% Allgemeine Daten
G = 6.674e-11 ; % Gravitationskonstante
RL = 287.052; % J / kg*K
Temp0 = 288.15; % K , Normtemperatur auf Meereshöhe
p0 = 101325; % Pa , Normdruck aus Meereshöhe
cW = 0.3; % Strömungskoeffizient




% Angaben zum Satellit
mSat = 100; % [kg]
d = 0.1; % [m]
A = (pi*d^2)/4; % [m^2]

% Anfangswerte
x0 = 0; % Starthöhe
v0 = 2000; % Startgeschwindigkeit
y0 = [x0; v0];
t0 = 0 ; % Startzeit
tf = 180 ; % Zeit Start zu Ziel
tspan = [t0 tf] ; % tspan, Zeitintervall von t0 bis tf

% ____________________________________________________________________
% Integration des Anfangswertproblems:
% options = odeset( 'MaxStep' , 0.01) ;
[t, x] = ode45 (@dp , tspan , y0) ;



H = x(:,1)/1000;
v = x(:,2)/1000;

% festlegen der Grafikfenstergröße
scrsz = get(0,'ScreenSize');
%figure = Grafikfenster öffnen,
figure('Position',[scrsz(3)/3 scrsz(4)/50 scrsz(3)/2 scrsz(4)*.5]);




plot (H , v) , grid on , title (['Startwerte: x0=' num2str(x0) ' v0=' num2str(v0) ' Geschossparameter: m=' num2str(mSat) ' d=' num2str(d) ' cW=' num2str(cW)]), xlabel ('Höhe [km]'), ylabel ('Geschwindigkeit [km/s]')
axis([0, 100, 0, 20]); % axis([xmin, xmax, ymin, ymax])



function dxdt = dp(t, x)

global mE G mM rEM g0 Temp0 Temp p0 pL RL A mSat cW roh rE neueDichte




div1 = (rE + x(1)); % Abstand zum Erdmittelpunkt
div2 = (rEM - rE - x(1)); % Abstand zum Mondmittelpunkt

dxdt(1) = x(2); % Ableitung von x ist Geschwindigkeit
dxdt(2) = - 0.5 * cW * neueDichte * (A/mSat)*x(2)^2 - (G * mE)/div1.^2 + (G * mM)/div2.^2;
% dxdt (2) = Beschleunigung = ist gleich..
roh = [0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000 21000 22000 23000 24000 25000 26000 27000 28000 29000 30000 31000 32000 33000 34000 35000 36000 37000 38000 39000 40000 41000 42000 43000 44000 45000 46000 47000 48000 49000 50000 51000 52000 53000 54000 55000 56000 57000 58000 59000 60000 61000 62000 63000 64000 65000 66000 67000 68000 69000 70000 71000 72000 73000 74000 75000 76000 77000 78000 79000 80000 81000 82000 83000 84000 85000 86000 87000 88000 89000 90000 91000 92000 93000 94000 95000 96000 97000 98000 99000 100000 ; 1.22586382113800 1.10907982145000 0.998601188436000 0.894511991890000 0.796870777754000 0.705708371803000 0.621025791351000 0.542792323930000 0.470943840142000 0.405381416014000 0.345970347386000 0.292539644796000 0.244882100917000 0.202755023024000 0.165881718908000 0.133953814858000 0.106634467365000 0.0835625045400000 0.0643574978730000 0.0486257188320000 0.0359668781830000 0.0299205963160000 0.0249438227250000 0.0208384253940000 0.0174445647930000 0.0146329983680000 0.0122989886680000 0.0103574694450000 0.00873920095300000 0.00738770497600000 0.00625681590700000 0.00530871968300000 0.00451237994400000 0.00404512340900000 0.00363739053300000 0.00328036546400000 0.00296670334600000 0.00269025942000000 0.00244587239300000 0.00222919037100000 0.00203653035700000 0.00186476434000000 0.00171122655300000 0.00157363764800000 0.00145004247200000 0.00133875879000000 0.00123833489300000 0.00114751440700000 0.000983813922000000 0.000843466388000000 0.000723140355000000 0.000619979622000000 0.000486008474000000 0.000378531751000000 0.000292847461000000 0.000224980036000000 0.000171587727000000 0.000129878645000000 9.75350910000000e-05 7.26457520000000e-05 5.36453400000000e-05 3.92612000000000e-05 2.84664110000000e-05 2.04388740000000e-05 1.45258900000000e-05 1.02137360000000e-05 7.10173300000000e-06 4.88033600000000e-06 3.31278900000000e-06 2.21989800000000e-06 1.46753000000000e-06 9.56436000000000e-07 6.57705000000000e-07 4.48049000000000e-07 3.02263000000000e-07 2.01859000000000e-07 1.33397000000000e-07 8.71960000000000e-08 5.63530000000000e-08 3.59920000000000e-08 2.27070000000000e-08 1.80250000000000e-08 1.43090000000000e-08 1.13590000000000e-08 9.01700000000000e-09 7.15800000000000e-09 5.68300000000000e-09 4.51100000000000e-09 3.58100000000000e-09 2.84300000000000e-09 2.25700000000000e-09 2.66500000000000e-09 3.12700000000000e-09 3.64400000000000e-09 4.22100000000000e-09 4.86200000000000e-09 5.56900000000000e-09 6.34600000000000e-09 7.19700000000000e-09 8.12500000000000e-09 9.13200000000000e-09]
Hoehe = roh(1)
Dichte = roh(2)

neueDichte = interp1(Hoehe, Dichte, x(1))




v = dxdt(1);
a = dxdt(2);



dxdt = [v; a];
% Programmende

_______________________________________

Leider funktioniert die Interpolation hier nicht. Nimmt man die Interpolation und die variable "neueDichte" raus, läuft die Rechnung durch. Scheint also an der Luftdichte zu liegen.
Ich dachte daran den x(1) Wert mit Spalte 1 von "roh" zu vergleichen und dann Spalte 2 entsprechend zu interpolieren.

Danke dir schon mal! Super nett, dass du dir die Zeit nimmst.

LG
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 19.12.2017, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

du musst neueDichte schon definieren, bevor du es verwendest.

Zitat:
Hoehe und Dichte sollen die Spalten von roh sein.

Nicht eher Zeilen? So oder so, die Anpassung solltest du dann schon machen.

Ich würde globale Variablen übrigens nur im Notfall verwenden. Das erschwert die Fehlersuche ungemein. Bestes Beispiel hier.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2017, 10:43     Titel:
  Antworten mit Zitat      
Hallo Harald,
völlig richtig. Die Definition hinter der Rechnung war ein Schnitzer.
Habe es jetzt umgedreht:


roh = [0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000 21000 22000 23000 24000 25000 26000 27000 28000 29000 30000 31000 32000 33000 34000 35000 36000 37000 38000 39000 40000 41000 42000 43000 44000 45000 46000 47000 48000 49000 50000 51000 52000 53000 54000 55000 56000 57000 58000 59000 60000 61000 62000 63000 64000 65000 66000 67000 68000 69000 70000 71000 72000 73000 74000 75000 76000 77000 78000 79000 80000 81000 82000 83000 84000 85000 86000 87000 88000 89000 90000 91000 92000 93000 94000 95000 96000 97000 98000 99000 100000 ; 1.22586382113800 1.10907982145000 0.998601188436000 0.894511991890000 0.796870777754000 0.705708371803000 0.621025791351000 0.542792323930000 0.470943840142000 0.405381416014000 0.345970347386000 0.292539644796000 0.244882100917000 0.202755023024000 0.165881718908000 0.133953814858000 0.106634467365000 0.0835625045400000 0.0643574978730000 0.0486257188320000 0.0359668781830000 0.0299205963160000 0.0249438227250000 0.0208384253940000 0.0174445647930000 0.0146329983680000 0.0122989886680000 0.0103574694450000 0.00873920095300000 0.00738770497600000 0.00625681590700000 0.00530871968300000 0.00451237994400000 0.00404512340900000 0.00363739053300000 0.00328036546400000 0.00296670334600000 0.00269025942000000 0.00244587239300000 0.00222919037100000 0.00203653035700000 0.00186476434000000 0.00171122655300000 0.00157363764800000 0.00145004247200000 0.00133875879000000 0.00123833489300000 0.00114751440700000 0.000983813922000000 0.000843466388000000 0.000723140355000000 0.000619979622000000 0.000486008474000000 0.000378531751000000 0.000292847461000000 0.000224980036000000 0.000171587727000000 0.000129878645000000 9.75350910000000e-05 7.26457520000000e-05 5.36453400000000e-05 3.92612000000000e-05 2.84664110000000e-05 2.04388740000000e-05 1.45258900000000e-05 1.02137360000000e-05 7.10173300000000e-06 4.88033600000000e-06 3.31278900000000e-06 2.21989800000000e-06 1.46753000000000e-06 9.56436000000000e-07 6.57705000000000e-07 4.48049000000000e-07 3.02263000000000e-07 2.01859000000000e-07 1.33397000000000e-07 8.71960000000000e-08 5.63530000000000e-08 3.59920000000000e-08 2.27070000000000e-08 1.80250000000000e-08 1.43090000000000e-08 1.13590000000000e-08 9.01700000000000e-09 7.15800000000000e-09 5.68300000000000e-09 4.51100000000000e-09 3.58100000000000e-09 2.84300000000000e-09 2.25700000000000e-09 2.66500000000000e-09 3.12700000000000e-09 3.64400000000000e-09 4.22100000000000e-09 4.86200000000000e-09 5.56900000000000e-09 6.34600000000000e-09 7.19700000000000e-09 8.12500000000000e-09 9.13200000000000e-09]
Hoehe = roh(1)
Dichte = roh(2)
neueDichte = interp1(Hoehe, Dichte, x(1), 'linear')


div1 = (rE + x(1)); % Abstand zum Erdmittelpunkt
div2 = (rEM - rE - x(1)); % Abstand zum Mondmittelpunkt

dxdt(1) = x(2); % Ableitung von x ist Geschwindigkeit
dxdt(2) = - 0.5 * cW * (A/mSat)*x(2)^2 - (G * mE)/div1.^2 + (G * mM)/div2.^2;
% dxdt (2) = Beschleunigung = ist gleich..


_______________________________________________________________
Nun kommt die folgende Fehlermeldung:

Error using griddedInterpolant
Interpolation requires at least two sample points in each dimension.


Error in interp1 (line 149)
F = griddedInterpolant(X,V,method);

Error in Sat>dp (line 77)
neueDichte = interp1(Hoehe, Dichte, x(1), 'linear')

Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);

Error in Sat (line 49)
[t, x] = ode45 (@dp , tspan , y0) ;


_______________________________________________________________


Woher kann das kommen?
Und warum würdest du Zeilen anstelle Spalten vorziehen?




LG


Ps: Die globalen Variablen haben es mir bisher einfacher gemacht, ich spiele ja erst seit ca. 2 Monaten mit Matlab. Da erschien es mir einfacher Werte aus einer GUI direkt im ganzen Programmablauf zu verteilen.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 20.12.2017, 10:52     Titel:
  Antworten mit Zitat      
Hallo,

behebe doch bitte die Fehler hier:
Code:
Hoehe = roh(1)
Dichte = roh(2)

... und das ganze wird durchlaufen.

Zitat:
Und warum würdest du Zeilen anstelle Spalten vorziehen?

Weil du ein 2x101 - Array rho hast, also 2 Zeilen und viele Spalten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2017, 11:57     Titel:
  Antworten mit Zitat      
Hallo Harald,
wenn du wüsstest, wie viel du mir schon geholfen hast!
Als Matlab-Neuling steht man manchmal vor Hürden und hat keinen Schimmer wie es funktionieren könnte.

Endlich läuft die Berechnung durch. Ich musste es natürlich ändern, zu:
Hoehe = roh(1,Smile
Dichte = roh(2,Smile

Danke!

Für Dichte und Höhe zeigt er mir jetzt die richtigen Werte an. Nur bei "neueDichte" steht "neueDichte = NaN".
liegt es daran, dass nur ca. 100 Zeilen vorhanden sind? Danach würde "NaN" ja stimmen.

LG
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 17.804
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 20.12.2017, 12:09     Titel:
  Antworten mit Zitat      
Hallo,

das sollte nur passieren, wenn x(1) außerhalb des abgedeckten Intervalls ist. Was möchtest du in dem Fall?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin1412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2017, 12:35     Titel:
  Antworten mit Zitat      
Hallo,
Sollte die Höhe außerhalb des Bereiches 0 ... 100 km liegen, sollte die Luftdichte (bzw. "neueDichte") = 0 sein.

komischerweise gibt es Kombinationen, in denen der Graph bei etwas über 80 km aufhört, obwohl die Geschwindigkeit noch nicht null ist. Aber vielleicht erübrigt sich das mit der Eingrenzung der Luftdichte.

LG
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.