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

union und interp1

 

code88
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 11.11.2009, 09:44     Titel: union und interp1
  Antworten mit Zitat      
Ich möchte aus verschiedenen mit union Datenreihen zuerst eine fein X-Skalierung machen und dann mit Interpolation die Datenreihen gleich lang machen um dann den Mittelwert zu nehmen.

Leider macht mir der Befehl union ein kleinerer Vektor als die einzelnen gross sind und gibt dann mir beim Interpolieren ein entsprechender Fehler aus.

Code:
for i=1:(length(ScanVektor.Titel)-1)
        Interpolation.Winkel=ScanVektor.Winkel(:,1);
        Interpolation.Winkel{:,1}=union(Interpolation.Winkel{:,1},ScanVektor.Winkel{:,i+1});
        i=i+1;

    end  
    Interpolation.Moment{1}=interp1(ScanVektor.Winkel{1},ScanVektor.Moment{1},Interpolation.Winkel{1})
    for m=1:length(ScanVektor.Titel)
        Interpolation.Moment{m}=interp1(ScanVektor.Winkel{m},ScanVektor.Moment{m},Interpolation.Winkel{1});
        m=m+1;
    end

    MWMoment=cell2mat(Interpolation.Moment);
    MWMoment=mean(MWMoment,2);
    MWWinkel=cell2mat(Interpolation.Winkel);
    MWWinkel=mean(MWWinkel,2);


ScanVektor.zip
 Beschreibung:

Download
 Dateiname:  ScanVektor.zip
 Dateigröße:  175.73 KB
 Heruntergeladen:  441 mal
Private Nachricht senden Benutzer-Profile anzeigen


Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 11.11.2009, 14:10     Titel:
  Antworten mit Zitat      
Hallo code88,

das liegt daran, dass in deinen Vektoren alle Elemente mehrfach vorkommen und mit union immer nur ein Wert einer Größe in den neuen Vektor aufgenommen wird.
Dieses Verhalten ist gewollt und auch dokumentiert.

Gruß
Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 11.11.2009, 19:15     Titel:
  Antworten mit Zitat      
Nun ja das stimmt.
Hast du mir ein Vorschlag, wie ich den Mittelwert aus diesen Vektoren trotzdem bekomme? Natürlich kann ich die Teilung nicht kleiner machen, wenn die Werte mehrmals vorkommen.
Das würde mich auch nicht stören. Doch ein Mittelwert-Vektor muss hin.
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 12.11.2009, 11:16     Titel:
  Antworten mit Zitat      
Hallo code88,

ich bin mir leider nicht sicher, ob ich richtig verstanden habe, was du tun möchtest. enn es Dir nur darum geht, den Mittelwert aus dem zusammengesetzten Vektor aus allen ScanVektor.Moment zu bekommen, kann man das z.B. auf diese Beiden Arten machen.
Code:
>> %Möglichkeit 1
tic
Zusammen = [];
for ind=1:length(ScanVektor.Moment)
    Zusammen(end +1:end+length(ScanVektor.Moment{ind})) = ScanVektor.Moment{ind};
end
mean(Zusammen)
toc
tic
%Möglichkeit 2
gesamtLaenge = 0;
mittelwert = 0;
for ind=1:length(ScanVektor.Moment)
 gesamtLaenge = gesamtLaenge + length(ScanVektor.Moment{ind});
 mittelwert = mittelwert + mean(ScanVektor.Moment{ind}*length(ScanVektor.Moment{ind}));
end
mittelwert/gesamtLaenge
toc

ans =

    0.5154

Elapsed time is 0.005120 seconds.

ans =

    0.5154

Elapsed time is 0.002943 seconds.
 

Wobei ich nicht sicher sagen kann, welche wirklich schneller ist. Denn bei 4 Versuchen war 3mal die zweite Variante schneller und einmal die zweite. Eigentlich sollte immer die Zweite schneller sein, da bei der ersten Variante Zusammen in der Schleife wächst. Naja, egal Rolling Eyes .

Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 12.11.2009, 19:30     Titel:
  Antworten mit Zitat      
Danke für den Vorschlag läuft ganz gut. Jedoch möchte ich nicht einen Mittelwert sondern ein Mittelwertvektor. Die jeweiligen Vektoren sollen zu einem Mittelwertvektor zusammengefasst werden. Also die jeweiligen Mittelwerte der vershiedenen Messungen (Moment und Winkel). Habe mal veruscht, der mean Befehl nicht in der for Schleife elementweise auszuführen, sondern alsganzer Vektor. Doch leider hat das bis jetzt nicht geklappt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 13.11.2009, 07:38     Titel:
  Antworten mit Zitat      
Hallo code88,

ich verstehe dich leider immer noch nicht. könntest du mal ein Minimalbeispiel mir Ergebnis einstellen, dann kommen wir bestimmt zusammen auf eine Lösung.

Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 13.11.2009, 08:49     Titel:
  Antworten mit Zitat      
Ich habe eine Struktur mit ScanVektor.Moment und ScanVektor.Winkel.
Das kann verglichen werden mit einer X-Y Daten-Kurve. In ScanVektor.Winkel{1} sind die x-Werte in ScanVektor.Moment{1} die y-Werte. In der struct sind mehrere Datenreihen also mehrere X-Y Daten-Kurven und daraus soll ein Mittelwert berechnet werden, damit ich nur noch ein ScanVektor.Moment und ScanVektor.Winkel Vektor habe, der den Mittelwert der Datenreihen darstellt. Also habe ich dann aus verschiedenen x-y Kurven nur noch eine Mittelwertkurve.


ScanVektor.Winkel{1} ScanVektor.Winkel{2} ScanVektor.Winkel{3} etc.
wird zu Mittelwert ScanVektor.Winkel


ScanVektor.Moment{1} ScanVektor.Moment{2} ScanVektor.Moment{3} etc.
wird zu Mittelwert ScanVektor.Moment
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 16.11.2009, 16:36     Titel:
  Antworten mit Zitat      
Ok ich versuche e snun auf eine andere Art.
Ich suche die Zeilen, bei denen der gleiche Wert enthalten ist wie in der vorangehender Zeile. Die Indexe der Zeilen schreibe ich in ein Vektor Kuerzungsvektor. Anschliessend möchte ich aus dem Interpolationsvektor.Winkel die in Kuerzungsvektor enthaltenen Zelladressen löschen. Leider scheint das auch nicht zu funktionieren.
Weiss jeman wieso?


Hier der Fehler

Error in ==> Hauptprogramm at 43
[MWMoment,MWWinkel]=MW_Messungen(ScanVektor,fileDaten);
??? A null assignment can have
only one non-colon index.

Error in ==> MW_Messungen at 19
Interpolation.Winkel{m}(Kuerzungsvektor{m}(i,1),1)=[];

Error in ==> Hauptprogramm at 43
[MWMoment,MWWinkel]=MW_Messungen(ScanVektor,fileDaten);


Code:

 if size(ScanVektor.Titel,2)>1
   for m=1:size(ScanVektor.Titel,2)
       for i=1:(length(ScanVektor.Winkel{m})-1)
           
           if ScanVektor.Winkel{m}(i,1)==ScanVektor.Winkel{m}(i+1,1)
                Kuerzungsvektor{m}(i,1)=i+1;
           else
           end
       end
       m=m+1;
   end
   for m=1:size(ScanVektor.Titel,2)
       Interpolation.Winkel{m}=ScanVektor.Winkel{m};
       for i=1:(length(ScanVektor.Winkel{m}))
           
            Interpolation.Winkel{m}(Kuerzungsvektor{m}(i,1),1)=[];
       end
       m=m+1;
   end
 


Problem.zip
 Beschreibung:

Download
 Dateiname:  Problem.zip
 Dateigröße:  210.82 KB
 Heruntergeladen:  479 mal
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.