Praktická cvičení z Numerické matematiky
Numerické řešení PDR - 10. týden
- Dirichletova okrajova uloha pro Poissonovu rovnici (MATLAB)
Oblast: ctverec [0,1]^2, okrajova podminka phi(x,y) = 0, prava strana f(x, y) = sin(pi x) sin(pi y).
n = 11;
e = ones(n,1);
T = full(spdiags([-e 4*e -e ], [-1:1], n, n));
E = diag(-e);
A = []; for i = 1:n, A = blkdiag(A, T); end,
A = A - diag(ones(n*(n-1),1), -n) - diag(ones(n*(n-1),1), n);
Sestavime pravou stranu:
[xx, yy] = meshgrid((1:n)'/(n+1), (1:n)'/(n+1));
h = 1 / (n + 1);
b = h * h * sin(pi * x) * sin(pi * y);
b = reshape(b, n * n, 1);
Reseni soustavy a zobrazeni reseni:
u = A \ b;
uu = reshape(u, n, n);
mesh(xx, yy, uu);
Uloha: - Laplace u = f, Oblast: ctverec [0,1]^2,
Okrajova podminka: u = 0,
f(x, y) = sin(pi x) sin(pi y).
Opravte si n = 10 v programu (dle potřeby)
Zde soustavu rovnic nesestavujeme jen resime (viz 3. cviceni).
for(i = 1; i < n; i++) for(j = 1; j < n; j++) U[i][j]=(b[i][j]+U[i-1][j]+U[i+1][j]+U[i][j-1]+U[i][j+1])/4.;Celý program poisson2d.c
Zobrazeni vysledku v MATLABu
load sol.dat; mesh(sol);Zobrazeni vysledku v GNUPLOTu
sp "sol.dat" matrix with linepoints
Okrajova podminka: u = 0 pro x = 0 nebo du/dn = 0 jinde
f(x, y) = sin(pi x) sin(pi y).
Opravte si n = 10 v programu.
Zde soustavu rovnic nesestavujeme jen resime (viz 3. cviceni).
Celý program poisson2d_neumann.c
Jedna se o ukazku, jak i s takto jednoduchou metodou je mozne spocitat zajimavy priklad: zde uvazujeme potrubi jimz proudi horka kapalina (vnitrek kruhovy prurez, vnejsi ctverec - z duvodu realizace Neumannovy okrajove podminky), potrubi teplo vede a dochazi k prestupu tepla do okolniho prostredi o urcite teplote. Parametry neodpovidaji realne situaci, jedna se jen o cvicny priklad.
Celý program potrubi.c
Zobrazeni vysledku v GNUPLOTu
sp "sol.dat" matrix with linepoints