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

Speichern von Zwischenwerten einer For-Schleife in Excel

 

Odem
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 24.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 02:50     Titel: Speichern von Zwischenwerten einer For-Schleife in Excel
  Antworten mit Zitat      
Hi,

Habe folgendes Problem:
Mein Code durchlaeuft eine for-Schleife und jedes mal will ich mein Zwischenergebnis speichern. Dies am besten in einen Vektor der Form (1,4). Es sollen naemlich vier Werte gespeichert werden: x_mb, x_k(end), p_d(end), R (der code wird unten zur Verfuegung gestellt).

Die Form des Vektors wuerde so aussehen:

q=1: x_mb(1), x_k(1), p_d(1), R(1)
q=2: x_mb(2), x_k(2), p_d(2), R(2)
q=3: etc...

Habe mich schon ein wenig eingelesen:
http://www.gomatlab.de/abspeichern-.....eife-in-excel-t18557.html
Leider komme ich damit nicht ans Ziel und der Ersteller hat auch nicht weiter geantwortet.

Das Ziel ist das gleich wie in dem anderen Thread: Ich bekomme bei jedem Schleifendurchlauf Werte, die ich gerne Zwischenspeichern wuerde um sie nach Ablauf in eine Excel-Tabelle untereinander schreiben zu lassen.

Hier der komplette Code:
Code:

clear all
clc
load_system 'BA_KolbenSim'

% Startwerte fuer Integratoren
ps = 50e5;
pd = 50e5;
xdw = 0.003;
vdw = 0;
xk = 0;
vk = 10;

% Werte zur Auswertung
k=0; % wird eigentlich nicht benoetigt
p=100e5; % referenzdruck

a=0; % startwert x
b=0.001; % intervall fuer x
c=0.015; % endwert x
x_k=0; % startwert fuer Kolbenposition
p_d=50e5; % startwert fuer Druck im Daempfungsraum

q=0; % laufvariable fuer excel
w=zeros(q,4); % 4 Spalten fuer x, x_mb, p_d und R

while x_k<0.001
R=10e10;
q=q+1; % nach jedem Durchlauf wird eine neue Zeile erzeugt

  for x=a:b:c
        k=k+1;
        sim('BA_KolbenSim');
        if R>abs(p-p_d(end))
            R=abs(p-p_d(end));
            x_mb=x;
        end  
  end
x=x_mb;
sim('BA_KolbenSim');
 
ps = p_s(end);
pd = p_d(end);
xdw = x_dw(end);
vdw = v_dw(end);
xk = x_k(end);
vk = v_k(end);


end
 


Ich definiere eine Laufvariable q und einen Vektor w mit den Dimensionen (q,4) und lasse q mit jedem Durchlauf wachsen. Aber wie bekomme ich die Werte in den Vektor, bzw. wie bekomme ich diese Werte in Excel, ohne, dass die Werte vom naechsten ueberschrieben werden? Hat Jemand eine Idee? Mir fehlt eben Diese.

Danke schonmal fuer die Hilfe!

lg Odem
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.03.2013, 09:32     Titel: Re: Speichern von Zwischenwerten einer For-Schleife in Excel
  Antworten mit Zitat      
Hallo Odem,

Du kannst die Werte einfach an ein File anfügen, das Du vor der Schleife öffnest und nach der Schleife wieder schließt:
Code:
% Auf "clear all" sollte man verzichten!
...
fid = fopen('Output.csv', 'w');
if fid == -1, error('Cannot open file for writing.'); end
while x_k<0.001
   ...
   ps = p_s(end);
   pd = p_d(end);
   xdw = x_dw(end);
   vdw = v_dw(end);
   xk = x_k(end);
   vk = v_k(end);
   
   fprintf(fid, '%g, %g, %g, %g\n', x_mb(1), x_k(1), p_d(1), R(1));
end
fclose(fid);

Die Laufvariable q ist dabei dann unnötig.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 24.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 10:00     Titel:
  Antworten mit Zitat      
wow, das ist ja genial! Vielen, vielen Dank!
Es ist wohl noch ein echt langer Weg, bis ich Matlab und Simulink auf einem zufriedenstellenden Level beherrsche.

Der einzige Nachteil an deiner Variante:
Alle vier Werte werden nun mit einem Komma getrennt in dasselbe Feld von Excel geschrieben. Aber da werde ich nochmal schauen, wie ich diesen Fehler behebe. Kann es sein, dass ich beim fprint-Befehl die Kommata mit Semikolon (puh, was ist die Mehrzahl von Semikolon??) ersetzen muss?

z.B.:
Code:

fprintf(fid, '%g; %g; %g; %g\n'; x_mb(1); x_k(1); p_d(1); R(1));
 


lg Odem
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 10:39     Titel:
  Antworten mit Zitat      
Hallo Odem,

In dem Code von Jan wird in eine csv-Datei geschrieben. Entweder du importierst die Daten daraus in dein Excel-Sheet oder du schaust dir mal xlswrite an. Damit schreibt man direkt in ein Excel-File.

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Odem
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 24.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 12:16     Titel:
  Antworten mit Zitat      
Hi Seban,

Danke fuer deine Antwort. Habe herausgefunden, dass excel das automatisch trennen kann Smile

Danke an euch beide!
Wuerde euch jetzt gerne ein Bier ausgeben Razz
Ihr habt mir sehr weitergeholfen.

Ist echt eine Hammer-community. Ich hoffe, dass ich bald selber etwas beitragen kann und nicht nur dumme Fragen stelle.

lg odem
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 13:18     Titel:
  Antworten mit Zitat      
Gern geschehen.

Odem hat Folgendes geschrieben:
Habe herausgefunden, dass excel das automatisch trennen kann Smile

Kannst du mal bitte posten wie das geht, rein aus Interesse.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Odem
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 24.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2013, 13:53     Titel:
  Antworten mit Zitat      
Wenn all deine Daten in einer Zelle stehen, dann hilft das hier:
Bsp.: 1,2,3,4 steht in einer Zelle, du willst aber, dass jede Zahl in einer seperaten steht.
Gehe auf den Reiter "Daten", auf der linken Seite gibt es die Option "Text in Spalten".
Hier kannst du auswaehlen, mit welchen Bedingungen er trennen soll. In diesem Fall einfach einen Haken bei "Komma" machen. Dafuer musst du vorher einfach nur deinen Datensatz markieren.

Hoffe, dass das dir hilft.

lg Odem

ps. ich benutze Office2010
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 04.03.2013, 14:05     Titel:
  Antworten mit Zitat      
Danke, wieder was gelernt. Kannte ich noch nicht.

MfG
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.03.2013, 19:02     Titel:
  Antworten mit Zitat      
Hallo Odem,
Zitat:
Ist echt eine Hammer-community. Ich hoffe, dass ich bald selber etwas beitragen kann und nicht nur dumme Fragen stelle.

Aber Du hast hier bereits produktiv beigetragen: Wir haben zusammen ein Problem so erörtert, dass auch andere davon profitieren können. Daran ist nichts dumm, im Gegenteil!

Gruß, Jan
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.