Passa ai contenuti principali

Matlab \\ Equazioni concatenate di Allievi

Programma per il calcolo delle sovrappressioni del colpo d'ariete. Questo codice prevede l'inserimento manuale dei dati all avvio del programma. Per creare il vettore dei tempi,come indicato nel programma, è consigliabile usare la funzione "linspace(inizio, fine, lunghezza del vettore)".

%h0=carico piezometrico iniziale
%n0=valore della funzione di variazione sezione all otturatore al tempo 0
%a=celerità
%t_off=tempo della manovra di chiusura
%vettore_t=vettore contenenti i tempi a intervallo costante

function[]=allievi()
disp('definire il carico piezometrico iniziale h0(metri)')
h0=input('h0=');
disp('definire la funzione apertura otturatore n0(inizio manovra)')
n0=input('n0=');
disp('definire la celerità di propagazione')
a=input('a=');
disp('definire tempo della manovra di chiusura(secondi)')
t_off=input('t_off=');
disp('vettore dei tempi [funzione "linspace(inizio,fine,numero valori)"]')
vettore_t=input('vettore_t=');
U=2*9.8*sqrt(h0);
dim=length(vettore_t);
n_iter=dim-1;
Al=a*U/(2*9.8*h0);
periodo=vettore_t(2)-vettore_t(1);
%il ciclo serve a definire un limite per il ciclo IF nel FOR più avanti
for i=1:dim
    pass1=(t_off-vettore_t(i));
    if pass1<periodo
       n_lim=vettore_t(i);
       break
    end
end
%disp(n_lim);
lim=1-(n_lim)/t_off;
%disp(lim);
n=1-vettore_t(1)/t_off;
z_old=(-2*Al*n+sqrt(((2*Al*n)^2)+8*Al*n0+4))/(2);
z_res=zeros(n_iter,1);
z_res(1)=z_old;
n0=n;
    for flag=1:n_iter
    n=1-vettore_t(flag+1)/t_off;
    z=(-2*Al*n+sqrt(((2*Al*n)^2)-4*(z_old^2)+8+8*Al*z_old*n0))/(2);
    z_res(flag+1)=z;
    z_old=z;
    n0=n;
    if n<lim
        break
    end
    end
flag0=flag;
for flag=flag0:n_iter
%     n=0;
%     n0=0;
    z=sqrt(2-z_old^2);
    z_res(flag+1)=z;
    z_old=z;
end
z_res=h0*(z_res).^2;
z_res=real(z_res);
vettore_t=vettore_t';
tabella=[vettore_t,z_res];
disp(tabella);

Commenti

Post popolari in questo blog

Matlab \\ Metodo Montecarlo

Il codice richiede di inserire soltanto il numero dei valori in cui si desidera dividere l'intervallo e la funzione. Maggiori saranno gli intervalli del dominio e più preciso sarà il calcolo dell' integrale definito.E' comunque dimostrato che il metodo Montecarlo ha una convergenza molto lenta e richiede, in generale, un numero elevato di intervalli per ottenere una stima precisa. %calcolo di integrali di funzioni in X=[0,1] function[]=metodo_montecarlo() disp('inserire numero di elementi del dominio') t=input('t='); X=linspace(0,1,t); disp('definire la funzione f(X),(x maiuscola)') f=input('f(X)='); y=f'; s=length(X); E=sum(y(:))/s; disp('integrale definito della funzione in X=[0,1],E='); disp(E);

Analisi matematica \\ Teorema degli zeri

Enunciato: Sia una funzione f continua in [a,b] e sia f(a)f(b)<0 allora esiste un punto c∈ (a,b) tale che f(c)=0 . Graficamente si comprende meglio il significato del problema, cioè l'esistenza di almeno un punto di intersezione di f con l'asse delle x se la funzione passa per due punti opposti rispetto all'asse. Dimostrazione: La dimostrazione vale per la funzione raffigurata nell'immagine (crescente con f(a) < f(b) ) ma può essere estesa a qualsiasi caso che rispetti le condizioni del teorema. Utilizzando il metodo di bisezione si divide l'intervallo [a,b] scrivendo il punto medio c 1 =(b-a)/2 . Se con il punto appena trovato vale la relazione f(c 1 )=0 il teorema è dimostrato. Altrimenti bisogna reiterare il processo prendendo ora il punto c 1 e sostituirlo con la scrittura a 1 se f(c 1 ) <0 o b 1 se f(c 1 )>0 (questa è una semplice formalità per poter reiterare il processo similmente al primo passaggio...