POLITECHNIKA WROCŁAWSKA ZAKŁAD AUTOMATYKI |
Wydział: Elektryczny Rok studiów: Rok Akademicki : Termin: |
|
---|---|---|
Metody numeryczne | ||
Data wykonania ćwiczenia: | Nr ćwiczenia: 4 Temat: Aproksymacja metodą najmniejszych kwadratów |
|
Data oddania sprawozdania: |
||
Prowadzący: |
Cel ćwiczenia
Celem ćwiczenia było napisanie programu, którego celem było przybliżenie (aproksymacja) kilku zadanych wartości danej zniekształconej funkcji metodą najmniejszych kwadratów. Do tego celu wykorzystano środowisko programistyczne MatLab.
Przebieg ćwiczenia
W pierwszej części ćwiczenia należało napisać algorytm aproksymujący wartości zaszumionego sygnału metodą najmniejszych kwadratów ,z użyciem dwóch odrębnych modeli aproksymujących. Charakterystyki sygnałów należało porównać na jednym wykresie. W kolejnej części ćwiczenia do przybliżenia sygnału wykorzystano operacje wbudowaną w środowisko programistyczne o nazwie polyfit.
Zadana funkcja (zad 1.12):
f(t) = Asin(ωt+φ) + δ(t)
ω = 120π; φ = 0;
δ(t) = 0, 25A(0, 5 − rand(size(1)); A = 50
δ(t) − model zaklocen
Aproksymacja metodą najmniejszych kwadratów z użyciem dwóch modeli y1 i y2 | |
---|---|
Aproksymacja metodą polyfit |
Czasy wykonywania poszczególnych aproksymacji:
Metoda | Model y1 | Model y2 | Polyfit |
---|---|---|---|
Czas [s] | 0.0984 | 0.1024 | 0.5718 |
Aproksymacja metodą najmniejszych kwadratów nie jest „elastyczna”. Wraz ze zmianą okresu sygnału model pierwszy –y1 przestaje działać poprawnie i uzyskane wyniki nie są wiarygodne. W celu poprawy działania metody i jej uniwersalizacji ,napisano algorytm który automatycznie dostosowuje parametry modelu tak ,aby działał dla każdego sygnału i w większym zakresie czasowym. Model y2 oraz funkcja polyfit działają poprawnie i nie wymagają dodatkowych operacji.
Kod programu: | ilokr=2; %zadana ilosc okresow t=0:1/ft:ilokr*0.02; n=5; m=2*n; %ilosc wspolczynnikow funkcji y1=ones(m,21); for k=1: length(t); for j=1:m y1(j,k)=[(a*k)^(j-1)]; %model 1 end end h1=inv(y1*y1')*y1*f'; %wykresy funkcji ap1=h1'*y1; plot(t,f,'k .'); hold on plot(t,ap1,'b'); hold on plot(t,ap2,'m'); grid on legend('punkty funkcji','aproksymacja modelem y1','aproksymacja modelem y2') xlabel('czas t') ylabel('przebieg funkcji') |
---|---|
Uzyskany wynik: |
Wnioski
-obydwa modele działają bardzo poprawnie w z dużą dokładnością uzyskują przybliżony przebieg zadanej funkcji
-model drugi –y2 uzyskuje minimalnie lepszy przebieg niż model y1
-funkcja polyfit uzyskuje najlepszy rezultat, lecz jest najwolniejsza ze wszystkich użytych metod
-napisany algorytm spełnia swoje zadanie i pozwala obserwować przebieg funkcji w większym przedziale czasowym. Jednakże dalszy wzrost okresu funkcji powoduje ,że wszystkie prezentowane metody aproksymacji nie działają poprawnie i wykazują znaczne błędy.