Wolfram 언어

편미분 방정식

이벤트가있는 편미분 방정식을 영역에서 해결

삼중 단열 벽과 외부 온도의 영향을 받는 유리 정면 현관을 가진 방에서 온도 제어된 발열을 모델링합니다.

In[1]:=
Click for copyable input
\[CapitalOmega] = Rectangle[{0, 0}, {3/2, 1}]; outsideTemp[t_] := 15 + 10*Sin[2 \[Pi] t/24]; kd = 0.78; Ld = 0.05; \[CapitalGamma] = NeumannValue[Ld/kd*(outsideTemp[t] - u[t, x, y]), {x == 0}];

난방기의 부하는 사건에 의해 증가하거나 감소합니다.

In[2]:=
Click for copyable input
heaterLoad = 26; heater[upQ_, t_, tEvent_] := If[upQ == 1, Min[20*Max[(t - tEvent), 0], 1], 1 - Min[20*Max[(t - tEvent - 1/8), 0], 1]]*heaterLoad

편미분 방정식은 사이클에서 열을 생성하고 유리 창문을 통해 열을 잃는 동안 공기를 통한 열 확산을 모델링합니다.

In[3]:=
Click for copyable input
\[Rho] = 1.225; Cp = 1005.4; With[{heating = heater[a[t], t, eventT[t]]}, pde = D[u[t, x, y], t] - \[Rho]*Cp*Laplacian[u[t, x, y], {x, y}] == If[(x - 1/2)^2 + (y - 1/2)^2 <= (2/10)^2, heating, 0] + \[CapitalGamma]];

의 위치에 있는 온도 조절 장치가 트리거 신호보다 낮거나 높은 온도를 감지하는 경우 및 이산 변수가 변화한 경우, 난방기는 켜지거나 꺼지게됩니다.

In[4]:=
Click for copyable input
triggerLow = 18; triggerHigh = 20; events = {a[0] == 1, eventT[0] == 0, WhenEvent[ u[t, 1.25, .25] < triggerLow, {eventT[t], a[t]} -> {If[a[t] == 0, t, eventT[t]], 1}], WhenEvent[ u[t, 1.25, .25] > triggerHigh, {eventT[t], a[t]} -> {If[a[t] == 1, t, eventT[t]], 0}]};

외부 온도와 동일한 초기 조건에서 편미분 방정식의 시간 적분을 관찰합니다.

In[5]:=
Click for copyable input
eqn = {pde, u[0, x, y] == outsideTemp[0], events}; res = Monitor[ NDSolveValue[ eqn, {u, a}, {t, 0, 2*24}, {x, y} \[Element] \[CapitalOmega], DiscreteVariables -> {eventT[t], a[t]}, EvaluationMonitor :> (monitor = Row[{"t = ", CForm[t]}])], monitor]
Out[5]=

온도 조절 장치에서 측정된 온도, 외부 온도, 난방기의 트리거 신호를 시각화합니다. 난방기가 켜져있는 부분은 푸른 배경색으로 표시되어 있습니다.

In[6]:=
Click for copyable input
hp = Plot[ 25 res[[2]][t], {t, 0, 2*24}, Filling -> Bottom, PlotStyle -> None]; Show[ Plot[{res[[1]][t, 1.25, .25], outsideTemp[t], 18, 20}, {t, 0, 2*24}], hp]
Out[6]=

관련 예제

de en es fr ja pt-br ru zh