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

Interp1 macht nicht was es soll

 

eey
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2012, 16:23     Titel: Interp1 macht nicht was es soll
  Antworten mit Zitat      
Hallo zusammen,

ich hab ein Problem mit einem Programm von mir. Und zwar werden dort Werte erzeugt, für einen Zeitraum 1 bis 2000 zum Beispiel. Also zu jeden der 2000 Zeitwerte existiert ein Funktionswert.

Jetzt will ich diese Werte allerdings auf einer Zeitskala von 1 bis 1000 anzeigen lassen und nicht auf einer von 1 bis 2000.

Dafür habe ich den interp1 Befehl verwendet, allerdings funktioniert das nicht. Hier wäre ein Beispielhafter Code (In "Werte" sind die 2000 Funktionswerte gespeichert):

Code:
y1 = interp1(1:1:2000,Werte,1:1:1000,'spline');


Leider nimmt dieser Code einfach nur die ersten 1000 Werte von meinen Werten und interpoliert nicht - also die letzten 1000 Werte gehen einfach verloren. Woran kann das liegen? Eigentlich sollte er das doch interpolieren oder?
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.03.2012, 16:45     Titel:
  Antworten mit Zitat      
interpolieren ist auch dafür punkte zu generieren und nicht welche weg zu schneiden Smile
du hast doch alle punkte die du brauchst. wenn du nur die hälfte plotten willst kannst du das ihm ja dann beim plot sagen indem du nicht alle werte reingbiest sondern nur die ersten 1000
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2012, 16:54     Titel:
  Antworten mit Zitat      
Hallo Winkow,

vielen Dank schonmal für deine Antwort, ich krieg das hier nicht hin wie es soll. Also mit Interpolieren geht es also schonmal nicht...

Es geht hier nicht nur ums plotten, ich will die Werte auch noch weiter verwenden. Allerdings eben nur genau 1000, meine Funktion gibt mir aber mal 2000, mal 3000 mal 5439 (Beispielhafte Werte) zurück, je nachdem.

Diese n Werte will ich jetzt auf genau 1000 zusammenkompriemieren. Und zwar nicht einfach die ersten 1000, denn dann könnte ich ja den Vektor auch einfach abschneiden. Ich will bei 2000 Werten zum Beispiel dass er jeden zweiten Wert in meinen Vektor übernimmt.

Also zum Beispiel:

a = 0 1 2 3 4 5 6 7 8 9
b = 3 5 7 9 7 4 7 8 6 4

t = 0 1 2 3 4

a sind die Zeitpunkte zu denen ich Messwerte habe
b sind die Messwerte
t sind die neuen Zeitpunkt auf die ich anpassen will

daraus will ich jetzt folgendes komprimieren:

c = 3 7 7 7 6

wie kann ich das machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.03.2012, 18:07     Titel:
  Antworten mit Zitat      
hmm naja kannst du eine abschätzung nach oben hin machen wie viele werte rauskommen ?
wenn du weist das du immer weniger als zb 6000 werte hast kannst du auf 6000 interpolieren und dann jeden 6. nehmen. nur so als beispiel.. wenn es immer unbestimmt viele sind und nach oben offen kannst es ja selber bestimmen indem du auf den nöchst höheren 1000er wert interpolierst.
irgendwie so. kanns grade nicht testen
Code:
a=round(rand(1)*10000)
b=[1:a]
c=randi(100,1,a)
d=round(c/1000)
yy=interp1(b,c,1:1000(*d+1));
y1=yy(1:d+1:end)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.03.2012, 22:51     Titel: Re: Interp1 macht nicht was es soll
  Antworten mit Zitat      
Hallo eey,

INTERP1 macht genau was es soll: Wenn man eine Funktion auf einer Untermenge der Stützstellen interpoliert, erhält man genau die Y-Wrte an diesen Stützstellen. Wenn Du so interpolieren möchtest, dass auch Zwischenwerte herauskommen, musst Du die Funktion auch an den Zwischenzeiten interpolieren, z.B.:
Code:
y1 = interp1(1:2000, Werte, linspace(1, 1000, 2000),'spline');

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eey
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 31.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2012, 23:42     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für eure Erklärung, ich hatte die Funktionsweise interp1 falsch verstanden, jetzt funktioniert alles so wies soll, besten Dank Smile

Mfg,
eey
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.