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

vektoren dynamisch erzeugen

 

elcachon
Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 03.08.2011, 16:26     Titel: vektoren dynamisch erzeugen
  Antworten mit Zitat      
hallo, habe folgenden code
Code:

trueloopcounter = 1;
wrongcounter = 1;

for xx =1:length(MyStruct(1,1).xval)
   
        if(~any(MyStruct(1,1).xval(xx),2)==0)
            newVektorX(0+trueloopcounter) = MyStruct(1,1).xval(xx);
           
            trueloopcounter = trueloopcounter+1;
           
       
        else
                       
            falsch = 0+wrongcounter;
            wrongcounter = wrongcounter+1;
            trueloopcounter=1;
        end
end

 

solange keine 0 in MyStruct(1,1).xval zu finden ist, sollen die werte in newVektor reingeschrieben werden!
hier wird der vektor natürlich die ganze zeit überschrieben und es stehen nur die letzten werte drin.
Ich möchte jedoch, jedes mal wenn eine 0 gefunden ist, dass die nachfolgenden Werte in einen neuen newVektor geschrieben werden.
soll mal so aussehen:
newVektor0 = [.......]
newVektor1 = [.......] usw.

hab schon gelesen, dass man das irgendwie über indexe und struct - arrays machen soll, aber wie??
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.08.2011, 17:53     Titel:
  Antworten mit Zitat      
Hallo

mir ist deine Idee nicht klar, vielleicht anhand eines Beispiels beschreiben.

meinst du so:
Code:

newVektorX = MyStruct(1,1).xval(MyStruct(1,1).xval~=0)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 03.08.2011, 18:24     Titel:
  Antworten mit Zitat      
Hallo denny

So sieht der Inhalt einer meiner Struct Variablen aus
Code:

MyStruct(1,1).xval

ans =

    0.5300
    1.7100
         0
   62.5000
   88.1000
         0
   86.6000
  109.1000
         0
  140.6000
  176.3000
         0
  310.0000
  320.0000
         0
  429.0000
  439.0000
         0
   45.2000
   47.8000
         0
   75.2000
   90.9000
         0
  168.7000
  242.4000
         0
 

und ich würde den Inhalt gerne so separieren.
newVektor0 = [ 0.5300 1.7100]
bewVektor1 = [ 62.5000 88.1000] usw.
also alle die Werte, die durch eine NULL getrennt sind sollen auch in einen neuen Vektor geschrieben werden!

Lg elcachon
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: 04.08.2011, 00:09     Titel:
  Antworten mit Zitat      
Hallo elcachon,

"newVector1", "newVector2" etc ist eine schlechte Idee. Man bräuchte später komplizierte Methoden um wieder auf diese dynamisch erzeugten Variablen zugreifen zu können. Ein CELL Vektor ist viel besser.

Code:
data = MyStruct(1,1).xval;
sepInd = find(data == 0);
nSep = length(sepInd) - 1;
b = cell(1, nSep);
for i = 1:nSep
  b{i} = data(sepInd(i) + 1:sepInd(i + 1) - 1);
end

Du musst noch abfangen, ob die Daten mit einer Null beginnen und/oder enden.

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

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 04.08.2011, 08:01     Titel:
  Antworten mit Zitat      
Guten morgen Jan,

Danke für deine Nachricht! Ich weiß das das eine schlechte Idee ist, hab mir schon deine unzähligen posts darüber durchgelesen, aber tut mir leid ich konnte mir einfach nichts zusammenbauen, was für meine Anwendung passt.

Und ich dachte mir vielleicht ist es auch nicht so gut, da meine Daten schon in einem struct stecken und nun schreibe ich sie wieder in ein cell array-->zu umständlich??

Werd dein Beispiel gleich mal durchgehen.
Danke schon mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.08.2011, 08:53     Titel:
  Antworten mit Zitat      
Hier gehts doch bestimmt noch um die Kennlinien Wink

Was sind das denn für Daten, die du gepostet hast...Frequenzbereiche der gesamten Kennlinie? Sonst beschreibe doch mal was du vor hast...evtl. kann man dir ja auch mit der Datenstruktur weiterhelfen, anstatt nun zum Cellarray zu wechseln.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 04.08.2011, 08:56     Titel:
  Antworten mit Zitat      
Hallo Jan,
du noch eine frage:
In b sind aber jetzt nur zwei Felder belegt, die ersten beiden werte von data und die letzten beiden werte, werden nich reingeschrieben!!
Warum???
Wie könnte man das noch anpassen??
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 04.08.2011, 09:23     Titel:
  Antworten mit Zitat      
Guten morgen DSP,
dich hab ich vorher voll überlesen, sorry:)
ja genau es handelt sich um Kennlinien. Das was ich gepostet habe ist die Frequenz in MHz
Code:

%% Minimum Plot of a range of Limit - Files
function f = test_limit_min(data) % data hier ist 1x2 cell array, kann aber
% auch größer sein
% clear all;
close all;
clc;

%% Anzahl der Kennlinien ermitteln
anzahl_k = length(data);
% assignin('base','anzahl_k',anzahl_k);
for ii=1:anzahl_k
    MyStruct(ii,1).name = ['Limit', num2str(ii)];
    MyStruct(ii,1).xval = data{ii}(:,1);
    MyStruct(ii,1).yval = data{ii}(:,2);
end


ich übergebe die daten an meine funktion testlimit schon als cell array und ornde sie dann als struct, damit ich
1. weiß wieviele Kennlinien sich darin verbergen und
2. ich die daten nach freqeuenz(.xval) und dBµV(.yval) schon sortiert hab

alle werte durch NULL getrennt sollen nun ein eigener vektor sein, am besten wäre hier natürlich ein neuer struct oder cell indem ich gleich die freqeunz und dBµV - paare einsortieren kann

denn die null in MyStruct(ii,1).xval ist an der selben Stelle wie in MyStruct(ii,1).yval = data{ii}(:,2);

hoffentlich kann mir jemand folgen!
Sitze seit anfang der woche dran und bin schon fast dabei das Handtuch zu schmeißen
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.08.2011, 10:19     Titel:
  Antworten mit Zitat      
Kann dir noch nicht ganz folgen...
Deine erste Aufgabe ist ja vor der Bestimmung der Gesamtkennlinie, die Struktur mit den Daten der einzelnen Kennlinien zu füllen. Ich nehme mal an, darum geht es hier gerade.

Die Daten

Code:
MyStruct(1,1).xval

ans =

    0.5300
    1.7100
         0
   62.5000
   88.1000
         0


usw. sollen wie in die Struktur geladen werden? Null als Trennung...so etwa?

Code:
MyStruct(1,1).xval = [0.5300 1.7100]
MyStruct(2,1).xval = [62.500 88.100]


Was ist mit den y-Werten? Falls die Daten anders in dem Cellarray stehen, bitte genauer beschreiben.

Ich würde der Struktur ja gleich noch einen besseren Namen verpassen...

Code:

Kennlinie(ii,1).name = ['Limit', num2str(ii)];
Kennlinie(ii,1).frequenz = ....;
Kennlinie(ii,1).dbµV = ...;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 08.08.2011, 10:51     Titel:
  Antworten mit Zitat      
Guten Morgen DSP

Zitat:
Die Daten usw. sollen wie in die Struktur geladen werden? Null als Trennung

Nein! Die Daten stehen mir folgendermaßen zur Verfügung!--Als Cell-Array!
Code:

data =  
    [27x2 double]    [39x2 double] % Cell array mit meinen dBu und Frequenzwerten.
data{1,1}

ans =

    0.5300   30.0000
    1.7100   30.0000
         0         0
   62.5000   12.0000
   88.1000   12.0000
         0         0
   86.6000   12.0000
  109.1000   12.0000
         0         0
 

Den Inhalt des Cell-Arrays data lese ich nun in MyStruct ein, um zu erfahren wieviele unterschiedliche Datensätze(z.B 1x2 cell-Array = 2 verschiedene Datensätze, usw.)

Nun möchte ich die Daten( am besten x-undy-werte) in ein neues cell-array ablegen, aber nur immer bis zur nächsten null, dann werden die nächsten daten unter neuen fieldindex ins gleiche cell array abgelegt, z.B so

Code:

firstData = data{1,1}; % 1.fieldinhalt von data in firstData
sortedCell{1} = firstData(1:2,1:2); % x-und y-Werte in 1.Zelle
% Inhalt 1.Zelle
sortedCell{1,1}

ans =

    0.5300   30.0000
    1.7100   30.0000
sortedCell{2} = firstData(4:5,1:2);
% Inhalt 2. Zelle
sortedCell{2}

ans =

   62.5000   12.0000
   88.1000   12.0000
 

Die Null wird weggelassen und übersprungen.

Mein Ziel: Ich möchte die sortierten x-yWertepaare später sortieren, und zwar nach dem kleinsten x-Wert.
Danach möchte ich in einem plot das geimeinsame Minimum der in diesem Beispiel vorhandenen Daten
Code:
data =  
    [27x2 double]    [39x2 double]
darstellen.

ach schwere geburt, ich hoffe du verstehst mich a bissal.
Weiß nur nicht ob es möglich ist die fieldinhalte nach absteigenden x-Werten zu sortieren!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.08.2011, 11:35     Titel:
  Antworten mit Zitat      
Ehrlich gesagt verstehe ich nun auch nicht viel mehr...

Aber mal der Reihe nach:

1. Hast du die Daten selbst in den Cell-array gepackt? Ich finde das so nämlich ganz schon umständlich...

2. In data{1,1}...1. Spalte sind die Hz und die 2. Spalte die dBu Werte...aber was bedeutet nun die Nulltrennung. Ist das dann Kennlinie 1, 2...usw.? Was ist dann data{1,2}? Ich denke die Anordnung deiner Daten hätte man auch geschickter aufbauen können.

3. Warum lädst du die Daten von cell arrays in struct und nachher wieder zurück? Das ist doch vollkommen überflüssig. Wenn du lieber mit Cell arbeiten möchtest, bleib doch gleich in dem Format. Übrigens kann man auch eine Cell-Struktur aufbauen. Schau mal in der Doku unter 'Cell Arrays of Structures'.

Edit: Ist die Aufteilung immer 2 Werte und dann Null...oder variiert das?
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 08.08.2011, 13:25     Titel:
  Antworten mit Zitat      
hallo,

also zu deinen fragen:
1. Die Daten habe ich in ein Cell-Array geschrieben. Sie befinden sich in einem Textfile und werden von einem kleinen Programm interpretiert; Die 0 steht für einen Text anstatt Zahlen im file!z.B sieht ein Teil meines Files so aus

    0.53 30
    1.71 30
    - % wird als 0 interpretiert
    62.5 12
    88.1 12
    -

2. data{1,1} ist gleich erste Kennlinie richtig und data{1,2} entspricht der zweiten Kennlinie
3. ich weiß tut mir leid, aber ich tu mich halt noch ziemlich schwer das in einen vernünftigen stil zu programmieren!
Das variiert leider, d.h es kann sein das auch mal zwei Nullen folgen und dann erst wieder ein Wertepaar!

Edit:
Ich will einfach die daten von den nullen trennen, damit ich die kennlinien anhand iheres kleinsten Frequenzwertes sortieren kann. Denn anhand der beiden Kennlinien möchte ich nämlich eine resultierende Kennlinie erzeugen, sich immer auf das jeweilige frequenzminimum der jeweiligen Kennlinien bezieht!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 08.08.2011, 14:03     Titel:
  Antworten mit Zitat      
Ok...aber erkläre mir doch wie nun die Daten in data{1,1} sammenhängen. Gehört das alles zu einer Kennlinie...aus deinem Bsp: 0.53...109.1 Hz?

Hier geht es ja immer noch um das Laden...wäre es da nicht sinnvoller die Daten gleich in Mystruct zu laden, zu sortieren und dort bis zum Ende (=Gesamtkennlinie) zu lassen? Mal unabhängig davon, ob du mit Strukturen klar kommst. Hilfe bekommst du ja und du lernst gleich auch noch was mit. Ich würde mir hier auf jeden Fall gleich einen vernünftigen Aufbau/Anordnung der Daten überlegen, als zwischen drin immer wieder an den Formaten zu basteln Wink

Sonst hänge doch mal deinen eingelesenen Datenfile hier als mat-file (gepackt) an.
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 08.08.2011, 14:40     Titel:
  Antworten mit Zitat      
Hey
ja die Daten in data{1,1} gehören zu einer Kennlinie und die Daten in Daten in data{1,2} gehören zur zweiten Kennlinie!
Zitat:
..wäre es da nicht sinnvoller die Daten gleich in Mystruct zu laden, zu sortieren und dort bis zum Ende (=Gesamtkennlinie) zu lassen?


das denke ich auch, leider happerts bei der Umsetzung, denn wenn ich sortiere, müssen ja zu denn sortierten x-werten auch die y-werte angepasst werden...ach gott es werden ja immer mehr baustellen!Sad

mat-file ist hier verboten, wie kann ich die sonst anhängen??
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Themenstarter

Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 08.08.2011, 14:42     Titel:
  Antworten mit Zitat      
ach habs denke so hast du das gemeint oder??

limit.zip
 Beschreibung:

Download
 Dateiname:  limit.zip
 Dateigröße:  456 Bytes
 Heruntergeladen:  337 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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.