Aus Meshgrid Wertepaare kombinieren
Schmankerl
Forum-Fortgeschrittener
Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
Verfasst am : 11.01.2013, 18:09
Titel : Aus Meshgrid Wertepaare kombinieren
Hallo,
leider komme ich nicht drauf, wie ich die Wertekombinationen einer Meshgrid in eine neue Matrix schreibe:
Beispiel:
Vektor und Vektor sind gegeben, Ziel ist es eine Matrix daraus zu erstellen die wiefolgt aussieht:
Das ganze soll möglichst ohne Verwendung der Schleifenfunktion mittels Meshgrid funktionieren:
Nur dann weiß ich leider nicht weiter wie ich die Matrix A auf möglichst einfache Weise erhalte.
Hätte mir jemand einen Tipp?
Schmankerl
Themenstarter
Forum-Fortgeschrittener
Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
Verfasst am : 13.01.2013, 14:45
Titel :
Könnte mir bitte noch jemand helfen?
Sirius3
Forum-Guru
Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
Verfasst am : 13.01.2013, 15:27
Titel :
was steht denn in X und Y drin?
Welche Größe haben die beiden Matrizen?
Welche Größe hat die Ziel-Matrix A?
Harald
Forum-Meister
Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 13.01.2013, 16:26
Titel :
Hallo,
ich würde repmat verwenden.
Grüße,
Harald
Schmankerl
Themenstarter
Forum-Fortgeschrittener
Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
Verfasst am : 14.01.2013, 11:04
Titel :
Code:
clear all %Workspace leeren
clc %Command Window leeren
R=287 ; %Gaskonstante
cp=1004.5 ; %Wärmekapazität
tn=1000 ; %Schrittweite Temperatur festlegen
pn=20 ; %Schrittweite Druck festlegen
p0=0.3 ; %Startwert Druck
pMax=30 ; %Maximalwert Druck
t0=233 ; %Startwert Temperatur
tMax=1600 ; %Maximalwert Temperatur
k=cp/( cp-R) ; %Isentropenexponent
m0=750 ; %Massenstrom
my=5.3 ; %Nebenstromverhältnis
F_n=88000 ; %Schub
c0=220 ; %Fluggeschwindigkeit
%% Rechengebiet erstellen
p=linspace ( p0,pMax,pn) ; %Vektor Druck definieren
T=linspace ( t0,tMax,tn) ; %Vektor Temperatur definieren
[ X,Y] =meshgrid ( p,T) ;
A = [ reshape ( repmat ( X', numel ( Y) , 1 ) , repmat ( Y, numel ( X) ,1 ) ) ] ;
Wenn ich das ausführe, erhalte ich:
Zitat:
??? Out of memory. Type HELP MEMORY for your options.
Error in ==> repmat at 92
B = A(mind,nind);
Error in ==> Exergieberechnung_Duese_Test at 34
A = [reshape(repmat(X', numel(Y), 1), repmat(Y, numel(X),1))];
Sollte ich es doch lieber mit einer Schleife probieren oder was mache ich wieder falsch? Dankeschön
Harald
Forum-Meister
Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 14.01.2013, 11:13
Titel :
Hallo,
mein Vorschlag war so gedacht, meshgrid wegzulassen und stattdessen repmat zu verwenden. Deswegen auch die Verwendung der Variablennamen a und b.
Grüße,
Harald
Schmankerl
Themenstarter
Forum-Fortgeschrittener
Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
Verfasst am : 14.01.2013, 13:59
Titel :
Wie ich gerade ausprobiert habe, liefert mir repmat nicht das gewünschte Ergebnis.
Deshalb der Versuch per Schleife:
Code:
p=linspace ( p0,pMax,pn) ; %Vektor Druck definieren
T=linspace ( t0,tMax,tn) ; %Vektor Temperatur definieren
[ X,Y] =meshgrid ( p,T) ;
B=zeros ( size ( T,2 ) ,2 ) ;
for i=size ( X,2 ) :-1 :1 ;
A=[ X( :,i) Y( :,i) ] ;
B=vertcat ( A,B)
end
Im Prinzip erhalte ich dann mein gewünschtes Ergebnis, bis auf die Tatsache, dass als letzter Vektor durch den Befehl vertcat mein Nullvektor
B=zeros(size(T,2),2); noch angehängt wird, könnte ich diesen noch auslassen wäre alles passend.
Wie könnte ich den entfernen?
Der Zusatz
hat leider keine Auswirkung? Damit möchte ich die Zellen bzw. Einträge löschen die 0 sind.
*Edit*
Habe es jetzt so gelöst:
Aber gibt es da noch einen einfacheren Weg, vielleicht einen, der mir die 0 überhaupt nicht schreibt in:
[X,Y]=meshgrid(p,T);
B=zeros(size(T,2),2);
for i=size(X,2):-1:1;
A=[X(:,i) Y(:,i)];
B=vertcat(A,B)
end [/code]
FrankB
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am : 14.01.2013, 15:30
Titel :
Als Einzeiler nach meshgrid:
Harald
Forum-Meister
Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
Verfasst am : 14.01.2013, 21:04
Titel :
Hallo,
ich habe es anhand deines ursprünglichen Beispiels ausprobiert und komme auf das angegebene Ergebnis. Wenn das Ergebnis nun in einem anderen Fall nicht das gewünschte ist, sollte man das schon präzisieren.
Wenn du das Problem aber anderweitig gelöst bekommen hast, solls mir auch recht sein.
Grüße,
Harald
Schmankerl
Themenstarter
Forum-Fortgeschrittener
Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
Verfasst am : 15.01.2013, 00:19
Titel :
a) Könntest du mir vielleicht dann mal den funktionierenden Code hier reinschreiben, bei mir will das nicht funktionieren.
b)
Falls ich es auf meine Weise mache:
Angenommen ich habe eine Matrix
Und möchte die Zeilen löschen, die Null enthalten, sodass ich dann bekomme:
Wie löse ich das?
Habe es über
geschafft. Doch Matlab rät es mit logical indexing zu machen.
Dachte es würde so klappen:
bzw. so
leider aber nicht?
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
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.