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

Code mit for-Schleife erweitern

 

Thagarum
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2009, 15:58     Titel: Code mit for-Schleife erweitern
  Antworten mit Zitat      
Hi,
ich habe hier einen Code Schnippsel, der für k=1 genau das macht was er soll. Ich habe es nicht gschafft bisher das ganze für k>1 zum Laufen zu bringen. Das Ganze steht noch in einer for Schleife ich wollte nur nicht den ganzen Code einstellen, da sonst alles etwas länglich wird.
Im Prinzip gehts darum k eingelesene Messkurven zu bearbeiten.


Code:

[abs_maximum,index_abs_maximum] = max(abs(messung_corrected{k}));
    P=abs(0.5*abs_maximum-abs(messung_corrected{k}));% differenz zwischen y-wert und 0.5* des maximalwerts
    y=P(1:index_abs_maximum);% es werden nur die werte bis zum maximum betrachtet
    zeroindex=find(y==min(y));% findet die stelle des vektors für den y minimal wird
    zeroshift=messung{1,k}{1,1}(zeroindex)% wert an der stelle zeroindex
 


Die für mich logische Lösung an jede Variable ein {k} dranzuhängen hat leider nicht funktioniert. Es wäre schön wenn mir da jemand helfen könnte.


Vielen Dank
Mike
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: 26.06.2009, 17:15     Titel:
  Antworten mit Zitat      
wo kommt denn welcher Fehler ?
Haben deine Variablen genug cell-array-Felder ?
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 26.06.2009, 17:21     Titel:
  Antworten mit Zitat      
Hi,

das Problem könnte dort liegen:

Code:

zeroshift=messung{1,k}{1,1}(zeroindex)
 


Ich gehe mal davon aus, messung_corrected ist eine N*M Matrix mit den jeweiligen Meßwerten pro Spalte. Dann macht der Code bis zu dem obigen Absatz Sinn. Bzw. er macht auch so Sinn, allerdings würde ich kontrollieren was genau in dem Cell Array messung drin steht. Sind das wirklich doppelt geschachtelte Cell Arrays? Und wenn ja steht dann das k an der richtigen Stelle.

Dann sollte es eigentlich so gehen.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Thagarum
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2009, 17:49     Titel: Hier liegt das erste Problem
  Antworten mit Zitat      
Sorry ich kam nicht eher dazu auf die Antworten zu reagieren:
Also, der Code Schnipsel hier sollte mir für jede Messung die Indizes und den Wert raussuchen, d.h. einen Vektor mit k Einträgen für jede Variable liefern.
Lese ich jetzt mehr als eine Datei ein wird nur ein Wert erstellt.

Code:

[abs_maximum,index_abs_maximum] = max(abs(messung_corrected{k}));
 


Eventuell läuft der Rest dann ja schon durch sobald dieses Problem gelöst ist.

Meine Daten werden tatsächlich so verschachtelt eingelesen, den Ausdruck verwende ich an anderen Stellen des Programms ohne Probleme, deshalb glaube ich nicht dass das Problem hier liegt.
Code:

zeroshift=messung{1,k}{1,1}(zeroindex)
 
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: 29.06.2009, 19:22     Titel: Re: Hier liegt das erste Problem
  Antworten mit Zitat      
Confused
Thagarum hat Folgendes geschrieben:
Eventuell läuft der Rest dann ja schon durch sobald dieses Problem gelöst ist.

Was ist denn da dein Problem ?
Wenn messung_corrected ein normales Array ist, erfolgt die Indizierung durch (), {} nimmt man nur bei cellArrays.

Thagarum hat Folgendes geschrieben:
Meine Daten werden tatsächlich so verschachtelt eingelesen, den Ausdruck verwende ich an anderen Stellen des Programms ohne Probleme, deshalb glaube ich nicht dass das Problem hier liegt.

Solls Rätselraten werden, wo der Fehler geworfen wird ??
Private Nachricht senden Benutzer-Profile anzeigen
 
Thagarum
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2009, 12:56     Titel:
  Antworten mit Zitat      
Es kommt eben keine Fehlermeldung, der Code liefert für "zeroshift"
immer nur einen Wert, anstatt k verschiedene Werte.
Die Ursache dafür liegt schon in der ersten Zeile in der der Wert des Maximums und der Index dazu bestimmt werden. Es wird nur ein Wertepaar ausgegeben obwohl ich k Wertepaare benötige.

messung_corrected ist ein cell array deshalb geschweifte Klammern.

Ich hoffe die Problematik ist jetzt klarer geworden.
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: 30.06.2009, 19:12     Titel:
  Antworten mit Zitat      
Wo ist denn der zeroindex bei den Durchläufen bzw. wo sollte er sein ? Hast du dir mal einen Plot von P gemacht um die Rechnung visuell zu prügen ?

aber ich glaub, ich bin raus:
* du schreibst zwei mal, es würde nicht laufen
* du beschreibst auch nicht, was denn genau passieren sollte
* du antwortest auch nicht immer auf Nachfragen
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 01.07.2009, 10:30     Titel:
  Antworten mit Zitat      
Hi,

Ok also zeroindex soll doch eine Zahl sein, so steht es ja in den kommentaren und dem Code. Wenn: messung{1,k}{1,1}(zeroindex) eine Zahl ist, die du immer als vector speichern möchtest kannst du einfach folgendes machen:

Code:

n=10;
zeroshift=zero(n,1);
for k=1:n
[abs_maximum,index_abs_maximum] = max(abs(messung_corrected{k}));
    P=abs(0.5*abs_maximum-abs(messung_corrected{k}));% differenz zwischen y-wert und 0.5* des maximalwerts
    y=P(1:index_abs_maximum);% es werden nur die werte bis zum maximum betrachtet
    zeroindex=find(y==min(y));% findet die stelle des vektors für den y minimal wird
    zeroshift(k)=messung{1,k}{1,1}(zeroindex)% wert an der stelle zeroindex
end
 


Grüße,

derOli
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.