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

Brennverlauf nach Vibe

 

detect
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2013, 17:14     Titel: Brennverlauf nach Vibe
  Antworten mit Zitat      
Guten Tag,

ich wollte eine Funktion programmieren (und habe das auch "geschafft"), habe nun aber ein Problem bei dem ich nicht weiter weiß.
Es geht um folgende Funktion:

Code:

dQB = (QB/phi_BD)*a*(m+1).*(y.^m).*(exp(-a*y.^(m+1)))
 

wobei
Code:
y = (phi-phi_BB)/phi_BD;

und folgende konstanten
Code:

phi_BB = 170*pi/180;             %170°KW Brennbeginn
phi_BD = 50*pi/180;              %50°KW Brenndauer
a = 6.908;                             %Konstante
m = 2.5;
%°KW bedeutet ° Kurbelwinkel .. es geht um die Position einer Antriebswelle
 


Der Term pi/180 ist nur für die Umrechnung in RAD notwendig.

Das problem ist nun, dass sich diese Funktion nur richtig darstellen lässt, wenn
Code:
phi = 170:0.1:360
ist.
Allerdings brauche ich die Werte für dQB von
Code:
phi = 0:0.1:360
.
Warscheinlich ist die Lösung hierfür sehr einfach, ich bin leider noch nicht sehr sicher was Matlab bzw. Programmierung im allgemeinen angeht.

Vielleicht könnt ihr ja helfen,

beste Grüße.

EDIT:
Quasi, für
Code:
phi = 0:0.1:phi_BB
soll dQB = 0 sein.
Das gleiche gilt dann für
Code:
phi = (phi_BB+phi_BD):0.1:360
.
Dazwischen gilt die o.g. Funktion.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 01.10.2013, 17:54     Titel:
  Antworten mit Zitat      
es ist immer einfacher wenn der code gleich so gepostet wird das er lauffäig ist und nicht nur auzüge. ich weis zb nicht was QB ist. ich weis auch nicht warum du von phi in grad dann den angangswinkel in rad abzihst. 2 unterschiedliche einheiten. wie hättest du denn gerne die anzeige der imaginären anteile ? y wird ja bei dir negativ. und y^2.5 ist dann imaginär.
edit:
ok jetzt hast du noch was dazu editiert.
dann berechne doch deine werte nur für für den von dir genannten bereich. oder ergänze deine formel mit logischen operationen. das ist aber umständlicher.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
detect
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2013, 18:16     Titel:
  Antworten mit Zitat      
Code:
phi_BB = 170;                   %10° v. OT Brennbeginn
phi_BD = 50;                    %50° Brenndauer

a = 6.908;                      %Konstante
m = 2.5;                        %Formfaktor

mb = 0.0015*10^-3;              %Massenstrom Brennstoff
Hu = 47500;                     %unterer Heizwert [kJ/kg]
QB = mb * Hu;                   %gesamte freigesetzte Wärmemenge


phi = 170:0.1:360;
%phi = phi*pi/180;               %Umrechnung RAD, weil RAD ist SI-Einheit

y = (phi-phi_BB)/phi_BD;

dQB = (QB/phi_BD)*a*(m+1).*(y.^m).*(exp(-a*y.^(m+1)))       %.^ und .* für Operationen mit Arrays bzw. Matritzen
   
plot(phi,dQB);


Alles klar, dann hier mal der ganze Code!
Die Umrechnung in RAD ist hier natürlich nicht notwendig! Das ist lediglich ein Rudiment aus einer anderen Funktion, in der ich Winkelfunktionen benutzt habe. Das kann also raus, danke! Der eingestellte Code ist entsprechend geändert. Die x-Achse soll dementsprechend auch nicht in RAD dargestellt werden, sondern in °KW.

QB ist die Brennstoffenergie .. mb (Massenstrom Brennstoff) * Hu (unterer Heizwert) ergibt eben diese durch den Brennstoff freigesetzte Energie.

Führt man den Code nun so aus, existieren für phi = 0:170 keine Funktionswerte, ebenso wie für phi = (170+50):360.
Will man statt
Code:
phi = 170:0.1:360;
einfach
Code:
phi = 0:0.1:360;
schreiben, kommt halt nur unsinn raus.

EDIT:
Meinst du mit logischen Operationen if-Anweisungen usw.?
Das habe ich schon probiert und bin leider gescheitert, was bestimmt auch damit zusammenhängt, dass ich die Syntax nicht sehr gut beherrsche.

Des Weiteren habe ich versucht bei
Code:
y = (phi-phi_BB)/phi_BD;
den Betrag von phi-phi_BB zu bilden, was auch nur von mittelmäßigem Erfolg gekrönt war.

EDIT2:
Nochmal zu den if-Anweisungen:
Code:

phi = 0:0.1:360;

if phi < phi_BB
    QB = 0;
elseif phi > (phi_BB+phi_BD)
    QB = 0;
else
    y = (phi-phi_BB)/phi_BD;

    dQB = (QB/phi_BD)*a*(m+1).*(y.^m).*(exp(-a*y.^(m+1)));       %.^ und .* für Operationen mit Arrays bzw. Matritzen
end;    
plot(phi,dQB);

Das funktioniert nicht, aber meine Idee war für 0:170 bzw. (170+50):360 den Wert QB = 0 werden zu lassen, damit der Funktionswert dQB = 0 wird.
Wie kann man das richtig ausführen?

Gruß.
Private Nachricht senden Benutzer-Profile anzeigen
 
detect
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.10.2013, 16:12     Titel:
  Antworten mit Zitat      
kann mir wirklich niemand bei diesem problem helfen?
dürfte doch nicht so schwer sein .. ich denke ich habe mich höchstens schlecht ausgedrückt, oder?

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
detect
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 15:38     Titel:
  Antworten mit Zitat      
Hallo nochmal,

ich versuche mich nochmal anders auszudrücken .. vielleicht weiß dann ja jemand bescheid.

Die Funktion dQB, die erstmal sehr kompliziert aussieht, funktioniert nur ab phi_BB so wie sie auch funktionieren soll.
Code:
phi = phi_BB:720

Sprich von 170 bis 720 °Kurbelwinkel funktioniert die Funktion (hier kann für 720 auch ein anderer beliebiger Wert eingetragen werden, solange dieser größer ist als phi_BB+phi_BD).
Jetzt soll den Elementen in dQB für den Bereich von 0 bis 170°KW nur noch der Wert 0 zugewiesen werden.

So in der Art:
Code:
phi = 0:720;

if phi < 170
    dQB = 0;
else
    y = (phi-phi_BB)/phi_BD;
    dQB = (QB/phi_BD)*a*(m+1).*(y.^m).*(exp(-a*y.^(m+1)));
end;

plot(phi, dQB)
 


Mir ist klar, dass das so nicht funktioniert und vollkommen falsch ist!
Aber ich weiß sonst nicht anders mein Problem zu beschreiben.
Das Array von dQB soll genauso viele Elemente haben wie das Array von phi.
Irgendwie muss man doch im Bereich von 0:170 den Elementen den Wert 0 zuweisen können, oder?

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
detect
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 19:18     Titel:
  Antworten mit Zitat      
Aus einem anderen Forum kamen nun 2 Lösungsvorschläge, der Vollständigkeit halber wollte ich diese hier nochmal posten.

1. Lösung: y = max(0,y)

2. Lösung: y = 0.5 * (y + abs(y))

Die 2. Lösung ist völlig einleuchtend und es funktioniert genau wie ich das brauche.
Die 1. Lösung verstehe ich leider noch nicht ganz.

Naja, schönen Abend noch.

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