LABORATORIUM 7 Grupa NP, wtorek 28.05.2024, godz 08:30
Napisz skrypt, który rozwiąże numerycznie równanie przewodnictwa cieplnego (dyfuzji ciepła)
$$ \frac{\partial u(x,t)}{\partial t} = D \frac{\partial^2 u(x,t)}{\partial x^2} $$dla jednowymiarowego pręta o współczynniku przewodnictwa (dyfuzji) $D=1[m^2/s]$ i długości \(L=1 [m]\), podgrzanego najpierw zgodnie z rozkładem temperatury opisanym równaniem \(u(x,0)=\sin(\pi x)\) (warunek początkowy), a następnie schładzanego aż do czasu \(T=1 [s]\). Przyjmij, że temperatura na obu końcach pręta wynosi \(u(0,t)=u(L,t)=0[K]\). Dokonaj dyskretyzacji (podziału) dziedziny czasu, \(t\), na 2500, a położenia, \(x\), na 30 równych przedziałów. Do rozwiązania równania przewodnictwa skorzystaj z jawnego schematu Eulera. Wyświetl siatkę rozkładu ciepła/temperatury, \(u(x,t)\), w funkcji czasu \(t\) oraz położenia \(x\).
Wymagania odnośnie zadania i punktacja:- Skrypt ma za zadanie numeryczne rozwiązanie równania przewodnictwa cieplnego z wykorzystaniem jawnego schematu Eulera. Niezbędne do rozwiązania metody zostały przedstawione na wykładzie 10 na slajdach 10-14. [1.0p.],
- Wyniki działania skryptu, czyli rozkład $u(x,t)$ ma zostać przedstawiony na wykresie powierzchniowym utworzonym przez funkcję plot_surface() [0.5p.]
- Sprawdź efekty działania dla innych wartości $D$, w szczególności dwukrotnie większej i dziesiąciokrotnie mniejszej i wyjaśnij zaobserwowane zmiany. [0.5p.] Przykładowy kod do tworzenia wykresu powierzchniowego jest przedstawiony poniżej - funkcja np.meshgrid() rozpina siatkę na podstawie wektorów XX oraz TT (przechowujących zdyskretyzowane położenia oraz czas); macierz u przechowuje wyniki rozwiązania numerycznego z punktu (a) czyli $u(x,t)$.
from matplotlib import cm X, T = np.meshgrid(XX, TT) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) surf = ax.plot_surface(X, T, u, cmap=cm.coolwarm)