Matlab Przykłady prostych metod obliczeniowych

24
Matlab Przykłady prostych metod obliczeniowych Wykład 3 MOiPP 1

description

MOiPP. Wykład 3. Matlab Przykłady prostych metod obliczeniowych. Zliczanie warunkowe w tablicy 1-wymiarowej. Ile w tablicy jest elementów dodatnich?. M=-3:0.1:2 ile=0; %koniecznie inicjujemy zmienną! N=length (M) % funkcja length zwraca liczbę kolumn tablicy for i =1:N - PowerPoint PPT Presentation

Transcript of Matlab Przykłady prostych metod obliczeniowych

Page 1: Matlab Przykłady prostych metod obliczeniowych

1

Matlab

• Przykłady prostych metod obliczeniowych

Wykład 3

MOiPP

Page 2: Matlab Przykłady prostych metod obliczeniowych

2

M=-3:0.1:2ile=0; %koniecznie inicjujemy zmienną!N=length(M) % funkcja length zwraca liczbę kolumn tablicyfor i=1:N % pętla

if M(i)>0 % test warunku ile=ile+1;end

end;disp(ile)

Zliczanie warunkowe w tablicy 1-wymiarowej

Ile w tablicy jest elementów dodatnich?

Page 3: Matlab Przykłady prostych metod obliczeniowych

3

clear; clc

a=rand(5,5)-0.5 %elementy dodatnie i ujemne

iledod= 0; %inicjujemy zmienną

for i= 1:1:5,

for j = 1:1:5,

if a(i , j)>0

iledod=iledod+1;

end

end

end

disp(iledod)

Zliczanie elementów dodatnich w tablicy dwuwymiarowej

3

Page 4: Matlab Przykłady prostych metod obliczeniowych

4

M=-3:0.1:2suma_d=0;N=length(M)for i=1:N

if M(i)>0 suma_d=suma_d+M(i);end

end;disp(suma_d)

Sumowanie warunkowe (elementów dodatnich) w tablicy 1-wymiarowej

Page 5: Matlab Przykłady prostych metod obliczeniowych

5

clear; clca=rand(5,5)-0.5 suma_d= 0;suma_u=0;for i= 1:1:5, for j = 1:1:5, if a(i , j)>0 suma_d=suma_d+a(i,j); else

suma_u=suma_u+a(i,j); end endenddisp('suma dodatnich:'),disp(suma_d)disp('suma ujemnych:'), disp(suma_u)

Sumowanie warunkowe elementów tablicy 2-wymiarowej

Page 6: Matlab Przykłady prostych metod obliczeniowych

6

Obliczenia kinematyczneRuch jednostajnie przyspieszony(opóźniony)

v=v0+a*(t-t0)

Page 7: Matlab Przykłady prostych metod obliczeniowych

7

Ruch jednostajnie przyspieszony

t0=0, v0=0, tk=5,vk=20%tworzymy dwa wektoryt=[t0 tk]v=[v0 vk]plot(t, v, 'k')xlabel('t'), ylabel('v')

Wykres v(t) – prędkość jest funkcją liniową, więc wystarczą dwa punkty dla wykresu

0 1 2 3 4 50

2

4

6

8

10

12

14

16

18

20

t

v

Page 8: Matlab Przykłady prostych metod obliczeniowych

8

t0=0, v0=0, tk=5,vk=20a=(vk-v0)/(tk-t0)% "gęsta" oś czasut=t0 : 0.1 : tks=v0*t+a*t.^2/2plot(t, s,'r')hold on %zatrzymanie wykresuv=v0+a*(t-t0)plot(t, v, 'k')title('s(t)-czerwony v(t) - czarny')

Ruch jednostajnie przyspieszony

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

5

10

15

20

25

30

35

40

45

50s(t)-czerwony v(t) - czarny

s(t) to parabola, więc potrzebujemy więcej punktów

Page 9: Matlab Przykłady prostych metod obliczeniowych

9

t0=0, v0=20, tk=4, vk=0a=(vk-v0)/(tk-t0)t=t0 : 0.1 : tk;s=v0*t+a*t.^2/2;subplot(2,1,1),plot(t, s)xlabel('t'),ylabel('s(t)')v=v0+a*(t-t0);subplot(2,1,2),plot(t, v)xlabel('t'),ylabel('v(t)')

Ruch jednostajnie opóźniony

0 0.5 1 1.5 2 2.5 3 3.5 40

10

20

30

40

t

s(t)

0 0.5 1 1.5 2 2.5 3 3.5 40

5

10

15

20

tv(t

)

Page 10: Matlab Przykłady prostych metod obliczeniowych

10

t0=0, t1=t0+5, t2=t1+2*60, t3=t2+4a1=4, a2=0, a3=-5v0=0v1=a1*(t1-t0)+v0v2=a2*(t2-t1)+v1v3=a3*(t3-t2)+v2t=[t0 t1 t2 t3] %kolejne punkty czasowev=[v0 v1 v2 v3] %odpowiednie prędkościplot(t, v)title('v(t)')axis([0 140 0 25])

Wykorzystanie macierzy w ruchu złożonym – odcinki czasowe- jednostajnie przyspieszony, - jednostajny,- jednostajnie opóźniony,

0 20 40 60 80 100 120 1400

5

10

15

20

25v(t)

Page 11: Matlab Przykłady prostych metod obliczeniowych

11

[x,y] = fplot('1/sqrt(1+2e-7*x^2)',[1,1e6]);figure(1)plot(x,y)grid onfigure(2)semilogx(x,y) %skala logarytmiczna dla osi xgrid on

100

101

102

103

104

105

106

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Wykres w skali półlogarytmicznej osi x

… na marginesie … czasem wygodniejsza skala logarytmiczna

semilogx

0 1 2 3 4 5 6 7 8 9 10

x 105

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

plot

Page 12: Matlab Przykłady prostych metod obliczeniowych

12

t0=0, t1=t0+5, t2=t1+2*60, t3=t2+4a1=4, a2=0, a3=-5t=[t0, t0, t1, t1, t2, t2, t3, t3]a=[0, a1, a1, a2, a2, a3, a3, 0]figure(2)plot(t,a), grid

0 20 40 60 80 100 120 140-5

-4

-3

-2

-1

0

1

2

3

4

Trochę inaczej tworzymy wykres przyspieszenia

Page 13: Matlab Przykłady prostych metod obliczeniowych

13

A jak narysować wykres s(t) ?

Zadanie: Trzy przedziały czasowe:

1) t(0,10) v0=0 v1=60

2) t(10 20) v1=60 v2=60

3) t(20 30) v2=60 v3=0

Page 14: Matlab Przykłady prostych metod obliczeniowych

14

clc,clear%danet0=0;t1=10;t2=20; t3=30;v0=0; v1=60; v2=60; v3=0;%1 przedziałT01=t0:0.1:t1;a01=(v1-v0)/(t1-t0);S01=a01*T01.^2/2;%2 przedział – tylko 2 punkty!T12=[t1 t2];a12=0;S12=S01(length(S01))+v1*(T12-t1)+a12 *(T12-t1).^2/2;%3 przedziała23=(v3-v2)/(t3-t2);T23=t2:0.1:t3;S23=S12(length(S12))+v2*(T23-t2)+a23*(T23-t2).^2/2%scalamy wektory z przedziałowT=[T01 T12 T23 ];S=[S01 S12 S23];plot(T,S)sk=S(length(S)) %końcowa droga

0 5 10 15 20 25 300

200

400

600

800

1000

1200

uwaga: dużymi literami nazwano zmienne wektorowe, a małymi dane elementarne (skalarne)

S(length(S)) – to ostatni element wektora

Page 15: Matlab Przykłady prostych metod obliczeniowych

15

clc,clear%danet=[0 10 20 30];v=[0 60 60 0];s0=0;N=100; %liczba podprzedziałów, na jakie dzielimy każdy przedział jazdy%====="pętla" dla 3-ch przedziałówfor k=1:3 fprintf('Przedzial:%d\n',k) T(k,:)=t(k):(t(k+1)-t(k))/N:t(k+1); %podwektor czasu w wierszu k-tym i wszystkie jego kolumny a(k)=(v(k+1)-v(k))/(t(k+1)-t(k)); % przyspieszenie w k-tym przedziale S(k,:)=s0(k)+ v(k)*(T(k,:)-t(k)) + a(k)*(T(k,:)-t(k)).^2/2; %podwektor drogi w k-tym wierszu s0(k+1)=S(k,N+1); %przechowanie ostatniej wartości drogi dla następnego przedziału fprintf('Przebyto drogê:%f\n', s0(k+1))end %koniec pętli%przygotowanie danych do wykresuT=reshape(T',1,3*(N+1)); % rekonfiguracja 3-wierszowej macierzy T w macierz 1-wierszowąS=reshape(S',1,3*(N+1)); % to samo dla macierzy Splot(T,S) %rysujemy wykres%całkowita przebyta droga fprintf('Inny sposób - przebyto całkowita droge:%f\n', S(length(S))) %ostatni element tablicy S

.. a teraz bardziej "elegancki" kod…do samodzielnej analizy

Page 16: Matlab Przykłady prostych metod obliczeniowych

16

Zróżnicowanie metod obliczeniowych

Zadanie: Obliczyć wartości drogi wykonanej przez ciało od prędkości początkowej V0=0, poruszającym się z przyspieszeniem a=4m/s2, w przedziale czasu t=[0, 5] s.Utworzyć wykres s(t).

Page 17: Matlab Przykłady prostych metod obliczeniowych

17

t=0 : 0.1 : 5a=4s=a*t.^2/2plot(t,s)

Sposób 1: dwie tablice

Page 18: Matlab Przykłady prostych metod obliczeniowych

18

a=0; b=5; n=50;h=(b-a)/n;for i=1:n+1t(i)=a+(i-1)*h;s(i)=2*t(i)^2;endplot(t,s)

Sposób 2: podział przedziału czasu i wykorzystanie iteracji

Page 19: Matlab Przykłady prostych metod obliczeniowych

19

Składnia funkcji anonimowej:

nazwa_funkcji=@(lista_argumentów)(wyrażenie)

Obliczenia przy pomocy tzw. funkcji anonimowej

Sposób 3.

Page 20: Matlab Przykłady prostych metod obliczeniowych

20

Przykład

sinusoida=@(t)(sin(t))fplot(sinusoida,[0,4*pi])

0 2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

a=4;t=0:0.1:5f = @(t)(a*t.^2/2);s=f(t)plot(t, s)0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

0

5

10

15

20

25

30

35

40

45

50

Nasze zadanie

Page 21: Matlab Przykłady prostych metod obliczeniowych

21

Sposób 4. Definicja funkcji w osobnym pliku Tworzymy osobny m-plik funkcyjny o nazwie fs.m:

function y = fs(t)

y=2*t^2;

t=[0:0.5:5];n=length(t);for i=1:ns (i)=fs(t(i));endplot(t,s), grid

Teraz możemy wykorzystać naszą funkcję z pliku:

Page 22: Matlab Przykłady prostych metod obliczeniowych

2222

function y = fs(t)

y=2*t.^2;

t=[0:0.5:5];s=fs(t);plot(t,s), grid funkcja w m-pliku o nazwie fs.m musiałaby być zdefiniowana następująco:

Aby wykorzystać naszą funkcję w poniższy sposób:

argumentem funkcji jest tutaj wektor

bo elementowe podnoszenie do kwadratu

Page 23: Matlab Przykłady prostych metod obliczeniowych

23

w(x)=a0xn + a1xn-1 + a2xn-2 + ∙∙∙+ aixn-i + ∙∙∙+ an-2x2 + an-1x + an

Zapis wielomianu w matematyce:

Matlab – zmiana indeksowania współczynników

ponieważ w Matlabie indeksy macierzy zaczynają się od 1

Page 24: Matlab Przykłady prostych metod obliczeniowych

24

5x4 + 4x2 – x + 2 = 0

A= [5 0 1 -1 2]X=roots(A)%sprawdzenieS= A(1)*X(1)^4+ A(3)*X(1)^2+ A(4)*X(1) +A(5)%alboS=0;for k=1:5

S=S+A(k)*X(1)^(5-k);enddisp(S)

Wektor współczynników:

Poznany przykład ilustrujący indeksowanie tablicy