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

Werte in Vektor paarweise mitteln

 

salas

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2011, 19:54     Titel: Werte in Vektor paarweise mitteln
  Antworten mit Zitat      
Liebe Leute,

ich hänge hier schon länger, wahrscheinlich ist es voll einfach, aber naja:

Ich bekomme von einer function als Ergebnis einen Vektor, der die Werte in der Mitte verschiedener Schichten berechnet. Ich möchte aber die Werte an den Schichträndern, und dachte mir die bekomme ich indem ich den Mittelpunkt zwischen den Werten ausrechne.

Ich möchte also, dass immer von 2 werten dieses Vektors der Mittelwert gebildet wird, also der neue Vektor soll so aussehen:

Wert 2 von A_neu=((Alter_Wert1+alter_Wert2)/2)
Wert 3 von A_neu=((Alter_Wert2+alter_Wert3)/2)
Wert 4 von A_neu=((Alter_Wert3+alter_Wert4)/2)
.....

Nun verliere ich ja einen Wert, nämlich Wert 1, da ich mittle - und da habe ich mir folgendes überlegt: ich weiß wie weit die einzelnen Werte auseinander liegen, also kann ich den Gradient g zwischen Alter_Wert1 und Alter_Wert 2 ermitteln (also die zu- bzw. Abnahme mit der Höhe) und sage dann einfach:

Wert 1 von A_neu= (Wert 2 von A_neu)+g*halbe_Höhe

So, nur wie sage ich das Matlab? Ich bin für jede Hilfe dankbar!! Lg salas


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.09.2011, 20:13     Titel:
  Antworten mit Zitat      
Schau mal auf

http://www.gomatlab.de/viewtopic.php?t=2502

dort gibt es Einsteigertutorials. Deine Frage "wie sage ich das MATLAB" ist sehr allgemein gehalten, sofern du keine Programmierkenntnisse hast. Du benötigst für dein Vorhaben allerdings nicht viel mehr als eine for-Schleife.
Private Nachricht senden Benutzer-Profile anzeigen
 
salas

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2011, 21:03     Titel:
  Antworten mit Zitat      
Eine for-Schleife? Hm, also ich habe es erst so versucht:

Code:

n=1:79

g=A_alt(2)-A_alt(1)

A_neu(1)=A_alt(1)-g*(Hoehe/2)
A_neu(2:80)=((A_alt(n)-A_alt(n+1))/2)
 


Aber anscheinend mache ich hier etwas falsch, denn ohne diese "Berichtigung" meiner Werte funktioniert alles tadellos, und dann plötzlich findet matlab in allen functions Fehler...

Habe ich einen eingebaut? Irgendeine Konvention nicht eingehalten?
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 11.09.2011, 06:45     Titel:
  Antworten mit Zitat      
Was für ein Fehler kommt denn? Ein Fehler taucht immer nur 1x auf, denn dann wird der Code gestoppt (also nicht in "allen functions").
Private Nachricht senden Benutzer-Profile anzeigen
 
salas

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2011, 12:02     Titel:
  Antworten mit Zitat      
Ok, also das ist mein Hauptprogramm das verschiedene function aufruft, die verschiedene Dinge berechnen sollen:

Code:

global g Schichtdicke c_p Zeit Gamma gamma H Zellmittelpunkte Hoehe T_0 p_0 R Anzahl_Schichten R

%@comment Ich definiere weitere Variablen die ich im Laufe des Programms brauchen werde
H=8000;
Schichtdicke = 100;
g = 9.81;
c_p = 1005;
Zeit = 3600:3600:86400;
Waermefluss_nachts = 30;
Zellmittelpunkte=Schichtdicke/2:Schichtdicke:H;
Zellmittelpunkte=Zellmittelpunkte'
Abstand_Zellmittelpunkte=Schichtdicke/2:Schichtdicke:H;
Gamma=-0.0098;
gamma=-0.0065;

Anzahl_Schichten = H/Schichtdicke;
Hoehe = [0:Schichtdicke:H];
T_0=288;
p_0=101325;
R=287;



%@comment Ich lasse mir den Tagesgang fuer den Waermestrom berechnen
Waermestrom = Tagesgang_Waermestrom(Waermefluss_nachts);

%@comment Temperaturprofil fuer eine Standartatmosphaere
T_standart=T_0+gamma.*Hoehe;
T = T_0 + gamma*Zellmittelpunkte;

%@comment Hier beginne ich meine "große" Schleife: In jeden Durchlauf wird
%das entsprechende Element für den Waermestrom zu dieser Stunde und die
%Zeit gewaehlt, und alle anderen Parameter damit neu berechnet. Beim ersten
%Durchlauf ist die Temperatur noch gleich dem Profil fuer die
%Standartatmosphaere, da wir noch kein dT haben, aber ab dem 2ten Durchlauf
%wird vom "aktuellen" Temperaturprofil ausgegangen.
for w=1:24
   
   
    %@comment Ich berechne die Druecke an den Schichtgrenzen
    p = Druck_Barometrische_HF(T_standart)
   
    %@comment Ich berechne die Temperaturaenderung
    dT=Temperaturaenderung_berechnen(Waermestrom,Zeit,p,w)
   
    %@comment Nun berechne ich die Masse
    Masse=Masse_berechnen(p);
   
    %@comment Ich ueberpruefe auf eventuell vorhandene Ueberadiabasien und
    %lasse diese gegebenenfalls abbauen
    [dT_Zelle_ausgeglichen] = Temperaturausgleich_vertikal(1,dT,Masse,Zellmittelpunkte)
   
    %@comment Neues Temperatur-Profil nach jedem Durchlauf, mit dem jeder Durchlauf wieder starten soll
   
    T_Profil=T+dT_Zelle_ausgeglichen;
   
   %@comment Ich bekomme die Werte in der Mitte der Schichten als Ergebnis, brauche für die Druckberechnung  aber die Werte an den Schichträndern, und
   %die bekomme ich indem ich den Mittelpunkt zwischen den Werten ausrechne. Nun verliere ich ja einen Wert, nämlich den Bodenwert, da ich mittle -
   %und da habe ich mir folgendes überlegt: ich weiß wie weit die einzelnen Werte auseinander liegen, also kann ich den Gradient gamma_neu zwischen der
   %Obergrenze der untersten Schicht und ihrem Mittelwert ermitteln (also die zu- bzw. Abnahme mit der Höhe) und so durch Multiplikation mit der halben
   %Schichthöhe quasi zurückrechnen:

   q=1:(Anzahl_Schichten-1);

   T_standart(2:Anzahl_Schichten)=((T_Profil(q)-T_Profil(q+1))/2);

   gamma_unten=T_standart(2)-T_Profil(1)/(Schichtdicke/2);

    %@comment Ich benenne diesen neuen Vektor wieder T_standart, damit der
    %oben definierte gleichnamige Vektor mit diesem überschrieben wird
   T_standart(1)=T_Profil(1)-gamma_unten*(Schichtdicke/2);


   figure
    plot(T_standart,Hoehe,'b')
    hold on
    plot(T_Profil,Zellmittelpunkte,'r')
    hold on
   
end
 


Jetzt ist das Problem das: ich bekomme halbwegs das raus was ich erwarte(bis auf falsche Werte halt) aber sobald ich dieses Stück hinzufüge

Code:

q=1:(Anzahl_Schichten-1);

   T_standart(2:Anzahl_Schichten)=((T_Profil(q)-T_Profil(q+1))/2);

   gamma_unten=T_standart(2)-T_Profil(1)/(Schichtdicke/2);

    %@comment Ich benenne diesen neuen Vektor wieder T_standart, damit der
    %oben definierte gleichnamige Vektor mit diesem überschrieben wird
   T_standart(1)=T_Profil(1)-gamma_unten*(Schichtdicke/2);
 


wird mein Vektor mit den Zellmittelpunkten plötzlich eine 1x0 Matrix, damit wird auch alles andere falsch. Warum? Sieht jemand den Fehler? Ich wollte dass unten der Vektor T_standar imer neu berechnet wird, und eben immer neu überschrieben! Ich glaube das funktioniert nicht, weiß jemand wieso?

Und noch etwas: Wie schaffe ich es dass ich nicht 24 figures bekomme, sondern alle in einem plott landen? Ich habe gelesen das funktioniert wenn ich vor dem end der Schleife hold on schreibe..? Und wie mache ich es, dass jede neu eingetragene Linie eine andere Farbe bekommt?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2011, 21:59     Titel:
  Antworten mit Zitat      
Hallo salas,

Die Frage ist nicht klar.
Wo fügst Du den zusätzlichen Code denn ein?
Er verändert die Variable "Zellmittelpunkte" gar nicht, wieso nimmst du also an, dass die Auswirkungen daher kommen? Immerhin ist "Zellmittelpunkte" eine globale Variable und könnte von überall her geändert werden!

Das "%@comment" mach den Code ziemlich unübersichtlich.

Zitat:
Wie schaffe ich es dass ich nicht 24 figures bekomme, sondern alle in einem plott landen? Ich habe gelesen das funktioniert wenn ich vor dem end der Schleife hold on schreibe..? Und wie mache ich es, dass jede neu eingetragene Linie eine andere Farbe bekommt?

Neue Frage, neuer Thread. Siehe: "hold all".

Gruß, Jan
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.