20.07.2013 Views

Software matematic

Software matematic

Software matematic

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4.2. Interpolarea funct¸iilor de mai multe variabile în MATLAB 113<br />

6<br />

4<br />

2<br />

0<br />

−2<br />

−4<br />

−6<br />

3<br />

2<br />

1<br />

0<br />

−1<br />

−2<br />

−3<br />

−3<br />

Figura 4.5: Graficul lui peaks pe o grilă grosieră<br />

Graficul apare în figura 4.5. Calculăm apoi interpolant¸ii pe o grilă mai fină s¸i îi reprezentăm:<br />

−2<br />

[XI,YI]=meshgrid(-3:0.25:3); ZI1=interp2(X,Y,Z,XI,YI,’nearest’);<br />

ZI2=interp2(X,Y,Z,XI,YI,’linear’);<br />

ZI3=interp2(X,Y,Z,XI,YI,’cubic’);<br />

ZI4=interp2(X,Y,Z,XI,YI,’spline’); subplot(2,2,1), surf(XI,YI,ZI1)<br />

title(’nearest’) subplot(2,2,2), surf(XI,YI,ZI2) title(’linear’)<br />

subplot(2,2,3), surf(XI,YI,ZI3) title(’cubic’) subplot(2,2,4),<br />

surf(XI,YI,ZI4) title(’spline’)<br />

Graficele lor apar în figura 4.6. Dacă înlocuim peste tot surf cu contour obt¸inem<br />

graficele din figura 4.7.<br />

Funct¸ia griddata are aceeas¸i sintaxă ca s¸i interp2. Datele de intrare sunt<br />

nodurile x s¸i y, care nu mai trebuie să fie monotone s¸i valorile z în noduri. Prin interpolare<br />

se calculează valorile ZI corespunzătoare nodurilor XI s¸i YI, care de obicei<br />

sunt obt¸inute cu meshgrid. Argumentul metoda poate avea valorile ’linear’,<br />

’cubic’, nearest s¸i ’v4’, ultima semnificând o metodă de interpolare specifică<br />

MATLAB 4. Toate metodele exceptând v4 se bazează pe triangulat¸ie Delaunay (o<br />

triangulat¸ie a unei mult¸imi de puncte care maximizează unghiul minim). Metoda este<br />

utilă pentru a interpola valori pe o suprafat¸ă. Exemplul următor interpolează puncte<br />

generate aleator, situate pe suprafat¸a z = sin(x2 +y 2 )<br />

x 2 +y 2 . Pentru a nu avea probleme în<br />

origine s-a adăugat un eps la numitor.<br />

x=rand(100,1)*16-8; y=rand(100,1)*16-8; R=sqrt(x.ˆ2+y.ˆ2)+eps;<br />

z=sin(R)./R; xp=-8:0.5:8; [XI,YI]=meshgrid(xp,xp);<br />

ZI=griddata(x,y,z,XI,YI); mesh(XI,YI,ZI); hold on<br />

plot3(x,y,z,’ko’); hold off<br />

Rezultatul apare în figura 4.8, în care punctele generate aleator sunt marcate prin<br />

cercuri, iar interpolantul a fost reprezentat cu mesh.<br />

−1<br />

0<br />

1<br />

2<br />

3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!