WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Frage zu interp2

 

Gast12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2011, 22:09     Titel: Frage zu interp2
  Antworten mit Zitat      
Hi,

ich habe ein Problem. Ich muss interpolieren und benutze dazu den Befehl interp2.

Die Syntax zu zi = interp2(x,y,z,xi,yi,'linear');

Bei mir sind xi und yi Vektoren mit rund 100000 Einträgen. Matlab versucht nun eine Matrix zi gleich 100000x100000 zu erzeugen. Da stürzt die Funktion mit "maximum variable" ist erreicht ab. Dies könnte ich ja noch durch eine For-Schleife umgehen, um den von mir gesuchten Vektor zu erhalten (ähnlich Simulink-Modell wo zu jedem Zeitpunkt mit einem Wertepaar interpoliert wird).

Code:

for Vektor_bauen =1:length(xi)
zi(Vektor_bauen) = interp2(x,y,z,xi(Vektor_bauen),y(Vektor_bauen);
end

Schleifen sind ja extrem langsam. Wie kann ich das Problem besser lösen. Nun meine zweite Frage. In Simulink ist die 2d Lookup-Table das selbe wie interp2 in m-File. Dort kann ich als Interpolationsmethode "Use end Value verwenden. Hintergrund ein Teil der Werte von xi sind Negativ und bei der Interpolation entsteht "Nan". Dort möchte ich aber, dass mit Spalte x=0 interploliert wird. Bis jetzt muss ich den Vektor xi nach negativen Werten durchsuchen und diese mit Null ersetzen.

Falls jemand eine Lösung, ich bin für jede Anregung dankbar.

MfG


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 06.09.2011, 07:59     Titel:
  Antworten mit Zitat      
1) Schleifen sind, wendet man sie richtig an, nicht "extrem langsam". Du machst 100000 einzelne Interpolationen und wunderst dich, dass es langsam ist.
2) Deine for-Schleife und zi = interp2(x,y,z,xi,yi,'linear'); berechnen nicht annähernd das Gleiche!
3) Bei 100k x 100k sollte man sich ernsthaft überlegen, die Daten zu kürzen oder die Auflösung runter zu schrauben!
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 09:52     Titel:
  Antworten mit Zitat      
Hi,

die Auflösung kann ich nicht leider nicht herunterschrauben (ich würde es mir selbst wünschen) (diese Messung wird mit einer gewissen Abtastung aufgenommen). Das war übrigens nur eine kurze Testmessung. Später sollen aber Messungen über einen "sehr extrem" langen Zeitraum ausgewertet werden. Ich arbeite sonst relativ gerne mit Schleifen, nur in diesem Fall (wie du schon sagtest 100k Interpolationen) halte ich sie für sehr langsam (ineffizent mit einer Schleife) (besonders bei den langen Messungen). Ich muss die Berechnung bei vielen Kennfeldern insgesamt durchführen. Das bedeutet, dass ich erst bei 2 Kennfeldern interpoliere und jeweils einen Vektor erhalte. Anschließend gehen diese beiden Vektoren wieder in ein Kennfeld und so weiter. Du siehst also: Es ist hier eine unschöne Sache mit den Schleifen.

Wie meinst du das, ob meine Schleife nicht annährend das selbe berechnen. Es gibt einen gewissen Bereich, der aber Zahlenmäßig relativ groß bzw. breit ist, da es dynamische Fälle sind. Also siehst man im erzeugten Vektor viele Zustände.

Deshalb wäre für jeden Hinweis dankbar, wie ich es optimieren kann.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 06.09.2011, 13:11     Titel:
  Antworten mit Zitat      
Vielleicht muss das Gitter ja gar nicht so gross werden. Beispiel ich stelle bei einer Messung x und y ein, z wird gemessen, ABER, da z.B. x nicht so genau eingestellt werden kann wie es gemessen wird, sind dann Ergebnisse wie folgt:

x y z
1.01 1 2.03451
1.99 1 3.32522
1.02 2 1.24142
2.00 2 1.11414

MATLAB würde an dieser Stelle für x nicht 2 Werte annehmen, sondern 4, und ein Gitter sogar von 1.01 bis 2.00 in 0.01 Schritten aufspannen wollen. Selbst wenn das rechnerisch klappt, gibt das kein besseres Ergebnis.

Vielleicht lässt sich also hier etwas mit dem zusammen fassen in Toleranzbänder vereinfachen (alles zwischen 0.97 und 1.03 ist eigentlich 1.00 usw.)

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast12

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 19:07     Titel:
  Antworten mit Zitat      
Hi Andreas,
die Eingangsvektoren "jage" ich schon durch meine Signalvorverarbeitung. Das heißt, dass ich da schon sinnvoll auf- bzw. abrunde (entweder ganzzahlig, plus minus 1 bis 5 oder oder wenn es nicht anders geht auf 0,1). Es sollen später verschiedene "Wertpaarungen für die Kennfelder" ausprobiert werden, um besser als jetzt zu werden. Deshalb weiss ich nocht nicht wie grobrastigt ich jetzt schon werden darf. Was ich eventuell noch machen könnte, wäre die interpolierten Ergebnisvektoren ebenfalls sinnvoll zu runden. Die Achseneinteilung x,y der Kennfelder z sind ebenfalls in "größeren Schritten" aufgebaut.

Da ich an anderer Stelle ebenfalls noch einen Klemmer mit Matlab habe, würde ich dich Andreas gerne eventuell mal kontaktieren, falls du nichts dagegen hast.

Aber falls andere noch Ideen haben, ich werde jeden Vorschlag ausprobieren.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 07.09.2011, 13:11     Titel:
  Antworten mit Zitat      
Ich helfe gerne. Der MathWorks Technische Support auch Smile

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen



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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.