Matematik, Modellering och Simulering Markus Dahl, Carl Jönsson Wolfram MathCore 2 LiU Math Presentation.nb Översikt ◼ Vilka är vi som presenterar? ◼ Wolfram Research med produkter ◼ Modellering och simulering i arbetslivet (Markus) ◼ Algoritmutveckling och matematiken bakom den (Carl) LiU Math Presentation.nb Vilka är vi? ◼ Markus Dahl - Applications Engineer på Wolfram MathCore ◼ Började Yi (tyska) 2010 - Examen 2015 ◼ Masterprofil inom Teori, Modellering och Visualisering ◼ Exjobb på MathCore -> Anställning ◼ Carl Jönsson - Software Engineer på Wolfram MathCore ◼ Började Yi (japanska) 2007 - Examen 2012 ◼ Masterprofil i Teknisk Matematik ◼ Utvecklar kärnan i Wolfram SystemModeler 3 4 LiU Math Presentation.nb Wolfram Research ◼ Huvudkontor i IL, USA. ◼ ~700 anställda världen över ◼ ~20 anställda på Sverigekontoret i Linköping (Wolfram MathCore) Produkter ◼ Mathematica ◼ Wolfram Alpha ◼ SystemModeler LiU Math Presentation.nb Mathematica ◼ Matematikprogram med symbolhantering In[1]:= 1 ⅆx 1 - x3 ArcTan 1+2 x 3 Out[1]= - 3 In[2]:= 1 3 Log[1 - x] + 1 6 Log1 + x + x2 DSolve2 + Cos[x] y '[x] - Sin[x] y[x] ⩵ 4 * Exp[2 x], y[0] ⩵ 4, y[x], x[[1, 1, 2]] 2 5 + ⅇ2 x Out[2]= 2 + Cos[x] In[3]:= RevolutionPlot3D[Sqrt[1 + x], {x, 0, 1}, RevolutionAxis → {2, 0, 0}] Out[3]= y′′ (x) x y(x) y(0) a, y′ (0) b 5 6 LiU Math Presentation.nb y (0 ) y ′ (0 ) 3 2 1 1 -1 -2 -3 ◼ Wolfram Alpha ◼ (Se video) 2 3 4 LiU Math Presentation.nb SystemModeler ◼ Modellering- och Simuleringsprogram, utvecklas i Mjärdevi av Wolfram MathCore ◼ Drag-and-drop modellering ◼ Multi-domänt ◼ Baserat på programmeringsspråket Modelica 7 8 LiU Math Presentation.nb Modellering och Simulering ◼ Vad betyder modellering i detta sammanhang? ◼ Beskrivning av verkligheten ◼ Ett sätt att kommunicera med en dator ◼ Fjäder: ◼ F =k*x ◼ F = kraft, k = styvhet, x = förskjutning ◼ Hur sätter vi ihop den här fjädermodellen med andra modeller? ◼ “Räknar man verkligen matte efter universitetet?” SystemModeler - Exempel ◼ Elektronikmodell ◼ Mekanikmodell LiU Math Presentation.nb Optimera solfångare ◼ Cleanergy - Använder solen för att driva stirlingmotorer 9 10 LiU Math Presentation.nb ◼ Video ◼ Vilka delar behöver modelleras? ◼ Solen ◼ Ta väderdata från mätningar ◼ Hur faller solens strålar in mot parabolen? ◼ Parabolen ◼ Enkel optik där en liten del absorberas av parabolen, resten reflekteras ◼ Solfångaren ◼ Termodynamik! Värmeöverföring genom konvektion, ledning och strålning. ◼ Behöver även kunna beskriva geometrin för kaviteten ◼ Stirlingmotorn LiU Math Presentation.nb ◼ Termodynamik igen, plus interaktion med reglersystem ◼ Reglersystemet ◼ Reglerteori ◼ Generator ◼ Enklaste fallet: skriv in en uppmätt verkningsgrad 11 12 LiU Math Presentation.nb Helikoptermodellering ◼ Vad behöver vi modellera för att få en realistisk helikopterrotor? ◼ Flexibla helikopterblad - Mekanik ◼ Helikopterkropp - Mekanik ◼ Reglersystem för kontroll av motor och vinkel av blad ◼ Hur gör man ett reglersystem till en helikopter på så kort tid som möjligt? ◼ Helikopterbladens interaktion med luft (Stor utmaning!) - Aerodynamik ◼ Detta blev den stora nöten att knäcka.. LiU Math Presentation.nb ◼ ◼ 13 14 LiU Math Presentation.nb LiU Math Presentation.nb 15 Matematik och SystemModeler ◼ Jag arbetar på SystemModeler-kärnan, typiskt innefattar detta: ◼ Förbättra robusthet och kapabilitet. ◼ Utveckla och vidareutveckla algoritmer som behövs för matematisk behandling av modeller. ◼ Hålla mig uppdaterad med relevant forskning. ◼ SystemModeler-kärnan tar en användardefinierad modell och producerar ett separat simuleringsprogram för modellen. ◼ Först omvandlas modellen till en lista av ekvationer och variabler. ◼ Sen optimeras och sorteras ekvationerna. ◼ Till sist genereras programkod (C++) som kompileras av en vanlig kompilator. ◼ Vilken matematik hanterar SystemModeler? Vad kan användaren skriva in? ◼ Vilken matematik använder SystemModeler internt? Vilken matematik behövs för att omvandla ett stort ekvationssystem till ett datorprogram? 16 LiU Math Presentation.nb Vilken matematik hanterar SystemModeler? Modeller i SystemModeler är matematiskt sett hybrida differential-algebraiska ekvationssystem (Hybrid DAE). Detta innebär att man kan ha ekvationer som är: ◼ Differentialekvationer, där derivatan tas med avseende på tiden, exempelvis: ◼ dx dt = αx + βy ◼ dy dt = δxy - γy ◼ Algebraiska ekvationer (ekvationer utan derivator i), exempelvis: ◼ x 2 + y 2 = L2 ◼ ϵ = tan(ϕ) - ϕ ◼ Event-ekvationer, ekvationer som triggar på en speciell händelse, exempelvis: ◼ when x > 0 then y = z^2; end when; LiU Math Presentation.nb Hur löser SystemModeler hybrida DAE:er? ◼ Differentialekvationer löses oftast med numeriska ODE-lösare. Man beräknar den högsta derivatan av en variabel och integrerar sedan numeriskt. ◼ ODE-lösaren “håller takten” vid simulering. ◼ Algebriska ekvationer löses antingen symboliskt, med linjära lösare eller med olinjära lösare. ◼ Event-ekvationer löses symboliskt, men här måste man se till att stanna sin ODE-lösare vid rätt tidpunkt. 17 18 LiU Math Presentation.nb Hur hanterar SystemModeler stora system? ◼ En modell i SystemModeler har ofta väldigt många ekvationer, modeller med över 10 000 ekvationer är vanligt. ◼ Nästan alla intressanta modeller innehåller någon icke-linjär ekvation. ◼ Enkel lösning: Ge alla algebraiska ekvationer till en icke-linjär lösare. ◼ Kan bli väldigt ineffektivt. ◼ Hur kan man behandla modeller mer effektivt? ◼ Vi använder grafteori för att bryta ner systemet i mindre system. LiU Math Presentation.nb Hur använder SystemModeler grafteori? En graf är en samling av noder,sammanbundna av bågar. GraphPlot3D[GraphData["Foster056A", "EdgeRules"], Boxed → False] Vi analyserar en modells ekvationer genom att skapa en nod för varje ekvation och variabel. Vi skapar en båge mellan en ekvation e och en variabel v om v förekommer i e. x⨯y + z = 1 x+y=2 x-y=2 19 20 LiU Math Presentation.nb eg1 = bipartiteGraph[{{1, x}, {1, y}, {1, z}, {2, x}, {2, y}, {3, x}, {3, y}}] 1 x 2 y 3 z Vi försöker sedan matcha upp ekvationerna med variablerna så att varje ekvation är matchad med exakt en variabel. Om ekvation e är matchad med variabel v tolkar vi det som att vi ska lösa ekvationen e för variabeln v. HighlightGraph[eg1, FindEdgeCover[eg1]] 1 x 2 y 3 z LiU Math Presentation.nb Graf och matchning för en V6-motor Nedanstående graf har ungefär 6800 noder (3400 variabelnoder och 3400 ekvationsnoder). En röd båge mellan noder betyder att noderna är ett matchat variabel-ekvationspar. HighlightGraph[bipartiteGraphNoLabels[ev6g], ev6matching] 21 22 LiU Math Presentation.nb Ekvationssortering ◼ När vi har matchat alla variabler med en ekvation sorterar vi ekvationerna i ordningen de ska lösas. ◼ Idealt sett vill vi ordna ekvationerna så att man löser en ekvation åt gången och lösa den matchade variabeln symboliskt ur ekvationen. ◼ Detta är inte alltid möjligt, betrakta exempelvis följande system: x+y = 2 x-y = t ◼ Grafen med en matchning ser ut såhär: exg = {{1, x}, {1, y}, {2, x}, {2, y}}; g = bipartiteGraph[exg]; HighlightGraph[g, FindEdgeCover[g]] 1 x 2 y ◼ Här löser vi ekvation 1 för y, men ekvation 1 kräver att vi vet x, vilken löses ur ekvation 2, som kräver att vi vet x. ◼ Alltså måste ekvationerna 1 och 2 lösas samtidigt. ◼ Vi identifierar dessa system av ekvationer och använder speciella lösare för dem. LiU Math Presentation.nb Fördelar ◼ Om man bryter ner systemet i mindre system blir det mycket enklare att lösa. Istället för att lösa ett icke-linjärt system med 10 000 ekvationer, löser man massor av små system. ◼ För de flesta modeller får man massor av system med endast en ekvation och ett fåtal system som är större (oftast under 20 ekvationer) som använder speciella lösare. ◼ För V6-motorn får man: ◼ 17 linjära system: 11 med storlek 2, 6 med storlek 8. ◼ 6 olinjära system, samtliga av storlek 9 (ett system för varje cylinder). ◼ Resten av ekvationerna (över 3200) löses en åt gången, symboliskt. 23 24 LiU Math Presentation.nb Hur vet SystemModeler vilken lösare den ska använda? ◼ När SystemModeler träffar på ett system av flera ekvationer ser den ekvationerna som en funktion av variablerna den försöker lösa. ◼ Från exemplet tidigare identifierade vi ett system med två ekvationer där vi löser för x och y. ◼ x +y =2 ◼ x-y=t ◼ Vi omvandlar detta till en funktion f (x, y) = x+y-2 och försöker hitta x, y så att f(x, y) = 0. x-y-t ◼ Vi analyserar systemet genom att beräkna jacobianen. ◼ ∂f1 ∂x ∂f1 ∂y ∂f2 ∂x ∂f2 ∂y = 1 1 1 -1 ◼ Vi kan sedan på jacobianen om systemet är tidskonstant linjärt, tidsvariabelt linjärt eller olinjärt. ◼ För tidskonstanta linjära system kan man exempelvis förberäkna en LU-faktorisering för att snabbt lösa systemet när det behövs. ◼ Vårt exempel är tidskonstant linjärt 1 1 x 2 = , endast högerledet kan ändras med tiden. 1 -1 y t ◼ Ett tidsvariabelt linjärt system innehåller variabler som inte är lösningsvariabler för systemet i sin jacobian. För dessa system behöver man lösa systemet med en linjär lösare varje gång. ◼ Exempelvis z ⨯ x + y = 1, 2 x + y = 2. ◼ f(x, y) = z ⨯x + y - 1 2x+y - 2 ◼ Jacobian: ◼ z 1 2 1 z 1 x 1 = , vänsterledet kan ändras med tiden. 2 1 y 2 ◼ Ett olinjärt system innehåller lösningsvariabler i jacobianen. För dessa system använder man speciella lösare som kan ta betydligt mer tid än linjära lösare. ◼ Exempelvis x2 + y = z, 2 x + y2 = 2. ◼ f(x, y) = x2 + y - z 2 x + y2 - 2 ◼ Jacobian: 2x 1 2 2y