Metody L Zadanie 2 Lab

  1. Treść zadania

„Aproksymacja średniokwadratowa” – Dla danego zbioru punktów:

x 0 1 2 3
y 0.98 0.35 0.19 0.15


wyznacz ręcznie współczynniki funkcji f(x)=1/(ax+b) stosując metodę aproksymacji średniokwadratowej i porównaj wyniki z wyliczeniami numerycznymi stosując odpowiednie skrypty Octava. Następnie wyznacz wartości norm E∞, E1, E2 dla tak wyznaczonej funkcji f(x). Wykreśl podane punkty {xi,y(xi)  }  oraz funkcję f(x) używając komendy plot. Wydruki wykresów (wraz z kodem) dołącz do sprawozdania.

  1. Wstęp teoretyczny

Aproksymacja dyskretna – funkcję dyskretną y=f(x) oraz jej zadane wartości można przedstawić w formie tabelarycznej.

Tabela 1. Zadane wartości funkcji dyskretnej

xi x0 x1 xn
yi = f(xi) y0 y1 yn

Kolejnym krokiem jest wybranie funkcji aproksymującej. Zwykle jest nią wielomian uogólniony, o postaci F(x) = a0φ0(x) + a1φ1(x) + … + amφm(x), w którym:

Jako funkcje bazowe stosuje się zwykle jednomiany (1, x1,x2…xm) lub funkcje trygonometryczne (1, cosx, sinx …)

Zagadnienie oznacza się jako iloczyn skalarny o postaci :

Znalezienie optymalnych współczynników ak, k = 0,1…,m sprowadza się finalnie do rozwiązania układu równań liniowych (układ normalnu). Rezultaty obliczeń układu o postaci poniżej, pozwala na wyznaczenie współczynników a0, a1, …, am.

  1. Kod z programu MatLAB

clc; clear all; close all; format compact;

xi=[0 1 2 3 ];

yi=[0.98 0.35 0.19 0.15];

%zadana funkcja f(x)=1/(ax+b) -> f(x)=1/(a0+a1*x)

%zastąpIĘ f(x) przez g(x)-> aproksymacja wielomianami

% g(x)= 1/f(x)= (a0+a1*x)

gi=1./yi;

%funkcja ask - ze strony zakładu.Użyję do aproksymacji średniokwadratowej

%dla funkcji liniowej f(x)= (a1*x + a0) dla zbioru N punktów

[a1,a0]=ask(xi,gi);

%wartości f(x) dla obliczonych współczyników a0,a1

yii=1./(a0+a1*xi);

disp(sprintf('---- Współczynniki funkcji f(x)1/(a0 + a1*x) ----'))

disp(sprintf('a0= %.4f a1= %.4f - wyliczone programem ',a0,a1))

disp(sprintf('a0= %.4f a1= %.4f - wyliczone "ręcznie" ',1.06,1.93))

disp(sprintf('---- ----- ---- ---- ---- ---- ---- ----'))

disp(sprintf(' i %.0f %.0f %.0f %.0f',0:1:3))

disp(sprintf(' x %.0f %.0f %.0f %.0f',0:1:3))

disp(sprintf(' y %.4f %.4f %.4f %.4f',yi))

disp(sprintf(' g(xi) %.4f %.4f %.4f %.4f',gi))

disp(sprintf(' f(xi) %.4f %.4f %.4f %.4f',yii))

%rysowanie na wykresie punktów {xi, y(xi)} oraz funkcji f(x)

a=min(xi);

b=max(xi);

x=linspace(a,b);

fx=1./(a0+a1*x);

%fxx=1./(1.06+1.93*x);

%plot(xi,yi,'rx',x,fx,'g',x,fxx,'b','markersize',15);

plot(xi,yi,'rx',x,fx,'b','markersize',15);

xlim([-0.1 3.1])

grid on

%wyznaczanie wartości norm

%Norma maksimum

A=abs(yii-yi)

Emax=max(A);

%Norma średnia

Suma=0;

for i=1:4

Suma=Suma+A(i);

end

E1=(1/4)*(Suma);

%Norma średniokwadratowa

Suma=0;

for i=1:4

Suma=Suma+A(i)^2;

end

E2=sqrt((1/4)*(Suma));

disp(sprintf(' Wartości norm:'))

disp(sprintf(' Emax - norma maksimum Emax=%.4f ',Emax))

disp(sprintf(' E1 - norma średnia E1=%.4f ',E1))

disp(sprintf(' E2 - norma średniokwadratowa E2=%.4f ',E2))

Powyższy program wygenerował wykres:

Wykres 1. Wynik obliczeń

Do obliczeń użyta została funkcja ask.m, zaczerpnięta z zakładowej strony wraz z listą zadań z działu aproksymacja średniokwadratowa. Ma ona poniższą postać:

function [A,B]=ask(X,Y)

%Input X - wspolrzedne x-owe punktow

% Y - wspolrzedne y-owe punktow

%Output A - wspolczynnik A w dopasowaniu A*x+B

% B - wspolczynnik B w dopasowaniu A*x+B

xmean=mean(X);

ymean=mean(Y);

sumx2=(X-xmean)*(X-xmean)';

sumxy=(Y-ymean)*(X-xmean)';

A=sumxy/sumx2;

B=ymean-A*xmean;

end

  1. Rezultaty obliczeń

---- Współczynniki funkcji f(x)1/(a0 + a1*x) ----

a0= 1.0501 a1= 1.9345 - wyliczone programem

a0= 1.0600 a1= 1.9300 - wyliczone "ręcznie"

---- ----- ---- ---- ---- ---- ---- ----

i 0 1 2 3

x 0 1 2 3

y 0.9800 0.3500 0.1900 0.1500

g(xi) 1.0204 2.8571 5.2632 6.6667

f(xi) 0.9523 0.3351 0.2033 0.1459

A =

0.0277 0.0149 0.0133 0.0041

Wartości norm:

Emax - norma maksimum Emax=0.0277

E1 - norma średnia E1=0.0150

E2 - norma średniokwadratowa E2=0.0172

W poniższej tabelach zestawione zostały wyniki obliczeń ręcznych oraz wykonanych przez program.

Tabela 2. Obliczone wartości współczynników

Wartości współczynników a0, a1
Ręcznie
MatLAB

Tabela 3. Obliczone wartości f(x) dla aproksymacji średniokwadratowej

Wartości f(x) dla aproksymacji średniokwadratowej
Z treści zadania
Ręcznie
MatLAB

Tabela 4. Obliczone wartości norm

Obliczone wartości norm
Ręcznie
MatLAB
  1. Wnioski


Wyszukiwarka

Podobne podstrony:
Metody L Zadanie 3 Lab gut
Metody L Zadanie 3 Lab
Metody L Zadanie 1 Lab
zadania z lab 3
Błędy w obliczeniach numerycznych - stare, Informatyka WEEIA 2010-2015, Semestr IV, Metody numeryczn
sprawko oczkowawezlowa, aaa, studia 22.10.2014, całe sttudia, III semestr, metody numeryczne lab
metody zadanie 3
metody materialy, LAB
zadanie lab oblicz rownolegle
zadanie lab-sieci kolejkowe
zadania lab C3
Metody zadania 5
Metody zadania 4
Metodyka zadania
sprawko 2 izy, Automatyka i robotyka air pwr, VI SEMESTR, Notatki.. z ASE, metody numeryczne, lab 2
metody numeryczne wartosc funkcji, Automatyka i Robotyka, Semestr IV, Metody Numeryczne, Lab, lab2
Sprawko Sebastiana i Stacha, Informatyka WEEIA 2010-2015, Semestr IV, Metody numeryczne, Lab 1 spraw
Sprawko moje pierwsze, Informatyka WEEIA 2010-2015, Semestr IV, Metody numeryczne, Lab 1 sprawko
Sprawko moje piąte, Informatyka WEEIA 2010-2015, Semestr IV, Metody numeryczne, Lab 5

więcej podobnych podstron