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

Aus Meshgrid Wertepaare kombinieren

 

Schmankerl
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2013, 18:09     Titel: Aus Meshgrid Wertepaare kombinieren
  Antworten mit Zitat      
Hallo,

leider komme ich nicht drauf, wie ich die Wertekombinationen einer Meshgrid in eine neue Matrix schreibe:

Beispiel:

Vektor a=\begin{pmatrix} 1 \\ 2 \\ 3 \end{pmatrix} und Vektor b=\begin{pmatrix} 0.1\\ 0.2\\ 0.3 \end{pmatrix} sind gegeben, Ziel ist es eine Matrix daraus zu erstellen die wiefolgt aussieht:

A=\begin{pmatrix} 0.1 & 1  \\ 0.1 & 2 \\ 0.1 & 3 \\ 0.2 & 1\\ 0.2 & 2\\ 0.2 & 3\\ 0.3 & 1\\ 0.3 & 2\\ 0.3 & 3 \end{pmatrix}

Das ganze soll möglichst ohne Verwendung der Schleifenfunktion mittels Meshgrid funktionieren:

Code:


Nur dann weiß ich leider nicht weiter wie ich die Matrix A auf möglichst einfache Weise erhalte.

Hätte mir jemand einen Tipp?
Private Nachricht senden Benutzer-Profile anzeigen


Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 14:45     Titel:
  Antworten mit Zitat      
Könnte mir bitte noch jemand helfen? Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 15:27     Titel:
  Antworten mit Zitat      
was steht denn in X und Y drin?
Welche Größe haben die beiden Matrizen?
Welche Größe hat die Ziel-Matrix A?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.01.2013, 16:26     Titel:
  Antworten mit Zitat      
Hallo,

ich würde repmat verwenden.

Code:
A = [reshape(repmat(b', numel(a), 1), [], 1), repmat(a, numel(b), 1)];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 11:04     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2013, 11:13     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 13:59     Titel:
  Antworten mit Zitat      
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
Code:
for j=1:size(B,2)
for k=1:size(B,2)
    if B(k,j)==0
        B(k,j)=[];
    end
end
end


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:
Code:
B(find(B(:,1) == 0),:) = [];  


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]
Private Nachricht senden Benutzer-Profile anzeigen
 
FrankB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 15:30     Titel:
  Antworten mit Zitat      
Als Einzeiler nach meshgrid:

Code:

p=linspace(p0,pMax,pn);                          %Vektor Druck definieren
T=linspace(t0,tMax,tn);                             %Vektor Temperatur definieren

[X,Y]=meshgrid(p,T);

A=[X(:), Y(:)];
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2013, 21:04     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2013, 00:19     Titel:
  Antworten mit Zitat      
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 A=\begin{pmatrix} 1 & 1 \\ 0 & 0  \\ 3 & 3    \end{pmatrix}

Und möchte die Zeilen löschen, die Null enthalten, sodass ich dann bekomme:
A=\begin{pmatrix} 1 & 1   \\ 3 & 3    \end{pmatrix}

Wie löse ich das?
Habe es über

Code:
A(find(A(:,1) == 0),:) = [];
geschafft. Doch Matlab rät es mit logical indexing zu machen.

Dachte es würde so klappen:

Code:
A(A(:,:)==0)=[];


bzw. so
Code:
A(A(:,1)==0)=[];


leider aber nicht?
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.