Verfasst am: 23.03.2011, 15:15
Titel: 'Out Of Memory' bei v4 Interpolation
Hallo ihr tapferen Helfer,
dieses Thema wurde zwar schon oft besprochen, leider konnte mir die Suchfunktion aber nicht wirklich weiterhelfen. Einerseits weil ich ein Programmier-Krüppel bin, andererseits weil ich mein Problem nirgends explizit beschrieben gefunden habe.
Ich hoffe also dass ihr den Nerv habt mir zu helfen.
Das Problem:
es soll ein Kennfeld aus vorgegebenen Wertetripeln (Drehzahl n, Drehmoment M und Wirkungsgrad eta) interpoliert werden. Die Rohdaten liegen in einer Exceltabelle vor.
Das interpolierte Kennfeld soll dann in einem Simulinkmodell als Look-Up-Table eingebunden werden, die bei vorgabe von Drehzahl n und Drehmoment M den entsprechenden Wirkungsgrad eta ausgibt.
Mein bisheriges Vorgehen:
Nach dem Einlesen generiere ich mittels meshgrid das Gitter mit vorgegebener Schrittweite i. Danach soll mittels griddata interpoliert werden, und zwar nach der Methode 'v4'.
Soweit sogut, das habe ich für kleinere Datensätze (d.h. max. 4000 Wertetripel) erfolgreich durchgeführt.
Nun habe ich einen Daten satz mit genau 6276 Wertetripeln und das ist meinem Progrämmlein wohl etwas zuviel. Wenn es zur Interpolation mit griddata kommt wird das Programm mit eben jener "out of memory" Fehlermeldung abgebrochen.
Folgendes habe ich bereits probiert:
- sparse Matrizen: bringt leider nichts, da jedes Element in meinen verwendeten Matrizen nicht-null ist.
- double zu single: funktioniert zwar vom Speicher her, allerdings ist die ausgegeben, interpolierte Matrix ein Haufen Schrott. Ich verstehe nicht wieso, da meine Elemente maximal drei Nachkommastellen haben. Wenn alles mit single gerechnet wird hab ich plötzlich negative Werte, viel zu große werte, viel zu kleine Werte, und das alles direkt nebeneinander wo eigentlich weiche Übergänge sein sollten.
- Ändern der grid-Schrittweite (von 1 über 10 bis 100)
- Löschen von nicht mehr gebrauchten Variablen.
Damit erschöpft sich leider schon meine Trickkiste, und Nichts hatte den gewünschten Effekt.
Hat also jemand einen Vorschlag wie man mein Problem lösen kann, bzw. mein Programm optimieren kann? Ist meine Rangehensweise völlig falsch?
Der Code ist angehängt, habt keine Gnade!
n = xlsread('Ges_M_Mot125kW.xls',1,'A1:A5000'); %holt sich x-Werte (Drehzahl n) aus Exceltabelle
M = xlsread('Ges_M_Mot125kW.xls',1,'B1:B5000'); %holt sich y-Werte (Drehmoment M) aus Exceltabelle
eta = xlsread('Ges_M_Mot125kW.xls',1,'C1:C5000'); %holt sich z-Werte (Wirkungsgrad eta) aus Exceltabelle
in = [10:10:8000]; %Schrittweite der x-Achse
iM = [1.5:1:300]; %Schrittweite der y-Achse
[XI,YI] = meshgrid(in,iM); %erzeugt ein Raster mit Schrittweite "in" & "iM"
XI_s = single(XI);
YI_s = single(YI);
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
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.