Software: FEM - Tutorial - Magnetfeld - Kennfeld-Export als Modelica-Code: Unterschied zwischen den Versionen
Aus OptiYummy
Zur Navigation springenZur Suche springen
KKeine Bearbeitungszusammenfassung |
|||
(13 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Software:_FEM_-_Tutorial_-_Magnetfeld|↑]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|→]] </div> | [[Software:_FEM_-_Tutorial_-_Magnetfeld|↑]] <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|→]] </div> | ||
<div align="center">''' Kennfeld-Export als Modelica-Code '''</div> | <div align="center">''' Kennfeld-Export als Modelica-Code '''</div> | ||
<div align="center">''''' (Kein Bestandteil der Lehrveranstaltung [http://www.ifte.de/lehre/fem/index.html FEM] ) '''''</div> | |||
Nachdem gezeigt wurde, wie man Antwortflächen als C-Code exportieren und in ein SimulationX-Modell einbinden kann, soll der gleiche Prozess nun beispielhaft mit Modelica-Code durchgeführt werden | Nachdem gezeigt wurde, wie man Antwortflächen als C-Code exportieren und in ein SimulationX-Modell einbinden kann, soll der gleiche Prozess nun beispielhaft mit Modelica-Code durchgeführt werden | ||
('''''Analyse - Antwortflächen - Modell Export'''''): | ('''''Analyse - Antwortflächen - Modell Export'''''): | ||
* Wir speichern unser Ersatzmodell als '''Modelica-Code''' in die Datei '''Magnet_xx.mo'''. ('''xx'''=Teilnehmer- | * Wir speichern unser Ersatzmodell als '''Modelica-Code''' in die Datei '''Magnet_xx.mo'''. ('''xx'''=Teilnehmer-Nr.). | ||
* | * Dieser Quelltext kann im Prinzip unverändert in ein SimulationX-Modell eingebunden werden, solange alle Variablen den Namenskonventionen von Modelica genügen. Im Beispiel muss das den Kennfeld-Variablen vorangestellte Zeichen '''#''' entfernt werden ('''#i''' und '''#s''' durch '''i''' und '''s''' ersetzen). Ansonsten kommt es zu einem Syntax-Fehler im Modelica-Interpreter! | ||
* Der Quelltext enthält unter Benutzung der gewählten Covariance-Funktion die identifizierten Gauss-Ketten für alle Kriterien/Restriktionen (im Folgenden gekürzt): | |||
model Magnet_xx | |||
input SignalBlocks.InputPin #i[*]; | |||
input SignalBlocks.InputPin #s[*]; | |||
output SignalBlocks.OutputPin F[*]; | |||
output SignalBlocks.OutputPin Psi[*]; | |||
function Covar_F | |||
input Real x1[2]; | |||
input Real x2[2]; | |||
input Real p[4]; | |||
output Real Co; | |||
Real W,v; | |||
algorithm | |||
W := 0; | |||
for i in 1:2 loop | |||
W := W + abs((x1[i]-x2[i])*p[i]); | |||
end for; | |||
Co := exp(-W); | |||
end Covar_F; | |||
function Covar_Psi | |||
input Real x1[2]; | |||
input Real x2[2]; | |||
input Real p[4]; | |||
output Real Co; | |||
Real W,v; | |||
algorithm | |||
W := 0; | |||
for i in 1:2 loop | |||
W := W + (abs((x1[i]-x2[i])*p[i]))^p[i+2]; | |||
end for; | |||
Co := exp(-W); | |||
end Covar_Psi; | |||
function Get_F | |||
input Real #i; | |||
input Real #s; | |||
output Real F; | |||
Real x1[2]; | |||
Real x2[2]; | |||
Real p[4]; | |||
algorithm | |||
F := 36.5588768; | |||
F := F+9.5508415*#i^1; | |||
F := F-0.441931596*#i^2; | |||
F := F-31.4808944*#s^1; | |||
F := F+4.3459*#s^2; | |||
p[1] := 0.449543623; | |||
p[2] := 0.859208087; | |||
x1[1] := #i; | |||
x1[2] := #s; | |||
x2[1] := 5.01; | |||
x2[2] := 2.03; | |||
F := F-1.49775068*Covar_F(x1,x2,p); | |||
: | |||
x2[1] := 3.59319074; | |||
x2[2] := 3.04127299; | |||
F := F-0.408926484*Covar_F(x1,x2,p); | |||
end Get_F; | |||
function Get_Psi | |||
input Real #i; | |||
input Real #s; | |||
output Real Psi; | |||
Real x1[2]; | |||
Real x2[2]; | |||
Real p[4]; | |||
algorithm | |||
Psi := 0.0108811648; | |||
Psi := Psi+0.0136172044*#i^1; | |||
Psi := Psi-0.000727718067*#i^2; | |||
Psi := Psi-0.00375705737*#s^1; | |||
Psi := Psi+0.000119861715*#s^2; | |||
p[1] := 0.761312306; | |||
p[2] := 0.442871774; | |||
p[3] := 1.99989183; | |||
p[4] := 1.99877146; | |||
x1[1] := #i; | |||
x1[2] := #s; | |||
x2[1] := 5.01; | |||
x2[2] := 2.03; | |||
Psi := Psi-0.0830217167*Covar_Psi(x1,x2,p); | |||
: | |||
x2[1] := 3.59319074; | |||
x2[2] := 3.04127299; | |||
Psi := Psi+0.224830021*Covar_Psi(x1,x2,p); | |||
end Get_Psi; | |||
algorithm | |||
F := Get_F(#i,#s); | |||
Psi := Get_Psi(#i,#s); | |||
public | |||
annotation( | |||
: | |||
end Magnet_xx; | |||
<div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|→]] </div> | <div align="center"> [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld-Nutzung_zur_System-Simulation|←]] [[Software:_FEM_-_Tutorial_-_Magnetfeld_-_Kennfeld_als_Modelica-Implantat_im_Systemmodell|→]] </div> |
Aktuelle Version vom 16. April 2014, 09:35 Uhr
Kennfeld-Export als Modelica-Code
(Kein Bestandteil der Lehrveranstaltung FEM )
Nachdem gezeigt wurde, wie man Antwortflächen als C-Code exportieren und in ein SimulationX-Modell einbinden kann, soll der gleiche Prozess nun beispielhaft mit Modelica-Code durchgeführt werden (Analyse - Antwortflächen - Modell Export):
- Wir speichern unser Ersatzmodell als Modelica-Code in die Datei Magnet_xx.mo. (xx=Teilnehmer-Nr.).
- Dieser Quelltext kann im Prinzip unverändert in ein SimulationX-Modell eingebunden werden, solange alle Variablen den Namenskonventionen von Modelica genügen. Im Beispiel muss das den Kennfeld-Variablen vorangestellte Zeichen # entfernt werden (#i und #s durch i und s ersetzen). Ansonsten kommt es zu einem Syntax-Fehler im Modelica-Interpreter!
- Der Quelltext enthält unter Benutzung der gewählten Covariance-Funktion die identifizierten Gauss-Ketten für alle Kriterien/Restriktionen (im Folgenden gekürzt):
model Magnet_xx input SignalBlocks.InputPin #i[*]; input SignalBlocks.InputPin #s[*]; output SignalBlocks.OutputPin F[*]; output SignalBlocks.OutputPin Psi[*];
function Covar_F input Real x1[2]; input Real x2[2]; input Real p[4]; output Real Co; Real W,v; algorithm W := 0; for i in 1:2 loop W := W + abs((x1[i]-x2[i])*p[i]); end for; Co := exp(-W); end Covar_F;
function Covar_Psi input Real x1[2]; input Real x2[2]; input Real p[4]; output Real Co; Real W,v; algorithm W := 0; for i in 1:2 loop W := W + (abs((x1[i]-x2[i])*p[i]))^p[i+2]; end for; Co := exp(-W); end Covar_Psi;
function Get_F input Real #i; input Real #s; output Real F; Real x1[2]; Real x2[2]; Real p[4]; algorithm F := 36.5588768; F := F+9.5508415*#i^1; F := F-0.441931596*#i^2; F := F-31.4808944*#s^1; F := F+4.3459*#s^2; p[1] := 0.449543623; p[2] := 0.859208087; x1[1] := #i; x1[2] := #s; x2[1] := 5.01; x2[2] := 2.03; F := F-1.49775068*Covar_F(x1,x2,p); : x2[1] := 3.59319074; x2[2] := 3.04127299; F := F-0.408926484*Covar_F(x1,x2,p); end Get_F;
function Get_Psi input Real #i; input Real #s; output Real Psi; Real x1[2]; Real x2[2]; Real p[4]; algorithm Psi := 0.0108811648; Psi := Psi+0.0136172044*#i^1; Psi := Psi-0.000727718067*#i^2; Psi := Psi-0.00375705737*#s^1; Psi := Psi+0.000119861715*#s^2; p[1] := 0.761312306; p[2] := 0.442871774; p[3] := 1.99989183; p[4] := 1.99877146; x1[1] := #i; x1[2] := #s; x2[1] := 5.01; x2[2] := 2.03; Psi := Psi-0.0830217167*Covar_Psi(x1,x2,p); : x2[1] := 3.59319074; x2[2] := 3.04127299; Psi := Psi+0.224830021*Covar_Psi(x1,x2,p); end Get_Psi;
algorithm F := Get_F(#i,#s); Psi := Get_Psi(#i,#s); public annotation( : end Magnet_xx;