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

2d matrix in 3d Matrix speichern....

 

chunkrfg.tu.berlin
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 03.08.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 09.08.2010, 16:13     Titel: 2d matrix in 3d Matrix speichern....
  Antworten mit Zitat      
hallo ....

ich habe gerade ein Problem ...ich habe 2d Matrix, deren Werte ich zunächst nutzen möchte (d.h. in Formeln einsetzen), als Ergebnis bekomme ich auch ....2d MAtrix............Das Ergebnis hat die Dimension 5x5 Matrix.......und ich bekomme 5 Ergebnisse .....d.h. 5mal 5x5 Matrix......


Meine Frage::::
Wie speichert man sie als 3d Matrix???????mit reshape ????????


vielen Dank im Voraus [/code]
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: 09.08.2010, 16:18     Titel: Re: 2d matrix in 3d Matrix speichern....
  Antworten mit Zitat      
Hallo chunkrfg,

die Frage wird mir nicht klar. Am besten wäre es, Du postest das Ganze in Form eines Matlab Programms. Wenn Du fragst, ob es mit RESHAPE funktioniert, wäre es natürlich auch praktisch zu wissen, ob du das auch einfach mal probiert hast.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chunkrfg.tu.berlin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 03.08.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 09.08.2010, 16:47     Titel: 2d matrix in 3d Matrix speichern....
  Antworten mit Zitat      
Hallo Jan ,
Danke für die schnelle Antwort zuerst.....
ok mein m-file sieht wie folgt aus.....
Code:

clc
clear
close all
format short

% NICT VERGESSEN....t ZU ÄNDERN FÜR JEDE NEUE PUMPE. Für Hochbehälterbetrieb t=400s
% h ist die verschiedene Anzahl der Umschaltung...hmm Die Messung wurde bei
% 5 verschiedener Umschaltzahl durchgeführt
for h=1:5;
   %Kontinuierlicher Füllvorgang
   H=num2str(h);
   ordner_kont=['C:\Users\Lim Chung\Desktop\studienarbeit\LIM\LIM\',H,'\kont',H,'\'];
   files=dir([ordner_kont,'*.lvm']);
   names_kont={files.name};
   
   %Intervall-Messung
   ordner_int=['C:\Users\Lim Chung\Desktop\studienarbeit\LIM\LIM\',H,'\int',H,'\'];  
   files=dir([ordner_int,'*.lvm']);
   names_int={files.name};
   
for i=1:5;
   
   A=fullfile(ordner_kont,names_kont{i});
   % Die Matrizen mit den Daten.....
   k_(1,:)=dlmread(A,'\t',21,0);
   %nun die 1 Zeile mit den Messdaten wird eingelesen
   Messdaten_kont(1,:)=k_(1,:);
   
   
   M_kont=Messdaten_kont(1,8);
   V_kont=Messdaten_kont(1,12);
   rho_kont=Messdaten_kont(1,10);
   % immer 400
   t_kont=400;
   
   
        for j=1:5;
           
            B=fullfile(ordner_int,names_int{j});
           
            %hier die Daten in nxn (n=Anzahl der Umschaltungen......) Matrixxxxxxxx
            i_(:,:)=dlmread(B,'\t',21,0);
            %Nun die n Zeilen Messdaten.....
            Messdaten_int(:,:)=i_(:,:);
           
           
           
            %Anzahl der Umschaltungen....
            n=Messdaten_int(end,2);
            M_int=Messdaten_int(end,8);
            % für V und Rho Werte werden gemittelt....
            V_int=mean(Messdaten_int(:,12));
            rho_int=mean(Messdaten_int(:,10));
            %Intervall-Umschaltzeit....
            t_int=400;
           
           
           
           
            delta(i,j)=((M_kont*t_int)-(M_int*t_kont*((V_kont/V_int)*(rho_kont/rho_int))))/(M_int*(V_kont/V_int)*(rho_kont/rho_int)-(M_kont*n));
           
           
           
           
        end
   
end
%aus 2D wird eine 3D Matrix??????????????????????
delta_t=reshape(delta,,,h)
%diag(:)=diag(delta_t(:,:));
%delta_t_DM(1,h)=mean(diag);
end
 



hmmm ich hoffe es wird richtig dargestellt.....
1. Zunächst mal ich habe Dateien in 5 Ordnern ...wenn ich manuell für jeden einzelnen Ordner den Dateipfad eingebe klappt Alles prima......dann bekomme ich was ich will....

Nun versuche ich gerade MATLAB zu sagen......mach bitte die Ordner selber auf....und setz die Werte in Formeln ein ....

2. Es klappt glaub ich schon ganz gut mit dem Öffnen durch MATLAB......durch die 1. FOR SCHLEIFE MIT h als Index.....

3. durch die 2. und 3. FOR_Schleife....lasse ich MATLAB in die Matrix delta für mich ausgeben (DAS ERGEBNIS)
Very Happy ......ich möchte nun delta in delta_t speichern und zwar als 3d MATRIX( sieht man am Ende hoffentlich.......).....es hat bisher nicht geklapppt.........



ich habe das versucht durch einfachen Syntax....ging aber auch nicht....
Code:
delta_t(:,:,h)=delta



yyyyooo Danke noch mal
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: 09.08.2010, 17:55     Titel:
  Antworten mit Zitat      
Hallo Chung,

"hat nicht geklappt" sagt leider nicht sehr viel. Gab es eine Fehlermeldung, wenn ja, welche und in welcher Zeile? Weichen die Ergebnisse von Deinen Erwartungen ab?

Eigentlich sieht das ganz gut aus, und folgendes läuft auch:
Code:
x = rand(5, 5);  % Irgend eine matrix
y(:, :, 1) = x;
x = rand(5, 5);
y(:, :, 2) = x;
 

Dabei gilt aber die generelle Regel, dass es in Matlab immer sehr langsam ist, ein Array in einer Schleife wachsen zu lassen. Pre-Allocierung ist hier eine deutliche Beschleunigung: Dabei Erzeugt man zuerst eine Matrix der gewünschten Größe und fügt dann Stück für Stück die Werte ein.

Wo also hakt es?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chunkrfg.tu.berlin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 03.08.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 10.08.2010, 12:23     Titel:
  Antworten mit Zitat      
Howdy Jan,


wow krass schnell Deine Antwort... Smile Danke.......ohhhh ja die Fehlermeldung lautet.......wie folgt:

??? Subscripted assignment dimension mismatch.

Error in ==> dienstag at 67
i_(:,Smile=dlmread(B,'\t',21,0);

und ich habe das Pre locating angewndt.....es ist eigentlich das gleiche M-File aber ganz am Anfang kommmt einfach die ganze Pre Locating...und in der 1. For-Schleife auch..........



Code:



clc
clear
close all
format short


% pre allocation
x=zeros(1,12);
k_=x;      
Messdaten_kont=x;
delta_t=zeros(5,5);    
delta_t_3d=zeros(5,5,5);
% später soll mein Ergebnis eien 3D Matrix sein.........deren Werte noch eingefügt werden.....
% Anzahl der Umschaltung....!!!!!!!!!!!!!!!!! MUSSS immer wieder geändert
% werden.....je nach Pumpenbauart......
Anzahl=[5 10 20 40 80];
%n=zeros(1,5);


% immer 400
t_kont=400;
%Intervall-Umschaltzeit....
t_int=400;



for h=1:5;
   % pre allocating von i_ wichtig für j-Schleife, hier ändert sich die grösse von i_
   % ständig je nach Umschaltanzahl.
   i_=zeros(Anzahl(h),Anzahl(h));
   Messdaten_int=i_;
   
   
   %Kontinuierlicher Füllvorgang
   H=num2str(h);
   ordner_kont=['C:\Users\Lim Chung\Desktop\studienarbeit\LIM\LIM\',H,'\kont',H,'\'];
   files=dir([ordner_kont,'*.lvm']);
   names_kont={files.name};
   
   %Intervall-Messung
   ordner_int=['C:\Users\Lim Chung\Desktop\studienarbeit\LIM\LIM\',H,'\int',H,'\'];  
   files=dir([ordner_int,'*.lvm']);
   names_int={files.name};
   
   
for i=1:5;
   
   
   A=fullfile(ordner_kont,names_kont{i});
   % Die Matrizen mit den Daten.....
   k_(1,:)=dlmread(A,'\t',21,0);
   %nun die 1 Zeile mit den Messdaten wird eingelesen
   Messdaten_kont(1,:)=k_(1,:);
   
   
   M_kont=Messdaten_kont(1,8);
   V_kont=Messdaten_kont(1,12);
   rho_kont=Messdaten_kont(1,10);
   
   
   
        for j=1:5;
           
            B=fullfile(ordner_int,names_int{j});
           
            %hier die Daten
            i_(:,:)=dlmread(B,'\t',21,0);
            %Nun die n (Anzahl der Umschaltungen......) Zeilen Messdaten.....
            Messdaten_int(:,:)=i_(:,:);
           
           
           
            %Anzahl der Umschaltungen....
            %n(h)=Anzahl(h);
            n=Messdaten_int(end,2);                    
            M_int=Messdaten_int(end,8);
            % für V und Rho Werte werden gemittelt....
            V_int=mean(Messdaten_int(:,12));
            rho_int=mean(Messdaten_int(:,10));
           
           
           
           
            % nun symetrische Matrix aufstellen.....
            delta_t(i,j)=((M_kont*t_int)-(M_int*t_kont*((V_kont/V_int)*(rho_kont/rho_int))))/(M_int*(V_kont/V_int)*(rho_kont/rho_int)-(M_kont*n));
           
           
           
           
        end
   
end

% die Delta_t's werden als 3D Matrix  gespeichert....
diagonal=diag(delta_t);
delta_t_3d(:,:,h)=delta_t;

% MIttelwert von delta_t
delta_t_DM(:)=mean(diagonal)

end


 



zu den Messungen......

1. kontinuierlich Messung ------Ergebnis immer nur in einer Zeile .......


2. Intervall Messung----Ergebnis variiert von 5x5 (5 Zeilen und 5 Spalten)dann 10x10 (10 Zeilen und 10 Spalten) 20x20, 40x40 , 80x80- Matrix



vielen2 Dank
Chung

LIM.zip
 Beschreibung:

Download
 Dateiname:  LIM.zip
 Dateigröße:  35.61 KB
 Heruntergeladen:  517 mal
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: 10.08.2010, 17:40     Titel:
  Antworten mit Zitat      
Hallo Chung,

Zitat:
??? Subscripted assignment dimension mismatch.
Error in ==> dienstag at 67
i_(:,:) = dlmread(B,'\t',21,0);

Die Meldung ist hilfreich: Offenbar liefert DLMREAD ein Array zurück, das nicht in i_ hinein passt. Versuche es mal mit dem Debugger:
Code:

Dann lasse das Programm nochmal laufen, bis der Debugger in der Zeile stoppt, die ein Problem verursacht. Dann schau Dir mal die Dimensionen an:
Code:
size(i_)
x = dlmread(B, '\t', 21, 0);
size(x)
 


Viel erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chunkrfg.tu.berlin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 03.08.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 15.08.2010, 17:34     Titel:
  Antworten mit Zitat      
Hallo Jan,

zunächst vielen2 Dank für die Hilfe bisher.....und sorry weil ich die letzten Tage einfach arbeiten musste habe ich mich nicht darum gekümmert..........


wohhhhh.....ich habe der Matrix i_ falsche Grösse gegeben, weshalb die Fehlermeldung immer wieder auftauchte.....


es hat nun Alles geklappt.......ich habe echt 'ne Menge gelernt.......


Meine letzte Frage ( hoffentlich)::::

Alles hat geklappt nachdem ich die Matrix i_ mit einer Pre Allocation festgelegt habe ( d.h. eine Matrix mit Nullen festlegen......), weil die Grösse der Matrix i_ sich immer wieder ändert...und die Werte eigentlich aus den Dateien eingelesen wurden.........aber bei k_ habe das nicht gemacht....( sie ist auch 'ne 1x12 Matrix , deren Werte auch aus Dateien
eingelesen wurden).......weil die Grösse von k_ sich nicht ändert ....


noch einmal vielen2 Dank,
Chung

PS: schick mir deine Adresse dann kriegst du Schokolade aus Berlin huahahaha

ach ja so sieht mein code nun aus
Code:



clc
clear
close all
format short


% pre allocation

%2D Matrix
delta_t=zeros(5,5);
%Ergebnis 3D Matrix
delta_t_3d=zeros(5,5,5);
% die gesuchten Zeitfehler!!!!!! Es sind insgesamt 5 ....
delta_t_DM=zeros(1,5);


% Da später soll mein Ergebnis eien 3D Matrix sein.........deren Werte noch eingefügt werden.....
% Anzahl der Umschaltung....!!!!!!!!!!!!!!!!! MUSSS immer wieder geändert
% werden.....je nach Pumpenbauart......

Anzahl=[5 10 20 40 80];


% immer 400
t_kont=400;
%Intervall-Umschaltzeit....
t_int=400;



for h=1:5;
   % pre allocating von i_ wichtig für j-Schleife, hier ändert sich die grösse von i_
   % ständig je nach Umschaltanzahl.Allerdings Spaltenanzahl BLEIBT ....12
   i_=zeros(Anzahl(h),12);
   Messdaten_int=i_;
   
   
   %Kontinuierlicher Füllvorgang
   H=num2str(h);
   ordner_kont=['C:\Users\Lim Chung\Desktop\studienarbeit\LIM\LIM\',H,'\kont',H,'\'];
   files=dir([ordner_kont,'*.lvm']);
   names_kont={files.name};
   
   %Intervall-Messung
   ordner_int=['C:\Users\Lim Chung\Desktop\studienarbeit\LIM\LIM\',H,'\int',H,'\'];  
   files=dir([ordner_int,'*.lvm']);
   names_int={files.name};
   
   
for i=1:5;
   
   
   A=fullfile(ordner_kont,names_kont{i});
   % Die Matrizen mit den Daten.....
   k_(1,:)=dlmread(A,'\t',21,0);
   %nun die 1 Zeile mit den Messdaten wird eingelesen
   Messdaten_kont(1,:)=k_(1,:);
   
   
   M_kont=Messdaten_kont(1,8);
   V_kont=Messdaten_kont(1,12);
   rho_kont=Messdaten_kont(1,10);
   
   
   
        for j=1:5;
           
            B=fullfile(ordner_int,names_int{j});
           
            %hier die Daten
            i_(:,:)=dlmread(B,'\t',21,0);
            %Nun die n (Anzahl der Umschaltungen......) Zeilen Messdaten.....
            Messdaten_int(:,:)=i_(:,:);
           
           
           
            %Anzahl der Umschaltungen....
            %n(h)=Anzahl(h);
            n=Messdaten_int(end,2);                    
            M_int=Messdaten_int(end,8);
            % für V und Rho Werte werden gemittelt....
            V_int=mean(Messdaten_int(:,12));
            rho_int=mean(Messdaten_int(:,10));
           
           
           
           
            % nun symetrische Matrix aufstellen.....
            delta_t(i,j)=((M_kont*t_int)-(M_int*t_kont*((V_kont/V_int)*(rho_kont/rho_int))))/(M_int*(V_kont/V_int)*(rho_kont/rho_int)-(M_kont*n));
           
           
           
        end
   
end

% die Delta_t's werden als 3D Matrix  gespeichert....
delta_t_3d(:,:,h)=delta_t;


%Diagonal Matrix
diagonal_matrix=diag(delta_t);

% MIttelwert von delta_t...bei gleicher Anzahl von Intervall- und
% Kontunuerlicher Messung....
delta_t_DM(h)=mean(diagonal_matrix);

end


delta_t_3d
delta_t_DM
 
Private Nachricht senden Benutzer-Profile anzeigen
 
chunkrfg.tu.berlin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 03.08.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 15.08.2010, 17:35     Titel:
  Antworten mit Zitat      
btw es war keine Frage..........nur eine Feststellung von mir......

ciao
Chung
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.