Documente Academic
Documente Profesional
Documente Cultură
Funcția fprintf Funcția se folosește pentru formatarea (aranjarea) datelor pe ecran sau pentru
tipărire. Sintaxa: fprintf ('format',lista de variabile). Format este un șir ce conține text dar și indicații
despre modul în care variabilele, din lista de variabile, se convertesc (formatul) și se poziționează
(afișează)
În tabelul de mai jos sunt date codurile de bază cu care se formatează variabilele din lista de
variabile.
Cod Formatul rezultat
%s format tip șir
%d format număr întreg
%f format în virgulă mobila (floating-point)
%e format în virgulă mobila (floating-point) notația științifică
%g format în cea mai compactă formă dintre %f sau %e
\n insert linie nouă
\t insert tab
Mai jos sunt date codurile pentru a preciza în format atât numărul total de caractere precum și
numărul de zecimale
% varainta 1 % varianta 2
>> y=sin(x);
L
E
>> fprintf('%8.3f\n',y) >> fprintf('y = %8.3f\n',y)
0.000 y = 0.000
0.707 y = 0.707
1.000 y = 1.000
0.707 y = 0.707
0.000 y = 0.000
-0.707 y = -0.707
-1.000 y = -1.000
-0.707 y = -0.707
- 0.00 y = -0.00
Calculăm valorile funcției sin(x) cu afișarea și a vectorului variabilei și a vectorului valorilor
calculate pentru funcție.
x = 0:0.2:1;
fprintf(' x sin(x)\n' )
for i = 1:length(x) fprintf('%4.1f %11.6f\n',x(i),sin(x(i)))
end
x sin(x) 0.000000
0.2 0.198669
0.4 0.389418
0.6 0.564642
0.8 0.717356
1.0 0.841471
Dacă o declaraţie (comandă) nu încape într-o linie de comandă, se vor utiliza trei puncte . . . urmate
de Return sau Enter pentru a indica faptul că expresia continuă pe linia următoare.
Spaţiile din jurul semnelor =, +, - sunt opţionale şi pot îmbunătăţi citirea liniilor.
Maximul numărului de caractere pe o singură linie este de 4096.
Instrucțiunea for
Comanda for este comanda cu care se execută repetat o operație pentru toate elementele unui vector.
n=4;
x=zeros(1,4);
for i=1:n x(i)=i^2;
end
x
x = 1 4 9 16
x cos(x)
0.0 1.000000
0.2 0.980067
0.4 0.921061
0.6 0.825336
0.8 0.696707
1.0 0.540302
m=4; n=5;
for i=1:m
for j=1:n
A(i,j)=1/(i+j-1);
end
end
A
A=
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
Instrucțiunea if
Bucla if este folosită pentru luarea unor decizii multiple, executarea lor fiind condiționată. Sunt trei
moduri de construcție a buclei if:
if..end
if..else..end
if..elseif..else .. end
1) Instrucțiunea if..end
Setul de instrucțiuni este executat numai dacă conditie logica este adevărată.
EXEMPLU Scriem un program, pentru a testa dacă un număr este par.
n = input('introduceti un numar intreg');
if (mod(n,2)==0)
fprintf('numarul introdus %d este par. \n' , n)
end
% am apelat functia (built-in) mod (help mod) pentru calculul
% restului impartirii la doi a numărului n
% salvăm fisierul si lansam în execuție
introduceti un numar intreg 18
numarul introdus 18 este par.
2) Instrucțiunea if..else..end
EXEMPLU Scriem un program, pentru a testa dacă un număr este par sau impar, în fisier script cu
conținutul de mai jos, salvată cu numele par_impar.m
% par_impar.m
EXEMPLU
Scriem un program care testează dacă un număr este par; dacă da, scrie numărul, dacă nu, adună 1
la număr și scrie numărul.
Este apelată fisierul (built-in) rem din biblioteca Matlab. Cu comanda rem se calculează restul
împarțirii a două numere întregi (>> help rem)
>> rem(5,2)
ans = 1
EXEMPLU
1) Scriem o m-fila tip funcție pentru a testa semnul unui număr real, signum.m.
function sgn = signum(a)
if a > 0
sgn = 1;
elseif a < 0
sgn = -1;
else
sgn = 0;
end
>> signum(6) % executăm funcția pentru a = 6
ans = 1 .
2) Calculul radicalului dintr-un număr real. Se testează condiția ca numărul să fie pozitiv, dacă da,
se calculează și se scrie radicalul, dacă condiția nu este satisfăcută, scrie că numărul este negativ sau
zero.
x=input('numar real:')
if x>0
fprintf('radical din %g este 8.4f\n', x,sqrt(x))
elseif x<0
disp('x este negativ;nu exista radical de ordin doi')
else
disp('x este egal cu zero')
end
Instrucțiunea while
Instrucțiunea while are o structură care combină bucla for cu instrucțiunea if.
Setul de instrucțiuni se execută repetat atâta timp cât condiția logica specificată rămîne adevărată -
true (valoarea este 1).
Instrucțiunea break
for n = 2:50;
if isprime(n)
fprintf('numerele prime gasite, %d\n',n)
end
end
>> numere_prime numerele prime gasite, 2
numerele prime gasite, 3
numerele prime gasite, 5
numerele prime gasite, 7
numerele prime gasite, 11
numerele prime gasite, 13
numerele prime gasite, 17
numerele prime gasite, 19
numerele prime gasite, 23
numerele prime gasite, 29
numerele prime gasite, 31
numerele prime gasite, 37
numerele prime gasite, 41
numerele prime gasite, 43
numerele prime gasite, 47
În varianta cu instrucțiunea break observăm ca instrucțiunea break întrerupe execuția buclei for
după prima evaluare.
for n=2:50;
if isprime(n)
fprintf('numerele prime gasite, %d\n',n)
break
end
end
>> prime_numere
numerele prime gasite, 2
Instrucțiunea continue
Instrucțiunea continue trece controlul la următoarea iterație din bucla for sau while, în care apare,
sărind peste orice alte comenzi din interiorul buclei.
EXEMPLU
Scriem o m-fila, multipli_3.m, care să calculeze și să afișeze multiplii lui 3 din primele 15 numere.
N=15;
i=1;
while i <= n
if rem(i,3)~=0
i=i+1;
continue
end
fprintf ('multiplul lui 3: %d\n',i)
i=i+1;
end
>> multipli_3
multiplul lui 3: 3
multiplul lui 3: 6
multiplul lui 3: 9
multiplul lui 3: 12
multiplul lui 3: 15
Scriem o m-fila sol_sistem.m pentru a găsi soluția sistemului algebric liniar:
5a + 2b +c = 12
a + 4b + 2c = 15
a + 2b + 5c = 20
% sol_sistem.m
a=0;
b=0;
c=0;
while 1
a1 = (12 - 2*b - c)/5;
b1 = (15 - a1 - 2*c)/4;
c1 = (20 - a1- 2*b1)/5;
if((a==a1)&&(b1==b)&&(c1==c))
break;
end;
a = a1;
b = b1;
c = c1;
end;
display (['Solutiile sunt a=' num2str(a) ', b = ' num2str(b)' ... ', c = ' num2str(c)']);
>> sol_sistem
Solutiile sunt a = 1, b = 2, c = 3
Polinoame în MATLAB
În Matlab polinoamele se reprezintă printr-un vector linie care conține coeficientii polinomului,
scrisi în ordine descrescatoare a puterilor lui . .
Polinomul se poate evalua și pentru un vector sau o matrice. Comanda polyval returneaza un
vector cu valorile corespunzatoare ale polinomului.
,
returneaza vectorul .
Pentru a obtine graficul unui polinom putem utiliza comanda polyval împreuna cu comanda
linspace.
Graficul polinomului
;
;
;
;
.
Operatii cu polinoame
;
;
% produsul polinoamelor
;
;
% împărțirea polinoamelor, în obținem coeficientii polinomului cât iar în coeficientii restului
.
Interpolarea este procesul prin care se estimeaza valori situate intre puncte de date cunoscute.
Interpolare polinomiala
Prin metoda directa coeficientii polinomului: se calculează în mod direct din sistemul
algebric liniar obținut prin impunerea conditiei ca polinomul sa treacă prin cele puncte de
date numerice , .
Se obtine un sistem cu ecuații pentru a determina cei coeficienti ai polinomului de
interpolare.
:
PROBLEMA Se dau datele din următorul tabel, aceste date s-au obținut experimental și reprezintă
masuratori ale distantei parcurse de un automobil în funcție de timp
0 0
10 142.04
15 224.18
20 317.35
23.5 402.97
Să se determine:
a) Distanța parcursa după secunde;
b) Viteza și accelerația după secunde.
Pentru determinarea distantei parcuse după secunde folosim metoda directa de interpolare și
aproximam distanța ca funcție de timp cu un polinom de gradul al doilea.
Din tabelul dat vom citi trei valori care sunt mai apropiate de valoarea , adică valorile
și .
Sistemul în acest caz devine:
Răspuns:
II) Varianta:
·
• se face împărțirea la dreapta
• se determina răspunsul
III Varianta
IV Varianta
-transpusa
Interpolare cu polinomul lui Newton
Exista o dreapta care trece prin cele doua puncte , adică un polinom de
gradul întâi care uneste cele doua puncte.
Construim polinomul lui Newton:
Prin cele doua puncte trece o dreapta a carei ecutie este
sau unde am notat
și
Panta dreptei este o diferența finita care aproximeaza derivata de ordinul întâi.
Ne propunem sa determinam soluția problemei anterioare cu polinomul lui Newton de ordin întâi.
Consideram dat tabelul cu datele masurate:
0 0
10 142.04
15 224.18
20 317.35
23.5 402.97
Avem
unde
Observație: Eroarea relativa intre cele doua metode (metoda directa cu polinom de gradul doi și
metoda lui Newton liniara este:
Aproximatia va fi mai buna cu cât intervalul dintre și este mai mic.
Pentru obținem:
cu
Pentru avem:
Reluam problema anterioara pentru a o rezolva utilizand polinomul lui Newton de ordinul doi:
0 0
10 142.04
15 224.18
20 317.35
23.5 402.97
Vom considera trei puncte date din tabel care sa incadreze valoarea , consideram
avem
Calculam și obținem:
Pentru se obtine .
, , ..., unde
....
function f = intpol_newton_dfin(x,f)
n = length(x);
for i = 2:n
f(i:n) = (f(i:n) - f(i-1:n-1)) ./ ...
(x(i:n) - x(1:n+1-i));
end
function p = intpol_newton_val(x,a,t)
n = length(x);
p = a(n) * ones(size(t));
for i = n-1:-1:1 p = p.*(t-x(i)) + a(i);
end
Codul pentru interpolare cu polinomul lui Newton de ordinul doi este:
x=[10,15,20];
f=[142.04,224.18,317.35];
>>x = [10,15,20];
>>f = [142.04,224.18,317.35];
>>a = intpol_newton_dfin(x,f) c = 142.0400 16.4280 0.2206
% calculăm distanţa parcursă la t=18 şi graficul polinomului
>> t=8:0.05:24 ;
>> p=intpol_newton_val(x,a,t);
>> plot(x,f,'o',t,p,'r-')
>> d=intpol_newton_val(x,a,18) d= 278.7584
•
• pentru deoarece are gradul și are radacinile
,
•
Forma Lagrange a polinomului de interpolare asociat nodurilor și valorilor
este:
sau
.
Interpolare liniara
sunt:
Reluam problema anterioara pentru a evalua distanța parcursa după cu polinomul lui
Lagrange de ordinul doi.
0 0
10 142.04
15 224.18
20 317.35
23.5 402.97
unde
Pentru rezulta .
Cod pentru interpolare cu polinomul lui Lagrange:
function yint=Lagrange_interp
% interpolare cu polinomul Lagrange
% x- vector variabile independente
% y-vector variabile dependente
% xd-valoarea la care calculaminterpolarea
% yint-valoarea obtinuta prin interpolare
;
Lagrange_interp
Avem următoarea simulare pentru soluția numerica și pentru graficele polinoamelor liniare și
patratice:
INTERPOLARE LINIARA:
punctele de date:
valorile :
valorile polinoamelor fundamentale:
polinomul
Valoarea polinomului de gradul I în este .
INTERPOLAREA PATRATICA:
punctele :
valorile :
valorile polinoamelor fundamentale
polinomul lui Lagrange de ordinul doi
.
Interpolare spline
folosind funcții spline liniare . Functiile spline liniare sunt polinoame de gradul I pe
subintervale de forma .
Funcţiile spline pătratice sau funcţiile spline de gradul II sunt date de polinoame de gradul doi:
.
.
.
1. Pentru a determina functia trebuie sa determinam cei coeficienti, avem nevoie de ecuații.
Aceste ecuații le obținem astfel:
Fiecare polinom de ordinul al doilea trece prin doua puncte consecutive
.
.
.
.
.
.
2 . Derivatele de ordinul ȋntâi ale celor două polinoame consecutive sunt continue ȋn punctele
interioare şi valorile lor sunt egale (funcţia spline este netedă). Astfel, pentru primul punct interior
obţinem o ecuaţie egalând cele două derivate calculate în .
Procedând la fel pentru toate cele puncte interioare vom obţine ecuații:
.
.
.
Am obţinut până acum ecuaţii. Mai avem nevoie de ȋncă o ecuaţie. Putem alege prima
funcţie spline liniară, astfel avem şi putem considera că aceasta este a -a ecuaţie. Sistemul
liniar de ecuaţii cu necunoscute se poate rezolva prin metode directe: regula lui Cramer,
metoda lui Gauss, soluția cu matricea inversa sau metode indirecte : metoda Jacobi sau Gauss-
Seidel.
Interpolarea cubică se realizează cu polinoame de gradul trei. Pentru cele puncte de date
numerice avem polinoame de gradul trei, deci vom avea coeficienţi necunoscuţi. Aceştia se
determină impunând condiţii de racordare ȋn punctele interioare atât pentru funcţiile spline cât şi
pentru derivalele lor de ordinul unu şi doi. Nu mai prezentăm aici aceste calcule. Pentru interpolarea
spline cubică se poate folosi funcţia Matlab spline ( >> help spline). Sintaxa: >> pp = spline(x,y)
disp('---------------------------------------')
disp(sprintf('\nINTERPOLAREA SPLINE PATRATICA:'));
n=numel(x);
A=zeros(3*(n-1));
for i=1:n-1
for j=0:1
for k=0:2
A(2*i-1+j+1,3*i-3+k+1)=x(i+j)^k;
end
end
end
for i=1:n-2
for j=0:1
for k=0:1
A(2*(n-1)+i+1,3*i-2+k+j*3+1)=((-1)^j)*(2*x(i+1))^k;
end
end
end
A(1,3)=1;
% Genereaza matricea Y
Y=zeros(3*(n-1),1);
for i=0:n-2
for j=0:1
Y(2*(i+1)+j)=y(i+j+1);
end
end
% Calculam matricea coeficientilor C
C=inv(A)*Y;
% Scriem ecuatiile splinurilor
disp(sprintf('\nEcuatiile functiilor spline patratice:'));
for i = 0:n-2
f=C(3*i+1)+C(3*i+2)*z+C(3*i+3)*z^2;
str1 = ['f(x)_',num2str(i+1),' = ',num2str(C(3*i+1))];
if C(3*i+2) > 0
str2 = [' + ',num2str(C(3*i+2)),'x'];
else
str2 = [' ',num2str(C(3*i+2)),'x'] ;
end if
C(3*i+3) > 0 str3 = [' + ',num2str(C(3*i+3)),'x^2'];
else
str3 = [' ',num2str(C(3*i+3)),'x^2'];
end
finalstr = [str1,str2,str3];
disp(finalstr);
end
% graficele
figure(2)
title('\bfInterpolarea spline patratica','FontSize',14)
xlabel('\bfx data');
ylabel('\bff(x)');
grid
for i=0:n-2
f=C(3*i+1)+C(3*i+2).*z+C(3*i+3).*z.^2;
if xd < x(i+2) & xd >= x(i+1)
fxqd=subs(f,z,xd);
end
X = x(i+1):0.1:x(i+2);
Y = subs(f,z,X);
plot(X,Y)
X = 0;
Y = 0;
hold on
end;
plot(x,y,'ro','MarkerSize',10','MarkerFaceColor',[1,0,0])
plot(xd,fxqd,'kx','Linewidth',2,'MarkerSize',12')
% Scrie f(x) pentru xd text(0.1*(max(x)-min(x)),0.8*(max(y)-min(y)),['f(',num2str(xd),') =
',num2str(fxqd)])
title('\bfInterpolarea spline patratica','FontSize',14);
xlabel('\bfx data')
ylabel('\bff(x)')
xlim([min(x) max(x)])
grid
hold off
disp('-------------------------------------');
disp(sprintf('\nINTERPOLAREA SPLINE CUBICA:'))
disp(sprintf('\nVom folosi functia Matlab "spline"'))
ymax=max(y);
ymin=min(y);
xx=min(x):(max(x)-min(x))/1000:max(x);
disp('-------------------------------------');
disp(sprintf('\nINTERPOLAREA SPLINE CUBICA:'))
disp(sprintf('\nVom folosi functia Matlab "spline"')) ymax=max(y);
ymin=min(y);
xx=min(x):(max(x)-min(x))/1000:max(x);
plot(xx,yy,'b') fxcd=spline(xx,yy,xd);
% Afiseaza f(x) la xd (in figura) text(0.1*(max(x)-min(x)),0.8*(max(y)-min(y)),['f(',num2str(xd),')
= ',num2str(fxcd)])
plot(xd,fxcd,'kx','Linewidth',2,'MarkerSize',12')
title('\bfInterpolarea spline cubica','FontSize',14)
xlabel('\bfx data')
ylabel('\bff(x)')
xlim([min(x) max(x)]) tot=(max(yy)-min(yy))*0.05;
ylim([min(yy)-tot max(yy)+tot])
hold off
disp(sprintf('\n **********Rezultate:********'))
disp(' Functii spline Functii spline Functii spline ')
disp('xd liniare patratice cubice')
disp('---------------------------------------------------------');
disp(sprintf('%g %g %g %g',xd, fxld, fxqd, fxcd))
valorile x:
x = 0 20 40 56 68 80 84 96 104 110
valorile y:
y = 0 20 20 38 80 80 100 100 125 125
Valoarea x la care calculam y, xd = 60
f(x)_1 = 0 + 1x 0x^2
f(x)_2 = -20 + 3x -0.05x^2
f(x)_3 = 272.5 -11.625x + 0.13281x^2
f(x)_4 = -78.6667 + 0.91667x + 0.020833x^2
f(x)_5 = -1620 + 46.25x -0.3125x^2
f(x)_6 = 14380 -353.75x + 2.1875x^2
f(x)_7 = -9140 + 206.25x -1.1458x^2
f(x)_8 = 20860 -418.75x + 2.1094x^2
f(x)_9 = -38008.3333 + 713.3333x -3.3333x^2
--------------------------------------------
-------------------------------------------------------------------------------
60 52 51.3333 54.5338
Interpolare cu funcţia Matlab interp1 Funcția interp1 (>> help interp1)interpolează date numerice
folosind funcţii 1-D (o singură variabilă)
Syntaxa:
yi = interp1(x,Y,xi)
yi = interp1(Y,xi)
yi = interp1(x,Y,xi,method)
yi = interp1(x,Y,xi,method,'extrap')
Descriere:
yi = interp1(x,Y,xi)
interpolează datele (x,Y) pentru a determina valorile yi ale funcţiei Y ȋn punctele xi, yi=Y(xi)
• x trebuie să fie vector
• Y poate să fie vector (trebuie să aibă aceeaşi dimensiune cu x, dim(x)=dim(Y))
• Y poate fi un tabel de forma [n,d1,d2,...,dk], unde n este lungimea lui x . Interpolarea,
determinarea valorilor funcţiei, se face pentru fiecare d1, d2..dk.
• xi poate fi un scalar, un vector sau un tabel multidimensional
• yi va avea aceeaşi dimensiune cu xi
yi = interp1(x,Y,xi,method)
Descriere:
yi = interp1(x,Y,xi,method,'extrap')
Comandă folosită pentru extrapolare, calcululează yi=Y(xi) ȋn puncte xi din afara valorilor date ȋn
vectorul x Comanda interpl interpolează ȋntre punctele date. Cu ea determinăm valorile funcţiei de
interpolare ȋn puncte intermediare
x_data = [0 75];
Y_data = [28 189];
xi = 48;
yi = interp1(x_data,Y_data,xi)
yi = 131.0400
Problema 2 Interpolarea datelor pentru deformațiile unui arc elastic versus forțe.
% Se dau datele care leaga alungirile unui arc de fortele care-l intind
x_forte = [0 6 11 17.5 23 31]; % fortele
Y_alung = [0 1 2 3 4 5]; % alungirile
plot(x_forte,Y_alung,'r o'); % grafic date numerice
xi = 20;
yi = interp1(x_forte,Y_alung,xi,'linear')
% extrapolare
x1i = 50;
y1i = interp1(x_forte,Y_alung,x1i,'linear','extrap')
hold on
plot(xi,yi,'bo'); % solutia interpolare liniara
plot(xi,y2i,'g*'); % solutia cu polyfit
plot(x1i,y1i,'ko');% valoarea extrapolata
% linia de extrapolare
xx1 = x_forte(end-1);
xx2 = 60;
yy1 = Y_alung(end-1);
yy2 = interp1(x_forte,Y_alung,60,'linear','extrap')
plot([xx1 xx2],[yy1 yy2],'k--');
xlabel('Forte');
ylabel('Alungirile');
legend('punctele de interpolare','val interpolata','valoarea interp best','valoarea extrapolata','linia best
fit','linia extrapolare')
Exemplu
Facem următorul test cu un automobil: la intervale de timp specificate accelerăm şi apoi menţinem
viteza constanta (!! nu decelerăm, nu ȋncetinim pe timpul testului). Masurătorile efectuate sunt date
ȋn tabelul de mai jos:
t 0 20 40 56 68 80 84 96 104 110
v 0 20 20 38 80 80 100 100 125 125
Vom folosi pentru interpolare funcţia Matlab interp1 cu cele trei opţiuni pentru 'method'. Programul
Matlab este salvat in fila test_drive_interp1.
test_drive_interp1.m
% exemplu interpolare test drive
% interpolare spline
vs=interp1(t,v,tt,'spline');
figure(2);
plot(t,v,'o',tt,vs)
title('interpolare spline')
vh=interp1(t,v,tt,'pchip');
figure(3);
plot(t,v,'o',tt,vh)
title('interpolare polinoame cubice Hermite')
O alternativă pentru aproximarea funcției pentru un set de date numerice discrete este obținută cu
funcțiile Matlab polyfit și polyval. Sintaxa:
CONCLUZII:
Am studiat problema aproximării unei funcții folosind polinoame sau polinoame pe porțiuni.
Funcția poate fi dată printr-o ecuație sau prin valorile ei într-un set de noduri xi yi , i =0,1,2...n .
Problema de interpolare constă în determinarea aproximativă a funcției care trece prin aceste
puncte. Polinomul de interpolare este polinomul de gradul cel mai mic care satisface pentru, o
funcție dată f , .
Cu toate că acest polinom de interpolare este unic el poate lua forme diferite: polinomul Lagrange,
polinomul Newton sau polinomul Hermite. Polinomul lui Lagrange este util, când este mic,
pentru deducerea formulelor de aproximare a derivatelor și a intrgralelor. Polinomul lui Newton
produce o eroare de calcul mai mică și este foarte util la rezolvarea ecuațiilor diferențiale .
Funcția de interpolare Matlab interp1 poate fi folosită pentru interpolarea unui set de date discrete
prin interpolare liniară, interpolare cubică sau interpolare cubică cu funcții spline. Funcția Matlab
polyfit bazată pe aproximarea prin metoda celor mai mici pătrate, poate fi utilizată pentru a produce
o funcție de interpolare de grad cel mult și care trece prin cele puncte
Curba spline cubica este o curba neteda, defnita de un set de polinoame de gradul trei. Curba dintre
fiecare pereche de puncte este un polinom de gradul trei, astfel încât sa conduca la tranzitii netede
de la un polinom de gradul trei la altul. De exemplu, șase puncte vor fi conectate cu cinci curbe
diferite de gradul trei ceea ce conduce la o funcție neteda intre cele șase puncte. Curba de
interpolare spline cubica se calculează cu functia spline .
rezultatul obținut:
Problema: 1) Să se reprezinte grafic o interpolare liniara și spline cubica prin șase puncte (datele de
mai sus).
2) Fiind date 10 perechi de puncte în planul xOy, să se traseze graficul rezultat prin interpolarea
spline pe o rețea de 4 ori mai fina:
Functia interpoleaza datele cu o singura variabila utilizand metoda FFT (Fast Fourier
Transform); se apeleaza cu sintaxa:
care returneaza un vector de lungime obținut din vectorul . Numărul trebuie să fie mai mare
decât numărul de elemente al vectorului , iar rezultatul are periodicitate circulara data de utilizarea
transformatei Fourier.
;
;
;
;
se obtine rezultatul:
Diferența maxima intre valorile interpolate și cele reale este egala cu ordinul de mărime al celui mai
mic numar reprezentabil în calculator (eroarea de trunchiere).
• Interpolare multipla
Functia interpoleaza datele după o lege liniara, cubica sau spline cubica și se apeleaza cu
sintaxa:
- interpolare liniara
- interpolare spline cubica
- interpolare cubica
Toate legile de interpolare cer ca să fie ordonat monoton, în plus interpolarea cubica cere ca
punctele pe axa ox să fie egal distantate.
x -2 -1 0 1 2
y 6 2 3 1 7
;
;
se obțin rezultatele:
Se realizeaza cu functia:
mesh
(pentru comparație rezultatul interpolarii a fost deplasat pe axa cu fata de reprezentarea
neinterpolata)