Metodo di Heun

marco.ceccarelli
Buonasera. Devo svolgere quest'esercizio di Calcolo Numerico ma ho bisogno di una mano. Ringrazio chiunque possa aiutarmi.

CONSEGNA: 'Si consideri il problema differenziale $y''-(y')^2+y+(cos(x))^2=0, x>0$, le cui condizioni iniziali sono $y(0)=0, y'(0)=1$. Approssimare $y(1)$ con il metodo di Heun con passo $h=0.5$.'

Io ho trasformato il problema di Cauchy proposto in un sistema differenziale di 1° ordine, le cui 2 equazioni sono $y'=z$ e $z'=-(cos(x))^2-y+z^2, x>0$, e le cui condizioni iniziali sono $y(0)=0, z(0)=1$. Ho provato più e più volte, ma non sono riuscito ad utilizzare il metodo di Heun per la risoluzione di questo esercizio. :cry:

Risposte
vict85
Non capisco quale possa essere il tuo problema. Insomma Heun in versione multidimensionale lo hai capito? Devi implementare la cosa in qualche linguaggio (MATLAB per esempio) oppure farlo a mano?

L'equazione differenziale è
\(\displaystyle y'' = \bigl(y'\bigr)^2 - y - \cos^2 x \)
Ponendo \(\displaystyle y' = z \) si ricava.
\(\displaystyle \begin{cases} y' &= z \\ z' &= z^2 - y - \cos^2 x \end{cases} \)
con le condizioni iniziali
\(\displaystyle \begin{cases} y(0) &= 0 \\ z(0) &= 1 \end{cases} \)

Ora, il termine metodo di Heun può indicare più metodi simili :roll: io suppongo tu intenda il seguente:
\(\displaystyle \mathbf{w}_{k+1} = \mathbf{w}_{k} + h\Bigl(\frac14 \mathbf{k}_1 + \frac34 \mathbf{k}_2\Bigr) \)
con
\(\displaystyle \mathbf{k}_1 = \mathbf{f}(x, \mathbf{w}_{k}) \)
\(\displaystyle \mathbf{k}_2 = \mathbf{f}\Bigl(x+ \frac23h, \mathbf{w}_{k} + \frac23h\mathbf{k}_1\Bigr) \)

Nel tuo caso \(\displaystyle \mathbf{f}\bigl(x, (y, z)\bigr) = (z, z^2 - y - \cos^2 x) \).

marco.ceccarelli
Grazie per avermi risposto! :D

Devo farlo a mano. In genere, quando usiamo il metodo di Heun, utilizziamo l'algoritmo $y_(i+1)=y_i+h/2*(k_1+k_2)$ con $k_1=f(x_i, y_i)$, $k_2=f(x_(i+1), y_i+h*k_1)$. Da come parli però ('Heun in versione multidimensionale') mi pare di capire che questo sia un caso diverso. In questo caso, c'è pure $z$, infatti. Ho trovato quest'altro algoritmo sul libro, che dovrebbe essere quello del metodo di Heun 'per un sistema di equazioni differenziali'; è:

$y_(i+1)=y_i+h/2*(f(x_i, y_i, z_i)+f(x_(i+1), y_i+h*f(x_i, y_i, z_i), z_i+h*g(x_i, y_i, z_i)))$
$z_(i+1)=z_i+h/2*(g(x_i, y_i, z_i)+g(x_(i+1), y_i+h*f(x_i, y_i, z_i), z_i+h*g(x_i, y_i, z_i)))$

Usandolo ottengo $y_1=0.5, z_1=0.932462211, y_2=0.916147933$; quest'ultimo valore dovrebbe essere, secondo me, l'approssimazione di $y(1)$ con il metodo di Heun con passo $h=0.5$...

Che dici? :?

vict85
Ok, ho chiamato Heun un metodo diverso, seppur analogo.

La multidimensionalità dipende solamente dal fatto che \(y\) è un vettore bidimensionale e anche \(f\) ha immagine in \(\mathbb{R}^2\). Per il resto è uguale nel senso che la somma di vettori la dovresti saper fare.

Comunque devi tenere conto che devi fare due passi se \(h = 0.5\) e devi arrivare a \(1\).

marco.ceccarelli
OK, ho capito. Sì, ho tenuto conto del passo $h=0.5$. Infatti ho preso $y_2$ come risultato. Allora ho fatto bene... Grazie. :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.