Equazioni differenziali: l'algoritmo di Eulero con il foglio elettronico
Si riporta la risposta di un circuito RC a diversi tipi di ingresso: a parità di algoritmo cambia soltanto il vettore dei campioni in ingresso
clear;
N=5000; RC=0.1; tmax=10*RC; dt=tmax/N;
t(1)=0; dvc1(1)=0; vc(1)=0; vi(1)=10;
for i=2:N
t(i)=t(i-1)+dt;
vi(i)= 10;
dvc1(i)= (vi(i-1)-vc(i-1))*dt/RC;
vc(i)=vc(i-1)+dvc1(i);
end;
plot(t,vc,t,vi)
set(gca(),"grid",[1 1]) // visualizzo la griglia
clear;
N=1000; RC=0.1; dt=RC*100/N;
vc(1)=0; t(1)=0;
for i=2:N
t(i)= t(i-1) + dt;
vi(i)=squarewave(t(i),20);
vc(i) = vc(i-1)+[(vi(i) - vc(i-1))/RC]*dt;
end;
set(gca(),"grid",[1 1]) // visualizzo la griglia
plot(t,vi,t,vc);
//Risposta all'onda rettangolare di un circuito RC
clear;
P=8; //periodi onda rettangolare
tmax=2*P*%pi;
N=200; //numero punti di rappresentazione
dt=tmax/N; //periodo di campionamento
RC=5;
E=5; //valore medio onda rettangolare
vi(1)=2*E;
vc(1)=0;
t(1)=0;
for i=2:N
t(i)=t(i-1)+dt;
vi(i)=E+E*squarewave(t(i),80)
dvc(i) = (vi(i-1)- vc(i-1))*dt/RC;
vc(i)=vc(i-1)+dvc(i);
end;
plot2d(t,[vc vi])
//Risposta alla sinusoide
clear;
N=5000; RC=1; tmax=10*RC; dt=tmax/N;
T=3*RC; w=2*%pi/T; VM=10;
t(1)=0; dvc1(1)=0; vc(1)=0; v(1)=10;
for i=2:N
t(i)=t(i-1)+dt;
v(i)=VM*sin(w*t(i));
dvc1(i)= (v(i-1)-vc(i-1))*dt/RC;
vc(i)=vc(i-1)+dvc1(i);
end;
plot(t,vc,t,v)
// Risposta all'onda quadra rappresentata dalla serie di Fourier
clear
P=4;
tmax=2*P*%pi;
N=200; //numero punti di rappresentazione
dt=tmax/N; //periodo di campionamento
VM=10; T=tmax/P; w=2*%pi/T; RC=5; //RC>>T //RC=0.4; RC<<T
v(1)=0; t(1)=0;// impongo la condizione iniziale
for i=2:N
t(i)=t(i-1)+dt;
v(i)=0;
for k=1:2:9
v(i)=v(i)+VM*4/%pi/k*sin(w*k*t(i));
end;
end;
vc(1)=0;
for i=2:N
dvc(i) = (v(i-1)- vc(i-1))*dt/RC;
vc(i)=vc(i-1)+dvc(i);
end;
plot2d(t,[v vc])