ich habe ein 'Geschwindigkeitsproblem' mit meinem Code. Ich benutzte in einer komplexen schleife mehrere interp1 - Lookuptables. Über den Profiler habe ich herausgefunden, dass diese Befehle mit abstand die meiste Zeit in Anspruch nehmen.
Nun meine Frage: Gibt es eine Leistungsfähigere Lookup-Table Funktion? oder kann man interp1 irgendwie optimieren?
Ich hab mir jetzt notgedrungen ne eigene Lookup-Table-Funktion geschrieben. Was meint ihr dazu? Ist das effizient? Oder kennt jemand noch ne schnellere Variante?
% Y=lookuptable(Tabledata,X)
%
% Tabledata = 2xN Tabelle, wobei Tabledata(1, die XWerte sind und Tabeldata(2, die YWerte % X ist ein Skalar
%Extrapoliert Endwerte
if X<=Tabledata(1,1), Y=Tabledata(2,1); return; end;
if X>=Tabledata(1,end), Y=Tabledata(2,end); return; end;
%Suchen der richtigen Stelle mittels größer / kleiner und summieren der Einsen
a=sum(Tabledata(1,:)<X);
b=size(Tabledata,2)-sum(Tabledata(1,:)>X)+1;
if b-a==2,
Y=Tabledata(2,a+1); % trifft genau -> keine interpolation else
%Interpolation wenn nicht genau getroffen
y1=Tabledata(2,a);
y2=Tabledata(2,b);
x1=Tabledata(1,a);
x2=Tabledata(2,b);
Y=y1+((y2-y1)/(x2-x1))*(X-x1);
end;
mit deisem Code statt der interp1 war mein Code gut 10mal schneller. Aber ich wäre für weiter Verbesserungsvorschläge sehr dankbar.
Einstellungen und Berechtigungen
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.