Corso di Modelli numerici per i circuiti AA 2007-2008

Transcript

Corso di Modelli numerici per i circuiti AA 2007-2008
Corso di Modelli numerici per i circuiti
A.A. 2007-2008
Prof. Massimiliano de Magistris
Esercitazione n°1 (29 aprile 2008)
Introduzione a MATLAB®
Il manuale introduttivo di Matlab è disponibile sul sito all’indirizzo:
www.elettrotecnica.unina.it/files/demagistris/didattica/TdC/Matlab_getstart.pdf
Si consiglia di fare una esplorazione dei demos di Matlab (command window, >> demos)
Per ulteriori approfondimenti sull’uso di MATLAB ci si può riferire al testo: Cavallo, R.
Setola, F. Vasca, “La nuova guida MATLAB, Simulink e Control Toolbox”, Liguori, 2002.
Esempio 1: vettori, funzioni e plot
Si generi un vettore equi-spaziato di punti x (funzione “linspace”) , un vettore y=f(x) (con
f una qualsiasi funzione elementare) e si faccia il grafico di y in funzione di x (funzione
“plot”). Considerata una funzione f2(x) si mettano entrambe le curve sullo stesso grafico
in funzione di x. Successivamente si faccia il grafico di una curva in funzione dell’altra.
Esempio 2: analisi in frequenza
Si consideri un circuito risonante RLC serie e se ne traccino le curve universali di risonanza
(modulo e fase) al variare del fattore di merito.
Esempio 3: matrici e loro manipolazione
Si generi manualmente una generica matrice M 3x3 (sintassi della “,” e “;”).
Si generi una matrice A “random” 4x6 (funzione “rand(n,m)”)
Si calcoli la matrice B trasposta di A (funzione ‘)
Si estragga una sottomatrice C 4x4 dalla matrice A
Si calcoli la matrice D inversa di C (funzione “inv”) e si verifichi che il loro prodotto
fornisce la matrice identità I.
Si costruisca la matrice E concatenazione di C e D.
Esempio 4: integrazione di equazioni differenziali ordinarie (funzioni ODE)
Considerato un circuito del primo ordine (es: RC) in evoluzione libera si utilizzi l’algoritmo
di integrazione temporale ODE23 di Matlab per analizzarne la dinamica. Si paragoni la
soluzione ottenuta con ODE con quella analitica facendo il grafico delle curve di errore
assoluto e relativo
Esempio 5: caricamento e salvataggio dati da/su file
Si salvino i risultati ottenuti in una delle precedenti elaborazioni in un file (comando
“save”). Si carichi un set di dati precedentemente salvati (comando “load”), e dopo una
qualsiasi rielaborazione lo si salvi nuovamente.
Soluzioni esercitazione n°1
% Program Plot_intro
clear;
close all;
x=linspace(0,2*pi,100)
y=sin(x)
disp('dimensioni delle matrici x ed y con la funzione size')
dim_x=size(x)
dim_y=size(y)
pause
disp('===========================================================')
disp('plot di y in funzione dei campioni')
plot(y)
pause
disp('===========================================================')
disp('plot di y1 ed y2 in funzione di x (da 0 a 2pi)')
y1=sin(x);
y2=cos(x);
figure
plot(x,y1,x,y2)
xlabel('x')
ylabel('y')
legend('y1=sin(x)','y2=cos(x)')
pause
disp('===========================================================')
disp('plot di y1 in funzione di y2')
y1=sin(x+pi/4);
y2=2*cos(x);
figure
plot(y1,y2)
xlabel('y1')
ylabel('y2')
% Program Matrix_Intro
clear;
close all;
disp('===========================================================')
disp('generazione manuale di una generica matrice M (sintassi della , e ; )')
M=[1,2,3;4,5,6;7,8,9]
pause
disp('===========================================================')
disp('generazione di una matrice A random 4x6 (funzione rand(n,m))')
A=rand(4,6)
pause
disp('===========================================================')
disp('operazione di trasposizione B=A_trasp')
B=A'
pause
disp('===========================================================')
disp('estrazione di una sottomatrice 4x4 dalla matrice A')
C=A(:,1:4)
pause
disp('===========================================================')
disp('inversa della matrice C')
D=inv(C)
pause
disp('===========================================================')
disp('prodotto di C*D')
F=D*C
pause
disp('===========================================================')
disp('concatenazione delle matrici C e D')
E=[C,D]
Pause
% Program Resonance
% tracciamento della curva di risonanza
% per un circuito RLC serie usando Matlab
clear;
clf;
close all;
R=1;
L=1e-2;
C=1e-4;
E=1;
om_zero=1/sqrt(L*C)
Q=om_zero*L/R
om=logspace(2,4,1000)';
XL=L*om;
XC=1/C./om;
X=XL-XC;
I=E./(R+X.*i);
for j=1:4
Q(j)=om_zero*L/(R*2^-j)
X1=om/om_zero
X2=om_zero./om
Xn=X1-X2;
Y(:,j)=1./(1+i*Q(j)*Xn);
end
semilogx(om,abs(I))
xlabel('omega');
ylabel('modulo di I');
title ('curva di risonanza (modulo)')
figure
semilogx(om,angle(I))
xlabel('omega');
ylabel('modulo di I');
title ('curva di risonanza (fase)')
om2=om/om_zero;
figure
semilogx(om2,abs(Y(:,1)),om2,abs(Y(:,2)),om2,abs(Y(:,3)),om2,abs(Y(:,4)))
xlabel('omega');
ylabel('modulo');
title ('curve universali di risonanza')
LEGEND('Q1','Q2','Q3','Q4')
% Program TimeIntegration
% analisi di un semplice circuito RC mediante
% soluzione numerica con algoritmo ODE di Matlab
% titolo:Integrazione temporale
% htmlfl:./testo.html#Esempio3
% bitmap:immagine2.bmp
clear;
close all;
global R C
R=1;
C=1;
Vzero=1;
% [Ohm]
% [Farad]
% [V]
FinalTime= 10;
% [s]
[t,x]=ode23('statoRC',[0 FinalTime],Vzero);
plot(t,x)
xlabel('time [s]');
title ('Circuit dynamics')
pause
figure
x2=Vzero*exp(-t/(R*C));
err=x-x2;
plot(t,abs(err)*100)
xlabel('time [s]');
ylabel('Absolute error [%]');
title ('Absolute error: numerical vs. analytical')
pause
figure
rel_err=err./x2;
plot(t,abs(rel_err))
xlabel('time [s]');
ylabel('Relative error');
title ('Relative error: numerical vs. analytical')
function xpunto=statoRC(t,x)
global R C
xpunto=-x/(R*C);
% program Load,Plot & Save
% dimostrativo di come leggere, plottare e salvare dati
% prodotti con PSpice
clear
close all
load data.txt
whos
t=data(:,1);
x1=data(:,2);
x2=data(:,3);
clear data
whos
plot(t,x1,t,x2)
save data