|
|
Zeile 1: |
Zeile 1: |
- |
| |
| Mit Hilfe des Programmpakets JSXGraph (siehe http://jsxgraph.uni-bayreuth.de/wp/) können komplexe, interaktive Grafiken nur mit Hilfe von JavaScript in Webseiten integriert werden. | | Mit Hilfe des Programmpakets JSXGraph (siehe http://jsxgraph.uni-bayreuth.de/wp/) können komplexe, interaktive Grafiken nur mit Hilfe von JavaScript in Webseiten integriert werden. |
| | | |
- | Damit lassen sich auch ingenieurtechnische Fragen in "smarten" Apps realisieren. Das folgende Beispiel erlaubt die Berechnung von verbrennungstechnischen Kennwerten abhängig von Gaszusammensetzung und Luftüberschuss. | + | Damit lassen sich auch ingenieurtechnische Fragen in "smarten" Apps realisieren. |
| | | |
- | Die Gaszusammensetzung wird über Schieberegler eingestellt. Das Diagramm zeigt den Luftbedarf über das Luftverhältnis (Lambda). Lambda kann durch Verschieben des Messpunktes verändert werden. | + | Das folgende Beispiel dient der Ermittlung einer Näherungsgleichung für 5 gegebene Punkte. Die Punkte können mit der Maus verschoben werden. Mit dem Schieberegler kann der Grad des Näherungs-Polynoms verändert werden. Um das Diagramm universell einsetzen zu können, sind die Achsen normiert (-1/+1). (Näherungspolynom Polynome Interpolation Näherungsfunktion) |
- | | + | |
- | Die Gaszusammensetzung wird als Vol.% angegeben. Die Werte werden so angepasst, dass unabhängig von den Einstellungen der Schieberegler die Summe immer 100% ergibt.
| + | |
- | | + | |
- | Die voreingestellte Zusammensetzung entspricht üblichem Erdgas (trocken)
| + | |
| | | |
| <jsxgraph width="700" height="500"> | | <jsxgraph width="700" height="500"> |
- | brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-10, 100, 60, -100], unitX:5, unitY:5, grid: false, axis:true}); | + | brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-1.1, 1.1, 1.1, -1.1], grid: true, axis:true}); |
- | CO=0;
| + | //Pumpenkennlinie |
- | CH4=90;
| + | var p1 = brd.createElement('point',[0.5,0.5],{name:'A', style:5}); |
- | C2H2=0;
| + | var p2 = brd.createElement('point',[0,0],{name:'B', style:5}); |
- | C2H4=2;
| + | var p3 = brd.createElement('point',[-0.50,-0.5],{name:'C', style:5}); |
- | H2=0;
| + | var p4 = brd.createElement('point',[-0.60,-0.6],{name:'D', style:5}); |
- | N2=7;
| + | var p5 = brd.createElement('point',[-0.70,-0.7],{name:'E', style:5}); |
- | O2=0;
| + | data = []; |
- | CO2=1;
| + | datax = []; |
- | H2S=0;
| + | datax[0] = function(){ return p1.X();}; |
| + | datax[1] = function(){ return p2.X();}; |
| + | datax[2] = function(){ return p3.X();}; |
| + | datax[3] = function(){ return p4.X();}; |
| + | datax[4] = function(){ return p5.X();}; |
| + | data[0]= function(){ return p1.Y();}; |
| + | data[1]= function(){ return p2.Y();}; |
| + | data[2]= function(){ return p3.Y();}; |
| + | data[3]= function(){ return p4.Y();}; |
| + | data[4]= function(){ return p5.Y();}; |
| | | |
- | | + | s = 1; |
- | var x;
| + | deg = brd.createElement('slider',[[0.10,-0.3],[0.4,-0.3],[1,2,4]],{name:'Polynomgrad',snapWidth:1}); |
- | var y;
| + | |
- | var cov = brd.createElement('slider',[[20,-10],[40,-10],[0,CO,100]],{name:'CO', snapWidth:0.1});
| + | curve = brd.createElement('curve',[datax,data],{strokeColor:'gray',dash:2}); |
- | var c1v = brd.createElement('slider',[[20,-20],[40,-20],[0,CH4,100]],{name:'CH4',snapWidth:0.1});
| + | curve.updateDataArray = function() { |
- | var c2v = brd.createElement('slider',[[20,-30],[40,-30],[0,C2H2,100]],{name:'C2H2',snapWidth:0.1});
| + | var i, len = data.length; |
- | var c3v = brd.createElement('slider',[[20,-40],[40,-40],[0,C2H4,100]],{name:'C2H4',snapWidth:0.1});
| + | for(i=0;i<len;i++) { this.dataY[i] = data[i]; } |
- | var hv = brd.createElement('slider',[[20,-50],[40,-50],[0,H2,100]],{name:'H2', snapWidth:0.1});
| + | |
- | var nv = brd.createElement('slider',[[20,-60],[40,-60],[0,N2,100]],{name:'N2', snapWidth:0.1});
| + | |
- | var ov = brd.createElement('slider',[[20,-70],[40,-70],[0,O2,100]],{name:'O2', snapWidth:0.1});
| + | |
- | var co2v = brd.createElement('slider',[[20,-80],[40,-80],[0,CO2,100]],{name:'CO2', snapWidth:0.1});
| + | |
- | var sv = brd.createElement('slider',[[20,-90],[40,-90],[0,H2S,100]],{name:'H2S', snapWidth:0.1}); | + | |
- | | + | |
- | | + | |
- | function m0(x){
| + | |
- | return m_0 =x/(cov.Value()+c1v.Value()+c2v.Value()+c3v.Value()+hv.Value()+sv.Value()+nv.Value()+ov.Value()+co2v.Value());
| + | |
| } | | } |
| + | regressionPolynomial = JXG.Math.Numerics.regressionPolynomial(deg,datax,curve.dataY); |
| + | // generateFunction(); |
| | | |
- | function Lmin(){
| + | reg = brd.createElement('functiongraph',[regressionPolynomial],{strokeColor:'black'}); |
- | return L_min=1/0.21*((m0(cov.Value())+m0(hv.Value()))/2+2*m0(c1v.Value())+2.5*m0(c2v.Value())+3*m0(c3v.Value())-m0(ov.Value()));
| + | |
- | }
| + | |
- | | + | t = brd.createElement('text',[-0.8,-0.8,function(){ return "Polynom f(x) = " + regressionPolynomial.getTerm();}],{strokeColor:'black',fontSize:'14px'}); |
- | var Kurve= brd.createElement('functiongraph', [function(x){return Lmin()*x/10;},0,60]);
| + | |
- | | + | |
- | //Ablesepunkt
| + | |
- | var g=brd.create('glider',[1.184*10,1,Kurve],{color:'black',name:'Messpunkt'});
| + | |
- | px1=[0,function(){return g.Y();}];
| + | |
- | px2=[function(){return g.X();},function(){return g.Y();}];
| + | |
- | py1=[function(){return g.X();},0];
| + | |
- | py2=[function(){return g.X();},function(){return g.Y();}];
| + | |
- | | + | |
- | var l_x=brd.create('line',[px1,px2],{strokeColor:'blue',strokeWidth:1,dash:1});
| + | |
- | var l_Y=brd.create('line',[py1,py2],{strokeColor:'blue',strokeWidth:1,dash:1});
| + | |
- | | + | |
- | brd.createElement('text',[50, 10, function(){ return "Lambda*10";}]); | + | |
- | | + | |
- | | + | |
- | brd.createElement('text',[5, -10, function(){ return "CO = "+Math.round(m0(cov.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -20, function(){ return "CH4 = "+Math.round(m0(c1v.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -30, function(){ return "C2H2 = "+Math.round(m0(c2v.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -40, function(){ return "C2H4 = "+Math.round(m0(c3v.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -50, function(){ return "H2 = "+Math.round(m0(hv.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -60, function(){ return "N2 = "+Math.round(m0(nv.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -70, function(){ return "O2 = "+Math.round(m0(ov.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -80, function(){ return "CO2 = "+Math.round(m0(co2v.Value())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, -90, function(){ return "H2S = "+Math.round(m0(sv.Value())*1000)/1000;}]);
| + | |
- | | + | |
- | brd.createElement('text',[5, 90, function(){ return "Hu MJ/Nm³ = "+Math.round((10.78*m0(hv.Value())+12.62*m0(cov.Value())+35.87*m0(c1v.Value())+56.51*m0(c2v.Value())+59.48*m0(c3v.Value()))*1000)/1000+" = "+Math.round((10.78*m0(hv.Value())+12.62*m0(cov.Value())+35.87*m0(c1v.Value())+56.51*m0(c2v.Value())+59.48*m0(c3v.Value()))*1000/3.6)/1000+" kWh/Nm³ ";}]);
| + | |
- | brd.createElement('text',[5, 80, function(){ return "Luft min m³/m³ = "+Math.round((Lmin())*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, 70, function(){ return "Luft m³/m³ bei Lambda "+Math.round(1000*g.X()/10)/1000+"= "+Math.round((Lmin())*1000*g.X()/10)/1000;}]);
| + | |
- | brd.createElement('text',[5, 60, function(){ return "Abgas feucht m³/m³ bei Lambda "+Math.round(1000*g.X()/10)/1000+"= "+Math.round((Lmin()*g.X()/10+(m0(cov.Value())+m0(hv.Value()))/2+m0(c1v.Value())+m0(c2v.Value())+m0(c3v.Value())+m0(co2v.Value())+m0(sv.Value())-m0(ov.Value()))*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, 50, function(){ return "Sauerstoffgehalt m³/m³ bei Lambda "+Math.round(1000*g.X()/10)/1000+"= "+Math.round(Lmin()*(g.X()/10-1)*0.21*1000)/1000;}]);
| + | |
- | brd.createElement('text',[5, 40, function(){ return "Sauerstoffgehalt Vol% bei Lambda "+Math.round(1000*g.X()/10)/1000+"= "+Math.round(Lmin()*(g.X()/10-1)*0.21/((Lmin()*g.X()/10+(m0(cov.Value())+m0(hv.Value()))/2+m0(c1v.Value())+m0(c2v.Value())+m0(c3v.Value())+m0(co2v.Value())+m0(sv.Value())-m0(ov.Value())))*1000)/1000;}]);
| + | |
- | | + | |
| | | |
| + | des1 = brd.createElement('text',[-0.4,0.4,function(){ return "x = -1 bis 1";}],{strokeColor:'black',fontSize:'14px'}); |
| + | des2 = brd.createElement('text',[-0.4,0.3,function(){ return "y = -1 bis 1";}],{strokeColor:'black',fontSize:'14px'}); |
| </jsxgraph> | | </jsxgraph> |
- |
| |
- | =Quelle=
| |
- |
| |
- | Berechnung nach vereinfachten Gleichungen aus "Thermische Apparate und Dampferzeuger", Walter Wagner, Vogel-Buchverlag Würzburg, 1. Auflg. 1985
| |
- |
| |
| [[Kategorie:Technik]] | | [[Kategorie:Technik]] |
Damit lassen sich auch ingenieurtechnische Fragen in "smarten" Apps realisieren.
Das folgende Beispiel dient der Ermittlung einer Näherungsgleichung für 5 gegebene Punkte. Die Punkte können mit der Maus verschoben werden. Mit dem Schieberegler kann der Grad des Näherungs-Polynoms verändert werden. Um das Diagramm universell einsetzen zu können, sind die Achsen normiert (-1/+1). (Näherungspolynom Polynome Interpolation Näherungsfunktion)