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

Interpolation verschiedener Vektoren

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 09:47     Titel: Interpolation verschiedener Vektoren
  Antworten mit Zitat      
Hallo,

habe zwei verschiedene Vektoren und ich will denn einen an denn anderen
interpolieren.

Der eine Vektor X = <54813x2 double>
Der andere y = <547183x2 double>

Für einen x existieren 10 y Werte, nun will ich den x an y anpassen/interpolieren.

Wie kann ich das realisieren.

Mit f=interp1 (x, y, 'linear') erhalte ich bei vielen Werten NaN

Hoffe mir kann da jemand weiterhelfen?

Gruß Andrej


Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 10:08     Titel:
  Antworten mit Zitat      
>Der eine Vektor X = <54813x2 double>
>Der andere y = <547183x2 double>

ich würde mal sagen Du hast zwei Matrizen X und y !


>Für einen x existieren 10 y Werte, nun will ich den x an y anpassen/interpolieren.

und einen Faktor 10 sehe ich zwischen den Beiden auch nicht ?!

außerdem, was ist gemeint mit x an y anpassen??

Interpolation bedeutet zwischen zwei Abtastpunkten einen dritten berechnen bzw. "hineininterpolieren" der bestimmte Kriterien erfüllt (z.B. soll er auf einer geraden Verbindungslinie zwischen beiden Punkten liegen => 'linear')
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 10:38     Titel:
  Antworten mit Zitat      
Idefix_1024 hat Folgendes geschrieben:
>Der eine Vektor X = <54813x2 double>
>Der andere y = <547183x2 double>

ich würde mal sagen Du hast zwei Matrizen X und y !


>Für einen x existieren 10 y Werte, nun will ich den x an y anpassen/interpolieren.

und einen Faktor 10 sehe ich zwischen den Beiden auch nicht ?!

außerdem, was ist gemeint mit x an y anpassen??

Interpolation bedeutet zwischen zwei Abtastpunkten einen dritten berechnen bzw. "hineininterpolieren" der bestimmte Kriterien erfüllt (z.B. soll er auf einer geraden Verbindungslinie zwischen beiden Punkten liegen => 'linear')


Es ist etwas weniger als Faktor 10, und variiert von Aufzeichnung zu Aufzeichnung, das war ja auch nur als Beispiel von mir genannt.

Was ich mit anpassen meinte ist, dass der Graf von x genauso viele Zeilen (selbe Länge) haben soll wie y. Verwendet wird jeweils nur die 2 (hätte ich vielleicht erwähnen sollen).

Habe zwei Grafen (x,y) angehängt.

gruss

y.jpg
 Beschreibung:
y = <547183x2

Download
 Dateiname:  y.jpg
 Dateigröße:  20.5 KB
 Heruntergeladen:  953 mal
x.jpg
 Beschreibung:
x = <54813x2

Download
 Dateiname:  x.jpg
 Dateigröße:  25.37 KB
 Heruntergeladen:  958 mal
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 10:39     Titel:
  Antworten mit Zitat      
Edit: Verwendet wird nur die zweite Spalte
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 11:26     Titel:
  Antworten mit Zitat      
also meinst Du so etwas hier ?


Code:

clear
clc
close all

% gegebene Daten
x1  = 0:1:40;
y1  = 0:0.1:4;

x2  = [0 1 10 11 16 20 25 30 31 32 40];
y2  = [1 3 10 10 12 14 10 11 16 15 10];

figure(1)
plot(x1,y1,'rx-' , x2,y2,'bx-')
title('Original-Daten')

x2_neu  = x1;
n       = length(x1);
y2_neu1 = zeros(n,1);
y2_neu2 = zeros(n,1);
y2_neu3 = zeros(n,1);

y2_neu1             = interp1(x2,y2,x2_neu,'nearest');
y2_neu2             = interp1(x2,y2,x2_neu,'linear');
y2_neu3             = interp1(x2,y2,x2_neu,'cubic');


figure(2)
plot(x2,y2,'rx-' , x2_neu,y2_neu1,'bx-' , x2_neu,y2_neu2,'bo-' , x2_neu,y2_neu1,'cx-')
legend('original','nearest','linear','cubic',0)
title('Neue Daten - Anzahl der Abtastpunkte indentisch')
 


es gibt zwei datensätze x1, y1 und x2, y2
die Anzahl der Abtastpunkte stimmt nicht überein
man möchte die Stützstellen des ersten Datensatzes auch im zweiten Datensatz haben.
Also Interpolation des 2. Datensatzes an den Abtastwerten x1

falls es nicht genau das ist was du meinst, so kann man daraus aber sicher die gesuchte Lösung basteln...
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 13:14     Titel:
  Antworten mit Zitat      
Ich bekomme beim plotten ein Error.

???Error using --> plot Vectors must be the same lengths???

Dies ist aber nicht der Fall.

gruss
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 13:33     Titel:
  Antworten mit Zitat      
welche Vektoren plottest du denn da?

mein Beispiel funktioniert und sollte nur zeigen wie man das Problem anpacken könnte...
aber ohne einen Code von dir kann ich auch nur raten was du eigentlich willst.

was Du gemacht hast kann ich so leider nicht sehen... hellsehen kann ich nicht
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 13:44     Titel:
  Antworten mit Zitat      
sorry wenn ich mich etwas blöd anstelle, arbeite erst seit kurzem mit Matlab und hab deshalb so meine Schwierigkeiten.

Habe folgende Werte mit Hilfe deines Beispiels erstellt:

s1=<1x547001 double>
s2=<547183x1 double>
v1=<1x547001 double>
v2=<54813x1 double>

Ich plotte:

>> plot (s1,v1,'rx-',s2,v2,'bx-')
??? Error using ==> plot Vectors must be the same lengths.

gruss
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 13:52     Titel:
  Antworten mit Zitat      
So wie es aussieht ist der v2 falscher Dimension. Und da ich nicht mehr Werte habe als die in meiner Aufzeichnung soll dieser v2 interpoliert werden.
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 14:24     Titel:
  Antworten mit Zitat      
ja schau doch mal die Dimensionen an von s1 v1 und s2 v2
da fällt doch auf, dass s2 und v2 unterschiedlich sind. Das ist der Grund warums nicht geht

was haben denn s2 und v2 gemeinsam???
die kann man nicht zusammen plotten!

da kann man auch nix interpolieren, weil gar nicht klar ist wie das Wertepaar einander zuzuordnen ist...

kleineres Beispiel:
a = [0 1 2]
b = [1 4 7 9 8]
wie soll man die beiden nun plotten? was soll bei rauskommen?
a = 0 ist b = 1 zugeordnet
a = 1 ist b = 4 zugeordnet
a = 2 ist b = 7 zugeordnet
und was ist nun mit b = 9 und b = 8 ???

ich bin scheinbar doof aber ich will nicht verstehen was Du da vor hast
Private Nachricht senden Benutzer-Profile anzeigen
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 14:29     Titel:
  Antworten mit Zitat      
wie hast du denn eigentlich die zwei bilder erstellt, die du hochgeladen hast??
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 14:57     Titel:
  Antworten mit Zitat      
Die Bilder entstanden durch das separate plotten der S-Matrize und der v-Matrize.

Ich weis was du mit dem kleinen Beispiel zeigen willst, aber in meinem Fall
muss es gehen.
Ich versuch mal so zu erklären.

Wenn ich die Daten aufzeichne erhalte ich für die Aufzeichnungszeit in etwa 10 mal so viele s-Signale als v-Signale.
Das heißt, dass für jeden v-Signal die nächsten ca. 10 s-Signale gelten.

Deshalb ja auch meine Aussage am Anfang das es sich um den Faktor 10 handelt, dieser ist jedoch nicht genau 10 (variiert zw.9 und 10).
Und genau aus diesem Grund muss eine interpolation von v an s möglich sein.

Danke das du dir schon mal so viel Zeit genommen hast mir da zu helfen

gruss
Andrej
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2009, 15:14     Titel:
  Antworten mit Zitat      
ok
einen letzten Versuch mache ich noch ;-)

gehe ich recht in der Annahme, dass Du bei den Plots folgendes gemacht hast

s1=<1x547001 double>
s2=<547183x1 double>
v1=<1x547001 double>
v2=<54813x1 double>

Code:

plot(0:1:length(s1),s1,'r' , 0:1:length(v1),v1)
plot(0:1:length(s2),s2,'r' , 0:1:length(v2),v2)
 


so bekommt man immerhin die Bilder zu sehen...

trotzdem sehe ich keinen Weg wie man nun alle vier Messdaten-Vektoren auf EINE Abtastzeit bringen kann...
was haben die denn gemeinsam?
ist vielleicht das Abtastintervall verschieden aber der Gesamt-Mess-Zeitraum identisch zB 0 bis 2 Sekunden bei allen vier?
dann könnte man EINEN Zeitvektor einführen und jeden Vektor einzeln in die Neue Zeitbasis interpolieren... das ist ja auch dann das was ich schon gepostet habe

deshalb nochmal meine Frage
was hast du da für Daten????
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 25.07.2009, 19:57     Titel:
  Antworten mit Zitat      
also, du willst ja an sich nur v2 und s2 auf die selbe Länge bringen, oder ?
Code:

% Platz reservieren
v2neu=zeros(10*length(v2),1);

for i=1:length(v2)
  % einfach jeden Wert aus v2 zehnmal in v2neu schreiben
  v2neu(i : i+10-1) = v2(i);
end

% den jeweils etwas grösseren Vektor kürzen:
laenge_zum_plotten=min([ length(v2neu) length(s2) ]);
v2neu=v2neu(1:laenge_zum_plotten);
s2=s2(1:laenge_zum_plotten);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2009, 15:51     Titel:
  Antworten mit Zitat      
Endlich habe ich das Problem gelöst.

mit dem Befehl:

yi = interp1 (v(:,1), y, s(:,1));

yi= sind die interpolierten Werte von y (Solllänge von 547183 Einheiten)
v(:,1)= die ursprüngliche x-Achse (mit der Länge 54813 Einheiten)
y= die ursprünglichen y-Achse
s(:,1)= die soll x-Achse (mit der Länge 547183 Einheiten)

Danke euch Beiden für die Hilfe.
 
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.