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