Cześć,
Sprawdziłby mi ktoś czy dobrze to mam zrobione? Z góry dziękuję. :)

Program:

  • dokonuje interpolacji funkcją sklejania 1-go rzędu funkcji f(x) = sin(x) / x na równomiernej siatce węzłów o danej liczbie przedziałów n w przedziale [a,b]
  • wykonuje wykresy funkcji f(x) oraz funkcji interpolującej dla 4 wartości n oraz wyznacza wykresy norm ||||1 oraz ||||2 dla błędu interpolacji wykorzystując metodę trapezów.

function z = teoaprox5(a,b,n)

if a > b
    c=b;
    b=a;
    a=c;
end

% Wyznaczanie elementów po podziale na n części
delta=(b-a)/n;
X=a:delta:b;
aux=size(X);

% Tworzenie tablicy używanej przy wykresie
X2=a:0.01:b;
% Eliminacja Y(i)==0
for i=1:1:aux(2);
    if X(i)==0;
        X(i)=0.0001;
    end
end

aux=size(X2);

for i=1:1:aux(2);
    if X2(i)==0;
        X2(i)=0.0001;
    end
end

% Obliczenie funkcji nie interpolowanej
Y2=sin(X2)./X2;

% Tworzenie danych do interpolacji oraz interpolacja
Y=sin(X)./X;

aux=size(X);
FIT = polyfit(X,Y,aux(2)-1);
Yint= polyval(FIT,X2);

% Rysowanie wykresów
plot(X2,Yint,'g.',X2,Y2,'r.');
xlabel('x'); ylabel('y');title('Wykres funkcji y=f(x) oraz funkcji interpolującej');
axis([a b -0.5 1.1]); legend('funkcja interpolująca','funkcja interpolowana');

% Liczenie norm
norma1 = trapz(Y);
norma2 = sqrt(trapz(Y.*Y));

disp('norma1: ');disp(norma1);
disp('norma2: ');disp(norma2);