function u = heatexp(endx, endt, Nx,q) % Az egydimenziós hővezetési feladatot oldjuk meg % A program bemenő adatai: % endx: a térbeli változó [0,endx]intervallumon változik % endt: az időváltozó [0,endt]intervallumon változik % Nx: a térbeli osztásrészek száma % q: az időbeli és a térbeli diszkretizációs lépésköz négyzetének hámyadosa % (stabilitási feltétel: $q \le 0.5$) % A két térbeli végpontban első peremfeltétel adott: u(x(1), t) = bdry(1), u(x(end), t) = bdry(2). % A kezdeti függvényt az init függvényben definiáljuk umego = inline('exp(x1)*sin(-t1)'); x= linspace(0, endx, Nx); dx = (endx/Nx) % a lépésközök definiálása dt=(q*dx*dx) % Nt=fix(endt/dt) t = linspace(0, endt, Nt); s = dt/dx^2 % ellenőrizzük a szabilitási feltételt if s >0.5 'instabilitás!' pause end % init = sin(x); % a kezdeti és a peremfeltétel bdry=[0 0]; % J = length(t); N = length(x); u = zeros(N,J); u(:, 1) = init; for n = 1:J-1 u(2:N-1,n+1) = s*(u(3:N,n) + u(1:N-2,n)) + (1 - 2*s)*u(2:N-1, n); u(1, n+1) = bdry(1); u(N, n+1) = bdry(2); end % az eredmények ábrázolása errgrid = reshape(u,N,J); figure(1) mesh([dx:dx:(N)*dx]',[dt:dt:(J)*dt]',errgrid') title('a numerikus megoldásfüggvény') pause upontos=zeros(N,J); for i=1:N for n=1:J upontos(i,n)=exp(-t(n))*sin(x(i)); end end figure(2) mesh([dx:dx:(N)*dx]',[dt:dt:(J)*dt]',errgrid') title('a pontos megoldásfüggvény') pause hibamatrix=upontos-errgrid; figure(3) mesh([dx:dx:(N)*dx]',[dt:dt:(J)*dt]',hibamatrix') title('hibafüggvény') errinf = max(max(hibamatrix)); hibamax=errinf