matlab 10

background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 1 z 8

Podstawy Informatyki

Programowanie w Matlab


Ć

wiczenia 10

Wybrane możliwości numeryczne pakietu Matlab – c.d.

Interpolacja

Zagadnienie interpolacji można sformułować następująco: na przedziale <a, b> danych jest
n+1

różnych punktów x0, x1, ..., xn, które nazywamy węzłami interpolacji, oraz wartości

pewnej funkcji y=f(x) w tych punktach f(x0)=y0, f(x1)=y1, ..., f(xn)=yn.

Zadaniem interpolacji jest wyznaczenie przybliżonych wartości funkcji w punktach nie
będących węzłami oraz oszacowanie błędu tych przybliżonych wartości.

W tym celu należy znaleźć funkcję F(x), zwaną funkcją interpolującą, która w węzłach
interpolacji przyjmuje takie same wartości co funkcja f(x).

Interpolacja jest w pewnym sensie zadaniem odwrotnym do tablicowania funkcji. Przy
tablicowaniu, mając analityczną postać funkcji budujemy tablicę wartości, przy interpolacji
natomiast, na podstawie tablicy wartości funkcji określamy jej postać analityczną.

Standardowe procedury Matlaba realizują interpolację za pomocą wielomianu pierwszego
stopnia (czyli funkcji kawałkami liniowej), wielomianu trzeciego stopnia oraz funkcji
sklejanych stopnia trzeciego.

Funkcje interpolujące
yi=interp1(x,y,xi,metoda)

Zwraca wektor yi, będący wartościami
funkcji jednej zmiennej y=f(x) w
punktach określonych wektorem xi;
węzły interpolacji określają wektory x i
y

; metoda to łańcuch znaków określający

metodę interpolującą

zi=interp2(x,y,z,xi,yi,metoda)

Zwraca macierz zi, zawierającą wartości
funkcji dwóch zmiennych z=f(x,y) w
punktach określonych wektorami xi i yi;
węzły interpolacji określają macierze
x

,y,z

vi=interp3(x,y,z,v,xi,yi,zi,metoda)

Interpolacja funkcją 3 zmiennych,
analogicznie jak interp2

vi=interpn(x1,x2,x3,...,v,y1,y2,y3,
...)

Interpolacja funkcją n zmiennych,

analogicznie jak interp2




background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 2 z 8

Metody interpolacji

 ‘linear’ – interpolacja liniowa,
 ‘spline’ – interpolacja funkcjami sklejanymi stopnia trzeciego,
 ‘cubic’ lub ‘pchip’ – interpolacja wielomianami stopnia trzeciego,
 ‘nearest’ – interpolacja wartością najbliższego sąsiada

Wszystkie metody interpolacji wymagają, aby ciąg x był monotoniczny.

Przykład 10.1
Napisz skrypt, w którym przetestujesz różne metody interpolacji funkcji jednej zmiennej.
Węzły interpolacji stanowią pary (x

i

, y

i

)

gdzie x

i

= 0, 1, 2, ..., 20, natomiast

y

i

= 2sin(x

i

)+sin(2x

i

)+sin(3x

i

+

π

)

%Przyklad10_1

%INTERPOLACJA skrypt testuje różne metody interpolacji 1-D

%

%----------interpolowana funkcja-----------------

f= inline(

'2.*sin(x)+sin(2.*x)+sin(3.*x +pi)'

);

%---------- węzły interpolacji-------------------

x=[0:20];

y=f(x);

%---------- metody interpolacji -----------------

x_int=[0:0.1:20];

y_int1=interp1(x,y,x_int,

'spline'

);

y_int2=interp1(x,y,x_int,

'pchip'

);

y_int3=interp1(x,y,x_int,

'nearest'

);

y_int4=interp1(x,y,x_int,

'linear'

);

%---------------- wykresy------------------------

subplot(4,1,1), plot(x,y,

'*'

,x_int,y_int1,

'-r'

)

hold

on

, fplot(f,[0,20])

title(

'Metoda funkcji sklejanych'

)

subplot(4,1,2),plot(x,y,

'*'

,x_int,y_int2,

'-r'

)

hold

on

, fplot(f,[0,20])

title(

'Metoda wielomianow trzeciego stopnia'

)

subplot(4,1,3),plot(x,y,

'*'

,x_int,y_int3,

'-r'

)

hold

on

, fplot(f,[0,20])

title(

'Metoda najblizszego sasiada'

)

subplot(4,1,4),plot(x,y,

'*'

,x_int,y_int4,

'-r'

)

hold

on

, fplot(f,[0,20])

title(

'Metoda funkcji liniowych'

)



Przykład 10.2
Przyjmując dane z tabeli znajdź wartości funkcji interpolującej w punktach -1; -0.8; -0.6 …. 3

x

-1

0

1

2

3

y

3

5

4

2

6




background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 3 z 8

%PRZYKLAD10_2

clear

all

% wyczyszczenie pamięci

%określenie węzłów interpolacji

x=[-1 0 1 2 3];

y=[3 5 4 2 6];

%określenie punktow xi w ktorych

% znajdujemy interpolowane wartości funkcji yi=f(xi);

xi=-1:0.2:3;

% interpolacja liniowa

yi_lin=interp1(x,y,xi,

'linear'

);

%interpolacja funkcjami sklejanymi

yi_spline=interp1(x,y,xi,

'spline'

);

% wykresy

plot(x,y,

'*'

, xi, yi_lin,

':'

,xi,yi_spline,

'--'

)

legend(

'wezly interpolacji'

,

'interpolacja liniowa'

,

'funkcja sklejana'

)

Interpolacja Lagrange’a
Interpolacja za pomocą wielomianu polega na znalezieniu wielomianu

)

( x

L

n

stopnia co

najwyżej n, by wartości tego wielomianu i funkcji interpolowanej w węzłach były sobie
równe czyli:

n

n

n

x

a

x

a

x

a

a

x

L

+

+

+

+

=

...

)

(

2

2

1

0


Zadanie interpolacji wielomianowej posiada jednoznaczne rozwiązanie, czyli istnieje tylko
jeden wielomian spełniający warunek. Wartości współczynników wielomianu wyliczane są ze
wzoru Lagrange’a:

Szukany wielomian ma postać:

)

)...(

)(

)...(

)(

(

)

)...(

)(

)...(

)(

(

)

(

1

1

1

0

1

1

1

0

0

n

j

j

j

j

j

j

j

n

j

j

n

j

j

n

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

y

x

L

=

+

+

=

przyjmując, że:

)

)...(

)(

(

)

(

1

0

n

n

x

x

x

x

x

x

x

=

ω


wzór Lagrange’a ma wtedy postać:

=

=

n

j

j

n

j

n

j

n

x

x

x

x

y

x

L

0

'

)

(

)

(

)

(

)

(

ω

ω

gdzie: y

j

= y(x

j

)

a ω

n

(x

j

)

jest wartością pochodnej wielomianu ω(x) w punkcie x

j

. Pozwala to

na napisanie procedury numerycznej do obliczania wartości wielomianu stopnia n w
dowolnym punkcie x leżącym w przedziale <a, b>.

Przykład 10.3
Napisz funkcję lagrange.m obliczającą wartość wielomianu interpolacyjnego Lagrange’a
stopnia n w dowolnym punkcie x (x może być wektorem). Argumentami funkcji powinny być
również n+1 wymiarowe wektory punktów węzłowych xj i yj.
Przetestuj napisaną funkcję interpolując punkty węzłowe leżące na krzywej będącej
wykresem funkcji y = 1/(1+25x

2

).

Przeprowadź obliczenia dla 3, 5 i 9 punktów leżących w

równych odległościach w przedziale <-1; 1>.

background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 4 z 8

%PRZYKLAD10_3 skrypt sprawdza interpolację wielomianami Lagrange'a

funk=inline(

'1./(1+25*x.^2)'

);

x=linspace(-1,1,201); y=funk(x);

ia=linspace(1,201,3);

ib=linspace(1,201,5);

ic=linspace(1,201,9);

xia=x(ia); yia=y(ia);

x1a=x; x1a(ia)=[];

ya=lagrange(xia,yia,x1a,2);

xib=x(ib); yib=y(ib);

xlb=x; xlb(ib)=[];

yb=lagrange(xib,yib,xlb,4);

xic=x(ic); yic=y(ic);

xlc=x; xlc(ic)=[];

yc=lagrange(xic,yic,xlc,8);

subplot(2,2,1)

fplot(funk,[-1,1])

ylim([-1.5 1.5]), title(

'funkcja interpolowana: 1/(1+25x^2)'

)

subplot(2,2,2)

fplot(funk,[-1,1]), hold

on

, plot(xia, yia,

'o'

), plot(x1a,ya,

'--'

)

ylim([-1.5 1.5]), title(

'funkcja interpolujaca: wielomian rzedu 2'

)

subplot(2,2,3)

fplot(funk,[-1,1]), hold

on

, plot(xib, yib,

'o'

), plot(xlb,yb,

'--'

)

ylim([-1.5 1.5]), title(

'funkcja interpolujaca: wielomian rzedu 4'

)

subplot(2,2,4)

fplot(funk,[-1,1]), hold

on

, plot(xic, yic,

'o'

), plot(xlc,yc,

'--'

)

ylim([-1.5 1.5]), title(

'funkcja interpolujaca: wielomian rzedu 8'

)

gdzie funkcja lagrange.m ma postać:

function

[y]=lagrange(xj,yj,x,n)

%LAGRANGE wzór interpolacyjny Lagrange'a

%LAGRANGE(xj,yj,x,n) oblicza wartości wielomianu interpolacyjnego stopnia n
%w dowolnym punkcie x dla węzłów xj i odpowiadających im wartości funkcji
%interpolowanej yj.

%np.: y=lagrange([1 2 3], [1 2 3],1.7,2) daje y=1.7

omega_w=1;s=0;

for

j=1:n+1

omega_w=omega_w.*(x-xj(j));

omega_p=1;

for

i=1:n+1

if

i~=j

omega_p=omega_p.*(xj(j)-xj(i));

end

end

s=s+yj(j)./(omega_p.*(x-xj(j)));

end

y=omega_w.*s;

background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 5 z 8

Aproksymacja

Aproksymacja jest innym zagadnieniem niż interpolacja, chociaż sformułowanie jest
podobne. Załóżmy, że w przedziale <a, b> danych jest n+1 punktów x

0

= a, x

1

, x

2

, ..., x

n

= b

oraz wartości pewnej funkcji y=f(x) w tych punktach. Poszukiwana jest funkcja F(x) dobrze
przybliżająca f(x) w przedziale <a, b>, z tym, że, w odróżnieniu od interpolacji, nie żąda się,
by w podanych punktach obydwie funkcje miały takie same wartości. Pojawia się zatem błąd
aproksymacji zdefiniowany jako różnica pomiędzy wartościami funkcji aproksymującej F i
funkcji aproksymowanej f w punktach x

i

, i=0, 1,..., n. Zadaniem metody numerycznej jest w

tym przypadku minimalizacja błędu aproksymacji. Aproksymacja jest nazywana również
dopasowywaniem krzywej do danego zbioru danych. Jeżeli punkty (x

i

, y

i

) pochodzą z badań

eksperymentalnych nad procesami fizycznymi, to zwykle ich wartości są obarczone błędem
pomiaru. Interpolacja, czyli wymóg znalezienia funkcji przechodzącej dokładnie przez te
punkty, w tym przypadku nie ma sensu.

Jedną z najpopularniejszych metod aproksymacji jest aproksymacja średniokwadratowa,
zwana także metodą najmniejszych kwadratów. Polega ona na minimalizacji błędu
aproksymacji zdefiniowanego jako suma kwadratów odchyłek we wszystkich punktach
obliczeniowych:

[

]

2

0

)

(

)

(

)

(

i

i

n

i

i

x

f

x

F

x

w

=

Do poprawy przybliżenia w wybranych węzłach może być wykorzystana funkcja wagowa
w(x

i

)

. Zwykle jednak jest ona tożsamościowo równa jedności, zatem wszystkie odchyłki są

jednakowo istotne.

Podstawową funkcją jaką oferuje Matlab do rozwiązania zadanie aproksymacji jest funkcja
polyfit

.

a = polyfit(x, y, n)

Znajduje współczynniki wielomianu n-tego
stopnia, który w sensie najmniejszych
kwadratów najlepiej pasuje do serii danych
pomiarowych (x, y)


Uwaga: do obliczania wartości wielomianu:

W(x,a)=a

1

x

n

+a

2

x

n-1

+...+a

n

x+a

n+1

,

o współczynnikach a w punkcie x można wykorzystać funkcję polyval(a, x), gdzie
a(1)

jest współczynnikiem stojącym przy x

n

, a(2)

jest współczynnikiem stojącym przy x

n-1

,

...., a(n+1) jest wyrazem wolnym.

Przykład 10.4
Przypuśćmy, że mamy następujące dane x

i

oraz y

i

i chcielibyśmy znaleźć najlepsze liniowe

dopasowanie do tych danych.

x

i

2

4

7

12

20

y

i

3

5

15

22

42


%PRZYKLAD10_4 skrypt dopasowuje krzywą do danych pomiarowych

%

x=[2 4 7 12 20];

y=[3 5 15 22 42];

figure, plot(x,y,

'o'

);

a=polyfit(x,y,1);

background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 6 z 8

xt=0:25;

yt=polyval(a,xt);

hold

on

, plot(xt,yt,

'r-'

)

legend(

'dane pomiarowe'

,

'dopasowanie'

);




Poza funkcją polyfit Matlab daje użytkownikowi narzędzie Basic Fitting,
uruchamiane z menu Tools w oknie graficznym, pozwalające na: automatyczne dopasowanie
krzywych sklejanych (spline) oraz wielomianowych (do dziesiątego stopnia), wyświetlenie
równania dopasowanej krzywej, obliczenie odchyleń w punktach danych oraz wartości błędu
aproksymacji (pierwiastek z sumy kwadratów odchyleń). Narzędzie to pozwala w łatwy
sposób porównać różne dopasowania i wybrać najlepsze z nich.

Przykład 10.5
Załóżmy, że obserwujemy pewien proces w czasie t∈<0, 10> , który powinien mieć charakter
sinusoildalny. Pomiary zawierają jednak pewien błąd losowy. Za pomocą narzędzia Basic
Fitting

dopasować najlepszą krzywą do tych danych.

%PRZYKLAD10_5 wykorzystanie narzędzia Basic Fitting

%

t=linspace(0,10,10);

%momenty pomiaru 0,1,2,...,10

y=sin(0.5*t)+0.1*randn(size(t));

%wygenerowane dane pomiar. z błędem losowym

plot(x,y,

'o'

);

%wykres surowych danych pomiarowych


Po narysowaniu surowych danych przejdź do okna graficznego i z menu Tools wybierz
polecenie Basic Fitting. Zaznacz kolejno opcje quadratic, cubic oraz 4th degree polynomial, a
następnie zaznacz opcje: Show equations, Plot residuals oraz Show norm of residuals.
Wynik tych poleceń pokazuje poniższy rysunek.


Jak widać, spośród tych trzech krzywych najlepsze dopasowanie, mierzone sumą kwadratów
odchyłek, wykazuje wielomian czwartego stopnia o podanym równaniu.

background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 7 z 8

Korzystając z funkcji polyfit, możemy dopasowywać do danych również inne krzywe, np.
wykładnicze:

y = ae

bx

czy potęgowe

y = qx

p

Wymaga to jednak wstępnego przekształcenia równań oraz danych. Najczęściej należy
przekształcić dane do skali logarytmicznej.
Zauważmy, że logarytmując stronami powyższe równania otrzymamy:

- dla pierwszego równania: ln(y) = ln(a)+bx czyli dostaniemy przekształconą krzywą:

y’ = a

0

+a

1

x

, gdzie y’ = ln(y), a

0

= ln(a)

oraz a

1

= b

.

- dla drugiego równania: ln(y) = ln(q)+pln(x) czyli dostaniemy przekształconą krzywą:

y’ = a

0

+a

1

x’

, gdzie y’ = ln(y), a

0

= ln(q)

, a

1

= p

oraz x’=ln(x)


Możemy zatem w obu przypadkach zastosować, do tak zmienionych danych, aproksymację
liniową za pomocą funkcji polyfit.

Przykład 10.6
W tabeli przedstawiono dane dotyczące wahań ciśnienia w czasie, odczytane z pompy
podciśnieniowej. Dopasuj krzywą P(t) = P

0

e

-t/T

i znajdź stałe P

0

oraz T.

t

i

0

0.5

1.0

5.0

10.0

20.0

P

i

760

625

528

85

14

0.16

Obliczając logarytm obu stron równania otrzymujemy:

ln(P) = ln(P

0

) – t/T

czyli P’ = a

1

t + a

0

, gdzie P’=ln(P), a

1

= -1/T

, oraz a

0

= ln(P

0

).

Po wyznaczeniu zatem współczynników a

0

i a

1

za pomocą funkcji polyfit, będziemy

mogli z łatwością obliczyć stałe P

0

oraz T.


%PRZYKLAD10_6 dopasowanie krzywej wykładniczej

t=[0 0.5 1 5 10 20];

P=[760 625 528 85 14 0.16];

% pierwotne dane

Pp=log(P);

% dane przekształcone

a=polyfit(t,Pp,1);

% dopasowanie liniowe do przekształconych danych

P0= exp(a(2));

%obliczenie stałej P0

T = -1/a(1);

%obliczenie stałej T

disp([

'stała P0 = '

,num2str(P0),

', stała T = '

,num2str(T)])

%narysowanie wykresu w skali liniowej

twyk=linspace(0,20,20);

% dane do wykresu

Pwyk=P0*exp(-twyk/T);

figure, subplot(2,1,1)

plot(t,P,

'o'

,twyk, Pwyk,

'r-'

), grid

on

xlabel(

'czas t (s)'

), ylabel(

'Cisnienie'

)

title(

'Wykres cisnienia w pompie'

)

%narysowanie wykresu w skali półlogarytmiczenj

Pwyk_log= exp(polyval(a,twyk));

%dane do wykresu półlogarytmicznego

subplot(2,1,2)

semilogy(t,P,

'o'

,twyk, Pwyk_log,

'r-'

), grid

on

xlabel(

'czas t (s)'

), ylabel(

'Cisnienie'

)

title(

'Wykres semilogarytmiczny cisnienia w pompie'

)

background image

Podstawy Informatyki 3 – ćwiczenia10

Strona 8 z 8

0

2

4

6

8

10

12

14

16

18

20

0

200

400

600

800

czas t (s)

C

is

n

ie

n

ie

Wykres cisnienia w pompie

0

2

4

6

8

10

12

14

16

18

20

10

-1

10

0

10

1

10

2

10

3

czas t (s)

C

is

n

ie

n

ie

Wykres semilogarytmiczny cisnienia w pompie

Zadania do ćwiczeń 10

10.1 Poniższa tabela przedstawia dane pomiaru wilgotności z roku 1962 dla stacji
monitoringowej Kasprowy Wierch. Znajdź ciągłą funkcję zmian wilgotności wykorzystując
znane metody interpolacji.

Miesiąc

I

II III IV V VI VII VIII IX X XI XII

wilgotność

75 90 89 82 92 90 88

79

78 68 91 77


10.2 Wykorzystując narzędzie Basic Fitting znajdź najlepiej dopasowaną krzywą do
danych pomiarowych dotyczących stężenia ozonu w atmosferze pochodzących z pewnej
stacji meteorologicznej. Badania prowadzone były przez miesiąc co godzinę, a następnie
obliczono średnie stężenie ozonu dla jednego dnia.

godz.

0

1

2

3

4

5

6

7

8

9

10

11

wartość

67

61

50

35

33

38

70

90

105 121 130 130

godz.

12

13

14

15

16

17

18

19

20

21

22

23

wartość

129 117 101

91

100 105

95

83

66

74

78

60

10.3 Wykorzystując funkcję polyfit znajdź wielomian drugiego stopnia, który najlepiej
aproksymuje funkcję y=sin(x) w przedziale <0, π>. Narysuj wykresy funkcji y=sin(x) oraz
aproksymującego ją wielomianu.

10.4 Znajdź parametry modelu Malthusa wzrostu populacji N(t)=N

0

e

rt

wiedząc, że w

chwilach t = 0, 2, 4, 6, 8, 10 wielkość populacji wynosiła odpowiednio: 100, 150, 220,
330, 500, 740


Wyszukiwarka

Podobne podstrony:
Sprawko Matlab 10 (1)
2. Matlab, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, metody numeryczne w technice, lab
Matlab co tam, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, metody numeryczne w technice,
matlab cw1, aaa, studia 22.10.2014, całe sttudia, III semestr, teoria obwodów cw
Zestaw 10, 4 semestr, matlab, testy
10 matlab
10 Metody otrzymywania zwierzat transgenicznychid 10950 ppt
10 dźwigniaid 10541 ppt
wyklad 10 MNE
Matlab cw1 2 zaoczni
Kosci, kregoslup 28[1][1][1] 10 06 dla studentow
10 budowa i rozwój OUN
10 Hist BNid 10866 ppt

więcej podobnych podstron