Metoda Heuna

Równania różniczkowe i całkowe. Równania różnicowe. Transformata Laplace'a i Fouriera oraz ich zastosowanie w równaniach różniczkowych.
janusz47
Użytkownik
Użytkownik
Posty: 7917
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1671 razy

Metoda Heuna

Post autor: janusz47 »

Metoda Heuna

Metoda Heuna oparta jest na kwadraturze trapezów. Odległość mięzy węzłami \(\displaystyle{ h }\) musi spełniać warunek:

\(\displaystyle{ \max_{a\leq x \leq b\\ a\leq t\leq b}(|k(x,t)|h ) <1 }\)

Rozwiązując równanie całkowe Volterry typu

\(\displaystyle{ u(x) = f(x) + \int_{a}^{x} k(x,t)u(t) dt ,}\)

w pierwszym kroku obliczamy wartość początkową:

\(\displaystyle{ u_{0} = u(x_{0}) = f(x_{0}). }\)

Następnie obliczamy wartość:

\(\displaystyle{ u(x_{1}) = f(x_{1}) + \int_{a}^{x_{1}} k(x_{1},t)u(t) dt, }\)

stosując kwadraturę trapezów

\(\displaystyle{ u_{1} = f(x_{1}) + \frac{h}{2}\left[ k(x_{1},t_{0})u_{0} + k(x_{1},t_{1}\right].}\)

Otrzymujemy równość

\(\displaystyle{ \left[1 - \frac{k(x_{1},t_{1})h}{2}\right] u_{1} = f(x_{1}) + \frac{h}{2}k(x_{1},t_{0}) u_{0}. }\)
................................................................
Ogólnie aproksymując \(\displaystyle{ u_{n+1}, }\) mamy równanie:

\(\displaystyle{ \left[1 - \frac{k(x_{n+1},t_{n+1})h}{2}\right] u_{n+1} = f(x_{n+1}) + \frac{h}{2}k(x_{n+1},t_{0}) u_{0} + \sum_{j=1}^{n} k(x_{n+1},t_{j})u_{j}h }\)

Przykład

Rozwiążemy równanie

\(\displaystyle{ u(x) = x +\int_{0}^{x} x t u(t)dt, }\)

przyjmując

\(\displaystyle{ 0 \leq k(x,t) \leq 1, }\) dla \(\displaystyle{ h=0,2 }\).

\(\displaystyle{ k(x,t) = xt, \ \ f(x) = x.}\)

Program MATLAB

Kod: Zaznacz cały

function Heun_Volterra(k,f,a,b,n) 
%Rozwiązanie równania Volterry drugiego rzędu 
% metodą Heuna, k(x,t)- dane jądro, f=f(x)- dana funkcja. 
fprintf('\n') 
disp(' Rozwiązanie równania Volterry metodą Heuna') 
disp('______________________________') 
disp(' xi ui ') 
disp('______________________________') 
h=(b-a)/n; 
u(1)=feval(f,a); 
for i=2:n+1 
% Współrzędne wektora f 
 x=a+(i-1)*h; 
 F=feval(f,x); 
 S=0; 
 for j=1:i-1 
 t=a+(j-1)*h; 
 if j==1 
 S=S+u(j)*h/2*feval(k,x,t); 
 else 
 S=S+u(j)*h*feval(k,x,t); 
 end 
 end 
 D=1-h/2*feval(k,x,x); 
 u(i)=(F+S)/D; 
end 
y=[a:h:b]'; 
for i=1:n+1 
 fprintf(' %9.4f %12.6f \n',y(i),u(i))
end
 
Przykład

Kod: Zaznacz cały

 function k=k1(x,t)
 k= x*t;
 
 function f=f1(x)
 f=x; 
 
  Rozwiązanie równania Volterry metodą Heuna
______________________________
       xi          ui 
______________________________
    0.0000     0.000000 
    0.2000     0.200803 
    0.4000     0.409769 
    0.6000     0.647809 
    0.8000     0.956026 
    1.0000     1.412794 
    1.2000     2.178608 
    1.4000     3.616562 
    1.6000     6.644252 
    1.8000    13.888059 
    2.0000    34.051464 
ODPOWIEDZ