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

Vergleich von Vektoren

 

gydoh
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 13:40     Titel: Vergleich von Vektoren
  Antworten mit Zitat      
Hey,

ich habe 4 Vektoren, die ich hier beispielhaft darstelle:

Code:
U = [500 400 300 200]
F1 = [50 128 70 30]

I = [150 140 130 120]
F2 = [50 210 70 54]


Nun möchte ich F1 und F2 vergleichen, jedoch nur den ersten Wert von F1 mit den ersten wert von F2, den zweiten Wert von F1 mit dem zweiten Wert von F2 usw. Wenn die Werte gleich sind (in diesem Fall an stelle 1 und 3), möchte ich die entsprechenden Werte (also an selber stelle) aus U und I nehmen und mit diesen weiter rechnen:

Code:


In diesem Fall also:

Code:
P = 500*150 + 300*130


Kann mir jemand sagen, wie ich das programmieren kann? Vielen Dank schonmal!!

Gruß gydoh
Private Nachricht senden Benutzer-Profile anzeigen


ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 13:52     Titel:
  Antworten mit Zitat      
Hallo, ja so würde es gehen:

Code:

P=sum(U(eq(F1,F2)).*I(eq(F1,F2)));
 


Gruß, Robert
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 14:09     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort.

Mir ist gerade aufgefallen, dass meine Vektoren nicht immer dieselbe Länge haben. U und F1 sind immer gleich lang und I und F2 auch, jedoch F1 und F2 bzw. U und I nicht immer. Die letzten Werte in dem längeren Vektor sind egal, es soll immer noch 1. Wert von F1 mit 1. Wert von F2, 2. Wert von F1 und 2. Wert von F2 usw verglichen werden. Gibt es dafür auch einen Befehl?
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 14:24     Titel:
  Antworten mit Zitat      
Ja geht schon, dann machs so

Code:

P=sum(U(ismember(F1,F2)).*I(ismember(F1,F2)))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2016, 15:16     Titel:
  Antworten mit Zitat      
Danke! Das funktioniert super für das von mir erstellte Beispiel in dieser Frage. Wende ich es jedoch für meinen richtigen Code an, kommt da Quatsch raus.

Hier mein Code:
Code:
FileData = load('export_1_5MVA_Teil2_18_02_16.mat');
U1 = FileData.Recorder1.Channels.Segments.Data.Samples(1:20000).*10^-3;
I1 = FileData.Recorder5.Channels.Segments.Data.Samples(1:20000);
I1 = -I1;
dXstep = FileData.Recorder1.Channels.Segments.Data.dXstep;


% Berechnung der FFT
H1 = fft(U1);
H2 = fft(I1);

% Laenge des Signals
N = length(U1);

% Messdauer
t = N*dXstep;

% Abtastfrequenz
Fs = N/t;

N2 = ceil (N/2);
x_bins = (0:N-1);
ts = x_bins*dXstep;
x_Hz = (0:N2-1)*Fs/N;

X1_fft = abs(H1(1:N2)./(N/2));
X2_fft = abs(H2(1:N2)./(N/2));

[U, F1] = findpeaks(X1_fft,x_Hz(1:N2),'sortstr','descend');
[I, F2] = findpeaks(X2_fft,x_Hz(1:N2),'sortstr','descend');

F1 = F1 (1:6)
F2 = F2 (1:10)

u = ismember(F1,F2)

u1 = U(ismember(F1,F2))
 


Folgendes erscheint im Command Window:

Code:
F1 =

          50        2800        9850        8400       10450       10850


F2 =

          50        2100         100        9850         600        8400       10450        2800        2400         200


u =

     1     1     1     1     1     0


u1 =

   10.5631    1.9863    0.9445    0.7355    0.6099


Eigentlich sollte nur an erster Stelle von u eine 1 stehen und für u1 = 10.5631. Was mache ich falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
ro_mat
Forum-Century

Forum-Century


Beiträge: 158
Anmeldedatum: 20.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2016, 09:41     Titel:
  Antworten mit Zitat      
Ja Hallo und guten morgen,

das Problem liegt daran, dass der Befehl ismember den ersten Array (sprich F1 in unserem Fall) schrittweise durchgeht und überprüft ob der Wert im ganzen zweiten Array (bei uns F2) vorkommt - deswegen sieht u so aus:

u(1) = 1 --> weil 50 in F1(1) und F2(1)
u(2) = 1 --> weil 2800 in F1(2) und F2(Cool
u(3) = 1 --> weil 9850 in F1(3) und F2(4)

und so weiter und so fort!

Da ich ein Fan von Matrizen bin und Schleifen vermeiden will können wir das so angehen:

Code:


temp = min(length(F1),length(F2)); %Schauen welcher Array kleiner ist

u = U(eq(F1(1:temp),F2(1:temp))); % Dieser Befehl vergleicht Index-basiert Smile

 


Wie du siehst, habe ich zum Schluss deine Berechnung von u und u1 kombiniert - du kannst sie aber auch so lassen wie du es gemacht hast!

Der Eckpunkt an dieser Sache ist halt, dass eq() zwei gleich große Arrays erfordert - da du aber anfangs erwähnt hast, dass du nur den kürzeren benötigst, denke ich es sollte passen!

Ansonsten wieder melden, gruß

Robert
Private Nachricht senden Benutzer-Profile anzeigen
 
gydoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 16.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2016, 15:30     Titel:
  Antworten mit Zitat      
Super, es funktioniert!! VIELEN DANK!! Smile Smile
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 - 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.