Laboratorium Modelowania i Symulacji
Ćwiczenie 3
Aproksymacja funkcji wielomianem stopnia N
Program ćwiczenia
Przed wykonaniem kolejnych punktów programu ćwiczenia należy dokładnie zapoznać się z załączonymi programami w języku Matlab,
Wybierając odpowiednie parametry wejściowe uruchomić program f1 obliczania wartości funkcji sin(x)/x, a następnie wywołać program aproksymacji aprmf.
Napisać program w języku Matlab wykorzystujący funkcje f1 i aprmf wykonujący następujące działania:
obliczanie M = 200 wartości funkcji sin(x)/x dla Pmax = 0.25, 0.5, 0.75,...,2.0,
obliczanie współczynników wielomianu aproksymującego przy zadanym błędzie aproksymacji eg = 0.00001,
wykreślania wykresu zależności stopnia wielomianu aproksymującego od maksymalnej wartości argumentu funkcji N = f(Pmax),
Uruchomić program f1 obliczania wartości funkcji sin(x)/x, a następnie wywołać program aproksymacji aprmf przyjmując następujące parametry: Pmax = 5, eg =0.00001,
Napisać program w języku Matlab obliczania M wartości funkcji sign(x). Zbadać zależność stopnia wielomianu aproksymującego od zadanej dokładności eg.
Napisać program w języku Matlab obliczania wartości indywidualnie wybranej funkcji, a następnie wykonać obliczenia według schematu z p. 1.3.
Sprawozdanie
Sprawozdanie powinno zawierać raport z przebiegu ćwiczenia z wykresami otrzymanych przebiegów sygnałów i parametrów oraz uwagami i wnioskami.
Programy wykorzystywane w ćwiczeniu
aprmf.m - aproksymacja funkcji wielomianem stopnia N
% eg - zadana wartość sumy kwadratów błędów
% z - współczynniki wielomianu
% N - stopień wielomianu
% x - wektor wartości zmiennej niezależnej
% y - wektor watości funkcji
function[N,z]=aprmf(x,y,eg);
ER=10; % Początkowa wartość sumy kwadratów błędów
close all; clear z; clear u; clear e; clear err;
figure(1);
plot(x,y,'.w'); % wyświetlenie wykresu funkcji
title('Funkcja y(x) i wielomian u(x)');
hold on % zamrożenie wykresu
i=0;
while ER>eg, % pętla
i=i+1;
z=polyfit(x,y,i-1); % obliczenie współczynników wielomianu
u(i,:)=polyval(z,x); % obliczenie wartości wielomianu
e(i,:)=y-u(i,:); % obliczenie błędu aproksymacji
err(i)=sumsqr(e(i,:))/length(x); % Suma kwadratów błędów
ER=err(i);
end;
N=i-1,
plot(x,u(i,:),'b-'); % wyświetlenie wykresu wielomianu
figure(2);
plot(x,e(i,:));
title('Błąd aproksymacji');
hold off
figure(3);
semilogy([0:i-1],err,'*y'); % wyświetlenie wykresu sumy kwadratów błędów
hold on;
semilogy([0:i-1],err,'c');
title('Suma kwadratów błędów'); hold off;
3.2. f1.m - funkcja sin(x)/x
% f1.m - funkcja sin(x)/x
% Pmax - maksymalna wartość zmiennej niezależnej
% M - liczba wartości funkcji
function[x,y]=f1(Pmax,M);
x=linspace(0,Pmax,M);
y=sin(10*x)./(10*x);
y(1)=1;
3.2. f2.m - funkcja sign(x)
% f2.m - funkcja sign(x)
% Pmax - maksymalna wartość zmiennej niezależnej
% M - liczba wartości funkcji
function[x,y]=f2(Pmax,M);
x=linspace(-Pmax,Pmax,M);
y=sign(x);
4. Literatura
Eykhoff P.: Identyfikacja w układach dynamicznych. PWN. Warszawa. 1980.
Mańczak K., Nahorski Z.: Komputerowa identyfikacja obiektów dynamicznych. PWN. Warszawa. 1983.
Niederliński A.: Systemy komputerowe automatyki przemysłowej. t. 2 . Zastosowania. WNT. Warszawa. 1985.
1