Anteprima
Vedrai una selezione di 7 pagine su 29
Appunti Metodi numerici - Parte 2 Pag. 1 Appunti Metodi numerici - Parte 2 Pag. 2
Anteprima di 7 pagg. su 29.
Scarica il documento per vederlo tutto.
Appunti Metodi numerici - Parte 2 Pag. 6
Anteprima di 7 pagg. su 29.
Scarica il documento per vederlo tutto.
Appunti Metodi numerici - Parte 2 Pag. 11
Anteprima di 7 pagg. su 29.
Scarica il documento per vederlo tutto.
Appunti Metodi numerici - Parte 2 Pag. 16
Anteprima di 7 pagg. su 29.
Scarica il documento per vederlo tutto.
Appunti Metodi numerici - Parte 2 Pag. 21
Anteprima di 7 pagg. su 29.
Scarica il documento per vederlo tutto.
Appunti Metodi numerici - Parte 2 Pag. 26
1 su 29
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ODE IV_02

function [t,t xmf, Vmf] = funzione

end

ODE IV_06

function [t, y] = ode (dt, t0, y0)t = 0:dt:tf; t = t'; NT = length(t);y = zeros (NT,1);y(1) = y0;for it = 2:NT    y(it) = y(it-1) + dt * ( ... )end

end

METODO DI HEUN

Metodo più accurato del Metodo di EuleroFino ad ora abbiamo studiato problemi in questa forma.dy/dt = e(y, t) es. * dy/dt = -alpha-y

  • dxm/dt = ...
  • dvm/dt = -k/m...

Con il Metodo di Eulero sviluppiamo il seguente algoritmo:...

Questa algoritmo si porta a fare degli errori: O(1)

L'interpretazione geometrica del metodo di Eulero è:

L'errore è dato dal fatto che ci immaginiamo su una retta che ha pendenza che è quella iniziale della funzione.

Per ridurre l'errore devo ridurre il Δt.

Altri metodi sono quelli di Runge-Kutta e Adam Bashforth.

Uno dei più semplici della categoria dei metodi di Runge-Kutta è il METODO DI HEUN.

L'idea dei metodi di Runge-Kutta è quello di fare un passo in avanti usando un punto "migliorato" e non quello iniziale (come invece facevamo con il Metodo di Eulero).

METODO DI HEUN:

Uso, cioè, una pendenza media (che ai primi non sapevamo), quindi si usa prima la pendenza di partenza e calcolo un yint che è in colore vi Tantòra yintE (questo è l'errore per calcolare).

yh(it) = yh(it-1) + dt * 1/2 * (RHS_iulz + RHS_fil)

tempo Heun = toc

% % Disegno dei vettori

figure

plot(y,e,'c'); ...

hold on

plot(, y, quadrico,'b')

plot( + yh,'k')

title('Prima eq. differenziale')

legend('...','...', 'soluzione con metodo di Heun')

t(ic) -> lo parte lineare

(tempo-toc) -> funzione lineare e on da il calcolo del tempo

L'accuratezza del metodo di Heun è più che il doppio rispetto al metodo di Eulero.

save "dove_stepHeun_terodix_03"

% Integrazione nel tempo con metodo di Heun

t(ic)

yh(1) = yj;

for it = 2: Nt

RHS_iul = -a * yh(it-1);

correzione

ypredittore = yh(t':+1) + dt * RHS_iulz; % se ora si chiama predittore

for i=1:2

RHS_fiu = -o * ypredittore;

ypredittore = yh(it-1) + dt * 1/2 (RHS_iuln + RHS_fin)

end

yh(it) = ypredittore;

end

Il sistema del 1o ordine lo posso scrivere come:

M d2x/dt2 + Ddx/dt + Kx = {ß}

Il sistema del 1o ordine, invece, è:

m dy/dt + Ky = F

Quindi, possiamo dire che:

m = [2x3][4x4][2+3][4+3](I    OO    M)    e    K = (O    IK    D)

ESEMPIO:

ODE-IV.09 - Edificio multipiano, Metodo di Eulero

31/10/2022

sistema di 3 ODE del 1o ordine lineare

d2x1/dt2 = -k4/m1x1 + k3/m1(x2 - x1)

d2x2/dt2 = k2/m2(x1 - x2) + k3/m2(x3 - x2)

d2x3/dt2 = k3/m3(x2 - x3)

X = (x1x2x3)

Devo scrivere il sistema del 1o ordine. Introduco il vettore delle incognite:

M d2x/dt2 + Ddx/dt + Kx = {∫∫}

Metodo dell'attraversamento dello zero

ALGORITMO 1°

x(1) ? x(2)

x(2) ? x(3)

...

x(N-1) ? x(N)

  • for ie = 1 : N - 1
  • Confronto tra x(ie) e x(ie+1)
  • se cambio segno → memorizzo ie

end

Tra x(ie) e x(ie+1) c'è un cambio segno?

  1. if (x(ie) < 0 ∧ x(ie+1) >= 0) → cambio!
  2. if (x(ie) >= 0 ∧ x(ie+1) < 0) → cambio!

Operatore relazionale

  1. > 0 se x(ie) e x(ie+1) hanno stesso segno
  2. <= 0 se x(ie) e x(ie+1) hanno segno diverso, ossia tra di loro c'è un punto e' zero

if x(ie) * x(ie+1) cambio!

se cambio segno memorizzo ie in icambio

ncambio = 0

for ie = 1 : N - 1

  • if x(ie) * x(ie+1) <= 0
  • ncambio = ncambio + 1 → aumenta ncambi di 1
  • icambio(ncambio) = ie

end

function [G]= prepara_matrice(v)

N= length(v)-1;

G= zeros(N);

G(1,1)= v(1)+v(2);

G(1,2)= -v(2);

G(N,N)= v(N)+v(N+1);

G(N,N-1)= -v(N);

for ic=2:N-1

G(ic, ic-1)= -v(ic);

G(ic, ic)= v(ic)+v(ic+1);

G(ic, ic+1)= -v(ic+1);

end

end

%% Preparazione matrice MM e kk

MM= [eye(N), zeros(N), zeros(N), M];

kk= [zeros(N), -eye(N), k, D];

%% preparazione variabili

t=0:dt:Tf; t=t'; Nt=length(t);

Y= zeros(2*N,Nt); F= zeros(2*,Nt);

%% Integrazione nel Tempo (metodo di Eulero)

Y(1:N,1)= x0;

for it=1:Nt-1

Y(:,it+1)= Y(:,it)+dt * inv(MM) * (-kk*Y(:,it)+F(:,it));

end

disp(' Finito')

%% Disegno dei risultati

figure, plot(t,Y(1:N,:));

end

t(s)

  • 0
  • 5
  • 9
  • 11
  • 15
  • tf = 30

Φ(t)

  • 0
  • 5
  • 0
  • 5
  • 0
  • 0

tp = [0, 5, 9, 11, 15, tf]

Φp = [0, 5, 0, 5, 0, 0]

Funzione di Matlab utile:

  • Interp1(tp, Φp, t)
  • perché Φ dipende solo da t

Metodo di Eulero

dxdt = ucosα → xm+1 = xm + Δt ⋅ (νm ⋅ cos(σm))

dydt = usenα → ym+1 = ym + Δt ⋅ (νm ⋅ sen(σm))

dt = uTαρ → σm+1 = σm + Δt ⋅ (νm ⋅ tg(Φm) / L)

In Matlab:

  • sim(x)
  • cos(x) => x in rad
  • sinα(x)
  • cosd(x) => x in gradi

MATLAB:

  • Save "Veicolo"
  • Clear all;
  • V = 10; L = 4;
  • xo = 0; yo = 0; tel0 = 0;
  • Δt = 0.1; tf = 30;
Dettagli
Publisher
A.A. 2022-2023
29 pagine
SSD Scienze matematiche e informatiche MAT/06 Probabilità e statistica matematica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher vale.ma98 di informazioni apprese con la frequenza delle lezioni di Metodi numerici e statistici per l'ingegneria civile e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi Roma Tre o del prof Bellotti Giorgio.