Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

For Schleife

 

delikanli81
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2019, 11:41     Titel: For Schleife
  Antworten mit Zitat      
Hallo zusammen,

ich möchte mit einer for Schleife folgendes machen:

- es werden in die "alle_daten" zahlen hineingeschrieben und zwar immer in die erste Spalte.
- ich möchte in einer neuen Matrix (neu) die Ergebnisse -nach jedem durchlauf- in neue Spalten hineingeschrieben haben.

Fehlermeldung:
Subscripted assignment dimension
mismatch.

Error in SM_1 (line 23)
neu(:,i)=alle_daten(:,1);


[leer, text, Daten]=xlsread('s_11_temperaturaenderung_bezug_und_lieferung_3019','Daten','A:B');
Fehler=str2double(text(:,2))/1000;
ParamName=cellstr(text(:,1));

n=9;
P_Plus='P+';
P_Minus='P-';
Temperatur={'-40'; '-25'; '-10'; '+5'; '+23'; '+30'; '+40';'+55'; '+70' };

for i=1:n
TF=[contains(ParamName(:,1), P_Plus),contains(ParamName(:,1), Temperatur(i,1))];
TF(:,3)= TF(:,1).*TF(:,2);
x=TF(:,3)*1;
zeile=find(x);
alle_daten=(Fehler(zeile,1));
neu(:,i)=alle_daten(:,1);
end 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 02.03.2019, 13:22     Titel:
  Antworten mit Zitat      
Hallo,

vermutlich bekommst du in jeder Iteration unterschiedlich viele Daten. Das könntest du mit dem Debugger analysieren.
Eine Möglichkeit kann sein, die Daten in einem Cell Array zu sammeln.
Code:
neu{i}=alle_daten(:,1);


Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 09:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank; das ist genau der Punkt denke ich. Allerdings weiß ich nicht wie ich das Problem lösen kann.

Ich habe versucht für "neu" die Zellgröße zu definieren aber ohne Erfolg.

neu{i}=alle_daten(:,1);
ergibt folgendes Ergebnis, siehe Anhang 

neu.pdf
 Beschreibung:

Download
 Dateiname:  neu.pdf
 Dateigröße:  87.36 KB
 Heruntergeladen:  10 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.03.2019, 10:00     Titel:
  Antworten mit Zitat      
Hallo,

aus meiner Sicht ist das eine Lösung. Was möchtest du denn haben? Eine Matrix mit unterschiedlich vielen Zeilen geht jedenfalls nicht.

Es scheint ja in jeder Datei ein Vielfaches von 28 zu sein. Dann könnte man die Inhalte des Cell Arrays verketten und in eine 28xn-Matrix umwandeln.
Code:
neu2 = reshape( vertcat( neu{:} ), 28, [] )


Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 10:06     Titel:
  Antworten mit Zitat      
Für
alle_daten(:,i)=(Fehler(zeile,1));

müssten doch alle Daten nacheinander in die Spalte i geschrieben werden => auch das hilft nicht. 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.03.2019, 10:33     Titel:
  Antworten mit Zitat      
Hallo,

deswegen habe ich dir ja einen anderen Vorschlag gemacht.
Hast du den Befehl denn mal versucht? Mit welchem Ergebnis?

Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 10:56     Titel:
  Antworten mit Zitat      
sorry, die Nachrichten haben sich überschnitten. Danke für den Tipp, das funktioniert ohne Fehlermeldung. ABER: Das Problem ist allerdings, dass die Zellen bei 28 abgeschnitten werden und die Leeren Zellen nicht berücksichtigt werden.
D.h. ich benötige schon ein flexibles Array alle_daten, in das ich "alles mögliche" hineinschreiben lassen kann (je nach welche Zellen ich in zeile=find(x); finde). Die Spalten sollten so beibehalten werden, weil ich diese Daten dann im Anschluss in eine Excel-Datei mit fester Spaltenordnung einfügen möchte.

Es wundert mich, dass man ein Array Spalte für Spalte vorher schon definieren muss.

Gibt es hierfür wirklich keine andere Möglichkeit ein "flexibles Array zu definieren? 
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 11:11     Titel:
  Antworten mit Zitat      
könnte man evtl in die Schleife -bei jedem Durchlauf- die Spaltenzahl für alle_daten auslesen und das Array entsprechend (innerhalb des Durchlaufs) definieren? 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.03.2019, 11:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
D.h. ich benötige schon ein flexibles Array alle_daten, in das ich "alles mögliche" hineinschreiben lassen kann (je nach welche Zellen ich in zeile=find(x); finde). Die Spalten sollten so beibehalten werden, weil ich diese Daten dann im Anschluss in eine Excel-Datei mit fester Spaltenordnung einfügen möchte.

Genau das wäre an sich das Cell Array neu.

Zitat:
Gibt es hierfür wirklich keine andere Möglichkeit ein "flexibles Array zu definieren?

Das ist das Cell Array ;)

Zitat:
könnte man evtl in die Schleife -bei jedem Durchlauf- die Spaltenzahl für alle_daten auslesen und das Array entsprechend (innerhalb des Durchlaufs) definieren?

Verstehe ich nicht. Meinst du wenn nicht die Zeilenzahl?

Die einzige Alternative, die ich noch sehe, ist eine Matrix zu erstellen, in der die fehlenden Werte auf NaN gesetzt werden. Dem Screenshot zufolge also 56 Zeilen, von denen innerhalb einer Spalte ggf. die untere Hälfte oder sogar die ganze Spalte NaN ist.

Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 12:38     Titel:
  Antworten mit Zitat      
Das Cell Array ist durch die Angabe "28" auf 28 Zeilen beschränkt; also alles was in alle_daten abgelegt wird MUSS 28 oder ein vielfaches an Zahlen haben.

Es kommt aber vor, dass beliebig viele Zahlen in die Spalten geschrieben werden müssen... Deshalb war mein Wunsch einer "flexible Zelle". 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.03.2019, 13:33     Titel:
  Antworten mit Zitat      
Hallo,

nein, das Cell Array neu ist nicht beschränkt. Da stehen ja z.B. auch die 56 Werte drin, siehe dein Screenshot.

Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 13:54     Titel:
  Antworten mit Zitat      
ja, aber in der falschen Spalte. Sprich, nachdem in Spalte 1 die 28 aufgefüllt sind, wird mit der Spalte 2 weiter befüllt.

Kann man nicht vorher schon ein Array definieren mit 100x100, nur mit Nullen und dann mit

alle_daten(:,i)=(Fehler(zeile,1));

alles füllen?

langsam werden ich nervös Sad 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.03.2019, 14:30     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ja, aber in der falschen Spalte. Sprich, nachdem in Spalte 1 die 28 aufgefüllt sind, wird mit der Spalte 2 weiter befüllt.

Das stimmt nicht. Überzeuge dich bitte selbst anhand deines Screenshots. Nochmal: es geht gerade um das Cell Array neu, nicht meinen Vorschlag für neu2.

Zitat:
ja, aber in der falschen Spalte. Sprich, nachdem in Spalte 1 die 28 aufgefüllt sind, wird mit der Spalte 2 weiter befüllt.

Klar kann man:
Code:
alle_daten = zeros(100,100)


Zitat:
und dann mit
alle_daten(:,i)=(Fehler(zeile,1))
alles füllen?

Wenn die rechte Seite nicht 100 Werte beinhaltet, dann ist es ja gerade nicht alles, was gefüllt werden muss.
Das war ja bereits mein Vorschlag, allerdings müsstest du händisch auffüllen, z.B. mit NaN.

Zitat:
langsam werden ich nervös Sad

Daran kann ich leider nichts ändern. Ich würde dir auch gerne schneller helfen. Dazu müsste ich aber von Anfang an verstehen, wo genau das Problem liegt.

Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
delikanli81
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2019, 14:50     Titel:
  Antworten mit Zitat      
Hallo Harald,

ok, also ich habe im Anhang versucht die Aufgabe zu beschreiben. Schau's Dir bitte mal an.

Danke und Grüße,
Delikanli 

Aufgabenstellung.pdf
 Beschreibung:

Download
 Dateiname:  Aufgabenstellung.pdf
 Dateigröße:  273.17 KB
 Heruntergeladen:  7 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 19.644
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 04.03.2019, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

und genau das liefert doch das Cell Array neu, oder?
Du hast diesen Vorschlag ja versucht und ich weiß immer noch nicht recht, was das Problem mit diesem Vorschlag ist.

Auch für den Fall, dass du lieber eine Matrix möchtest, habe ich dir bereits zweimal eine Vorgehensweise vorgeschlagen. Hier ein Beispiel für die Umsetzung:
Code:
maxL = max(cellfun(@length, cneu));
result = zeros(maxL, length(cneu));
for k = 1:size(result, 2)
    result(1:numel(cneu{k}), k) = cneu{k};
end


Bei Rückfragen gehe bitte genau auf die Vorschläge und die Probleme mit ihnen ein. Ansonsten kann ich dir leider nicht weiterhelfen.

Grüße,
Harald 
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  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
.



goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2019 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.