Verfasst am: 09.08.2010, 16:13
Titel: 2d matrix in 3d Matrix speichern....
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 ????????
Verfasst am: 09.08.2010, 16:18
Titel: Re: 2d matrix in 3d Matrix speichern....
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.
% 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};
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;
%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;
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)
......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....
"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.
wow krass schnell Deine Antwort... Danke.......ohhhh ja die Fehlermeldung lautet.......wie folgt:
??? Subscripted assignment dimension mismatch.
Error in ==> dienstag at 67
i_(:,=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..........
% 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=[510204080];
%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_;
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,:);
%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));
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
%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=[510204080];
% 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_;
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,:);
%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));
btw es war keine Frage..........nur eine Feststellung von mir......
ciao
Chung
Einstellungen und Berechtigungen
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
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.