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

Matlab erkennt Werte nicht

 

philonfire
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 30.03.12
Wohnort: Weimar
Version: ---
     Beitrag Verfasst am: 02.05.2012, 10:47     Titel: Matlab erkennt Werte nicht
  Antworten mit Zitat      
Hallo liebes Forum,

wieder einmal benötige ich Eure Hilfe.

Ich habe ein cell Array "new_sort" in dem alle Elemente eines Querschnitts abgespeichert sind. new_sort{querschnittsnummer}{elementnummer}.

Nun soll Matlab die Koordinaten der Elemente mit einer Matrix vergleichen, in der der Temperaturverlauf mit den dazugehörigen Koordinaten steht. Wenn es Übereinstimmungen bei den z_koordinaten gibt, soll Matlab die Temperaturwerte als 4.Spalte im Cell Array new_sort{querschnittsnummer}{elementnummer} anfügen. Komischerweise funktioniert das alles bis zu 5 Elementen. Sobald ich aber 6 Elemente habe, werden die letzten 2 Werte nicht in der Matrix mit den Temperaturwerten gefunden.

Hier der Code:

Code:

%new_sort{querschnittsnummer}{Elementnummer}
%1. Spalte z_werte, 2. Spalte y_werte, 3. Spalte Fläche des Elements, 4. Spalte Temperatur.
new_sort{1}{6}=

   1.0e+03 *

   -0.0367   -0.5875    1.3975    0.0290
   -0.0367   -0.2650    1.3975    0.0290
   -0.0324   -0.2650    1.3975         0
   -0.0324   -0.5875    1.3975         0



%Temperaturematrix
%1. Spalte Knotennummer, 2. Spalte z_werte, 3. Spalte y_werte, 4. Spalte Temperatur.
Temp_const =

    1.0000  -58.3661 -587.5000   29.0000
    2.0000  -58.3661 -265.0000   29.0000
    3.0000  -58.3661 -223.0000   29.0000
    4.0000  -58.3661  223.0000   29.0000
    5.0000  -58.3661  265.0000   29.0000
    6.0000  -58.3661  587.5000   29.0000
    7.0000  -54.0327 -587.5000   29.0000
    8.0000  -54.0327 -265.0000   29.0000
    9.0000  -54.0327 -223.0000   29.0000
   10.0000  -54.0327  223.0000   29.0000
   11.0000  -54.0327  265.0000   29.0000
   12.0000  -54.0327  587.5000   29.0000
   13.0000  -49.6994 -587.5000   29.0000
   14.0000  -49.6994 -265.0000   29.0000
   15.0000  -49.6994 -223.0000   29.0000
   16.0000  -49.6994  223.0000   29.0000
   17.0000  -49.6994  265.0000   29.0000
   18.0000  -49.6994  587.5000   29.0000
   19.0000  -45.3661 -587.5000   29.0000
   20.0000  -45.3661 -265.0000   29.0000
   21.0000  -45.3661 -223.0000   29.0000
   22.0000  -45.3661  223.0000   29.0000
   23.0000  -45.3661  265.0000   29.0000
   24.0000  -45.3661  587.5000   29.0000
   25.0000  -41.0327 -587.5000   29.0000
   26.0000  -41.0327 -265.0000   29.0000
   27.0000  -41.0327 -223.0000   29.0000
   28.0000  -41.0327  223.0000   29.0000
   29.0000  -41.0327  265.0000   29.0000
   30.0000  -41.0327  587.5000   29.0000
   31.0000  -36.6994 -587.5000   29.0000
   32.0000  -36.6994 -265.0000   29.0000
   33.0000  -36.6994 -223.0000   29.0000
   34.0000  -36.6994  223.0000   29.0000
   35.0000  -36.6994  265.0000   29.0000
   36.0000  -36.6994  587.5000   29.0000
   37.0000  -32.3661 -587.5000   29.0000
   38.0000  -32.3661 -537.5000   29.0000
   39.0000  -32.3661 -265.0000   29.0000
   40.0000  -32.3661 -223.0000   29.0000
   41.0000  -32.3661  223.0000   29.0000
   42.0000  -32.3661  265.0000   29.0000
   43.0000  -32.3661  537.5000   29.0000
   44.0000  -32.3661  587.5000   29.0000
   45.0000  -21.6994 -587.5000   29.0000
   46.0000  -21.6994 -537.5000   29.0000
   47.0000  -21.6994  537.5000   29.0000
   48.0000  -21.6994  587.5000   29.0000
   49.0000  -11.0327 -587.5000   29.0000
   50.0000  -11.0327 -537.5000   29.0000
   51.0000  -11.0327  537.5000   29.0000
   52.0000  -11.0327  587.5000   29.0000
   53.0000   -9.3661 -265.0000   29.0000
   54.0000   -9.3661 -223.0000   29.0000
   55.0000   -9.3661  223.0000   29.0000
   56.0000   -9.3661  265.0000   29.0000
   57.0000   -0.3661 -587.5000   29.0000
   58.0000   -0.3661 -537.5000   29.0000
   59.0000   -0.3661  537.5000   29.0000
   60.0000   -0.3661  587.5000   29.0000
   61.0000   10.3006 -587.5000   29.0000
   62.0000   10.3006 -537.5000   29.0000
   63.0000   10.3006  537.5000   29.0000
   64.0000   10.3006  587.5000   29.0000
   65.0000   13.6339 -265.0000   29.0000
   66.0000   13.6339 -223.0000   29.0000
   67.0000   13.6339  223.0000   29.0000
   68.0000   13.6339  265.0000   29.0000
   69.0000   20.9673 -587.5000   29.0000
   70.0000   20.9673 -537.5000   29.0000
   71.0000   20.9673  537.5000   29.0000
   72.0000   20.9673  587.5000   29.0000
   73.0000   31.6339 -587.5000   29.0000
   74.0000   31.6339 -537.5000   29.0000
   75.0000   31.6339  537.5000   29.0000
   76.0000   31.6339  587.5000   29.0000
   77.0000   36.6339 -265.0000   29.0000
   78.0000   36.6339 -223.0000   29.0000
   79.0000   36.6339  223.0000   29.0000
   80.0000   36.6339  265.0000   29.0000
   81.0000   59.6339 -265.0000   29.0000
   82.0000   59.6339 -223.0000   29.0000
   83.0000   59.6339  223.0000   29.0000
   84.0000   59.6339  265.0000   29.0000
   85.0000   82.6339 -265.0000   29.0000
   86.0000   82.6339 -223.0000   29.0000
   87.0000   82.6339  223.0000   29.0000
   88.0000   82.6339  265.0000   29.0000
   89.0000  105.6339 -265.0000   29.0000
   90.0000  105.6339 -223.0000   29.0000
   91.0000  105.6339  223.0000   29.0000
   92.0000  105.6339  265.0000   29.0000
   93.0000  108.3006 -265.0000   29.0000
   94.0000  108.3006  265.0000   29.0000
   95.0000  110.9673 -265.0000   29.0000
   96.0000  110.9673  265.0000   29.0000
   97.0000  113.6339 -265.0000   29.0000
   98.0000  113.6339  265.0000   29.0000
   99.0000  116.3006 -265.0000   29.0000
  100.0000  116.3006  265.0000   29.0000
  101.0000  118.9673 -265.0000   29.0000
  102.0000  118.9673  265.0000   29.0000
  103.0000  121.6339 -265.0000   29.0000
  104.0000  121.6339  265.0000   29.0000
 


Der Wert -0.0324 existiert aber in meiner Temperaturmatrix. Hat Matlab da irgendwas gerundet oder weis jemand wo der Fehler liegt?

Danke!

Phil
Private Nachricht senden Benutzer-Profile anzeigen


tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2012, 11:03     Titel:
  Antworten mit Zitat      
Hi,
ja, das kann am runden liegen:

schau dir z.B. mal folgendes an:

Code:

a=a=[0.99999999 1.000000000000]
a =

    1.0000    1.0000
 

Wenn du die beiden nun aber auf Gleichheit überprüfst, sind sie natürlich nicht gleich, obwohl es in der Konsole so aussehen mag:

Code:

a(1)==a(2)

ans =

     0
 


Besser ist es auf eine Gleichheit in einem bestimmten Toleranzbereich zu überprüfen:
Code:

abs(a(1)-a(2))<1E-6

ans =

     1
 


Da der Fehler bei dir aber erst ab einer bestimmten Anzahl von Elementen auftritt, kann es auch durchaus sein, dass da noch etwas anderes nicht funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 02.05.2012, 11:05     Titel:
  Antworten mit Zitat      
Wie kommst du auf -0.0324? Der Wert steht doch in der ersten Spalte und: "1. Spalte z_werte". Und genau die -32.3661 stehen auch da... Matlab rundet halt in der Anzeige - Was ist denn jetzt dein Problem? 1.0e+03 ?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
philonfire
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 30.03.12
Wohnort: Weimar
Version: ---
     Beitrag Verfasst am: 02.05.2012, 11:09     Titel:
  Antworten mit Zitat      
Hallo Andy,

mein Problem ist, dass die Temperature bei dieser Z-koordinate nicht übernommen wird. Matlab findet den Wert nicht und schreibt in die 4. Spalte des Arrays new_sort{qs}{e}(:,4) anstatt der Temperature 29 eben 0.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2012, 11:33     Titel:
  Antworten mit Zitat      
Poste doch den Code mit dem du new_sort erzeugst.
So tappt man etwas im Dunkeln
Private Nachricht senden Benutzer-Profile anzeigen
 
philonfire
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 30.03.12
Wohnort: Weimar
Version: ---
     Beitrag Verfasst am: 02.05.2012, 11:37     Titel:
  Antworten mit Zitat      
new_sort enthält alle Koordinaten der einzel Elemente der Querschnittsteile. Die stimmen auch überein und jetzt soll wiegesagt nur noch die passende Temperatur in die 4. Spalte geschrieben werden.

Hier der Code:

Code:


for qs=1:Anzahl_Querschnitte
for e=1:Anzahl_Elemente

for z=1:size_Temp_const(1)
    for i=1:4
   
if new_sort{qs}{e}(i,1)==Temp_const(z,2)

    new_sort{qs}{e}(i,4)=Temp_const(z,4);
   
       
    end
   
end
end

end
end


 


Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 02.05.2012, 11:48     Titel:
  Antworten mit Zitat      
und wo wirfst du Werte in new_sort{qs}{e}(i,1)?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
philonfire
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 30.03.12
Wohnort: Weimar
Version: ---
     Beitrag Verfasst am: 02.05.2012, 12:47     Titel: Ausführlicher Code
  Antworten mit Zitat      
Ich gebe in meinem Programm einen Querschnitt ein. Dieses Querschnitt kann ich beliebig in y und z Richtung teilen. Ich erstelle quasi eine Art Netz.

Nach der Vernetzung habe ich eine Matrix "All_Nodes". Diese Matrix enthält alle Koordinaten der Knotenpunkte des Netzes. In der Matrix QS_Nodes{1} werden alle Koordinaten abgespeichert, die sich im Bereich von Querschnitt 1 befinden.

Code:

QS_Nodes{1} =

    1.0000  -58.3661 -587.5000
    2.0000  -58.3661 -265.0000
    7.0000  -53.1661 -587.5000
    8.0000  -53.1661 -265.0000
   13.0000  -47.9661 -587.5000
   14.0000  -47.9661 -265.0000
   19.0000  -42.7661 -587.5000
   20.0000  -42.7661 -265.0000
   25.0000  -37.5661 -587.5000
   26.0000  -37.5661 -265.0000
   31.0000  -32.3661 -587.5000
   32.0000  -32.3661 -537.5000
   33.0000  -32.3661 -265.0000
 


Das Array Section_Elements bestimmt speichert nun alle Koordinaten ab, die zu den jeweiligen Elementen gehören.

Code:

for qs=1:Anzahl_Querschnitte
for e=1:Anzahl_Elemente

    Section_Elements{qs}{e}=[z_coordinates{qs}{e} y_coordinates{qs}{e}];
     
    if min(Section_Elements{qs}{e}(:,1))>=0
       
        z=(abs(min(Section_Elements{qs}{e}(:,1))) - (max(Section_Elements{qs}{e}(:,1))));
    else
        z=(abs(min(Section_Elements{qs}{e}(:,1))) + (max(Section_Elements{qs}{e}(:,1))));
    end
    if min(Section_Elements{qs}{e}(:,2))>=0
       
        y=(abs(min(Section_Elements{qs}{e}(:,2))) - (max(Section_Elements{qs}{e}(:,2))));
    else    
        y=(abs(min(Section_Elements{qs}{e}(:,2))) + (max(Section_Elements{qs}{e}(:,2))));

    end
   
    Section_Elements{qs}{e}(:,3)=z*y;
   
    if Section_Elements{qs}{e}(:,3)<0
       
        Section_Elements{qs}{e}(:,3)=Section_Elements{qs}{e}(:,3)*-1;
    end

end
end
 


Section_Elements{1}{1} gibt mir die Koordinaten des 1. Elementes im Bereich des 1. Querschnittteils aus.

Code:

%3. Spalte ist die Fläche des Elements.
Section_Elements{1}{1}=

   1.0e+03 *

   -0.0584   -0.5875    1.6770
   -0.0584   -0.2650    1.6770
   -0.0532   -0.5875    1.6770
   -0.0532   -0.2650    1.6770

 


Da für die grafische Ausgabe Koordinaten in Form eines Polygonzug benötigt werden, werden diese im Array "new_sort" sortiert.

Code:


for qs=1:Anzahl_Querschnitte

    for e=1:Anzahl_Elemente
       
new_sort{qs}{e}=Section_Elements{qs}{e};
new_sort{qs}{e}(3,1)=Section_Elements{qs}{e}(4,1);
new_sort{qs}{e}(3,2)=Section_Elements{qs}{e}(4,2);
new_sort{qs}{e}(4,1)=Section_Elements{qs}{e}(3,1);
new_sort{qs}{e}(4,2)=Section_Elements{qs}{e}(3,2);

    end

end

new_sort{1}{1}=

   1.0e+03 *

   -0.0584   -0.5875    1.6770
   -0.0584   -0.2650    1.6770
   -0.0532   -0.2650    1.6770
   -0.0532   -0.5875    1.6770

 


Im letzten Schritt werden nun die z_werte (1. Spalte von new_sort)mit den z_werten der Temperaturmatrix verglichen (2. Spalte) und die dort vorherrschende Temperatur (Temp_const 4. Spalte) als 4. Spalte in new_sort abgespeichert.

Code:


size_Temp_const=size(Temp_const);


%Füge Temperature, erstmal nur Nonlinear als 4. Spalte an


for qs=1:Anzahl_Querschnitte
for e=1:Anzahl_Elemente

for z=1:size_Temp_const(1)
    for i=1:4
   
if new_sort{qs}{e}(i,1)==Temp_const(z,2)

    new_sort{qs}{e}(i,4)=Temp_const(z,4);
   
       
    end
   
end
end

end
end
 


Es funktioniert bis 5 Elemente echt super:

Ausgabe für 5 Elemente:

Code:


new_sort{1}{5}=

   1.0e+03 *

   -0.0376   -0.5875    1.6770    0.0290
   -0.0376   -0.2650    1.6770    0.0290
   -0.0324   -0.2650    1.6770    0.0290
   -0.0324   -0.5875    1.6770    0.0290
 


Aber für 6 Elemente findet er die letzten zwei Werte nicht mehr:


Code:


new_sort{1}{6}=

   1.0e+03 *

   -0.0367   -0.5875    1.3975    0.0290
   -0.0367   -0.2650    1.3975    0.0290
   -0.0324   -0.2650    1.3975         0
   -0.0324   -0.5875    1.3975         0
 


Danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 02.05.2012, 13:12     Titel:
  Antworten mit Zitat      
wie sieht im letzten Fall selection_elements aus?

So wie ich das sehe ist Spalte 1=x, Spalte 2=y, Spalte 3=Abstand(x,y) und Spalte 4=Temperatur.
Warum tauschst du nochmal Zeilen?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
philonfire
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 30.03.12
Wohnort: Weimar
Version: ---
     Beitrag Verfasst am: 02.05.2012, 21:06     Titel:
  Antworten mit Zitat      
new_sort{qs}{e} entspricht quasi selections_elements{qs}{e}. Nur, dass in selections_elements{qs}{e} die Knotenkoodinaten zeilenweise abgespeichert sind und in new_sort{qs}{e} die Knotenkoordinaten ringförmig abgespeichert.

Probiert man im Matlab eine grafische Ausgabe mit zeilenweise angeordneten Koordinaten, so versucht Matlab diese in Form eines Polygonzuges zuverbinden. Das Ergebnis sieht dann nicht sehr schön aus.

Ich hab mir jetzt noch eine Möglichkeit einfallen lassen. Wenn ich aus der Temperaturmatrix, die ja alle Knotenkoordinaten mit Knotennummer enthält, die Knoten den Querschnittsteilen zuordne, könnte ich einfach die Knotennummer mit abspeichern und dann die Temperature werte über die Knotennummern herraus suchen.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
philonfire
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 30.03.12
Wohnort: Weimar
Version: ---
     Beitrag Verfasst am: 03.05.2012, 09:05     Titel: Lösung
  Antworten mit Zitat      
Danke für Mühe!

Ich denke, ich habe jetzt eine passende Lösung gefunden.

Anstatt der Abfrage:

Code:

if new_sort{qs}{e}(i,1)==Temp_const(z,2)

    new_sort{qs}{e}(i,4)=Temp_const(z,4);
   
       
    end
 


nehme ich jetzt diese Abfrage:

Code:


if abs(new_sort{qs}{e}(i,1)/Temp_nonlinear(z,2)-1)<=0.0001

    new_sort{qs}{e}(i,3)=Temp_nonlinear(z,4);
end

 


Es ist eigentlich nicht ganz so schön gelöst, aber es funktioniert.

Also, danke nochmal für Eure Mühe.

Phil
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.