Cw03

background image

1

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

Instrukcja iteracyjna („pętla liczona”)

Pętla pozwala na wielokrotne powtarzanie bloku instrukcji. Liczba powtórzeń wynika z definicji modyfikowanej

wartości licznika pętli.

Postać ogólna:

for

licznik

= wartość_pocz

:

krok

:

wartość_końcowa,

instrukcja,

instrukcja,


end

Ćwiczenie

Utworzyć m-plik, przetestować i wyjaśnić działanie poniższych przykładów:

Przykład 1. Wypełnianie tablicy jednowymiarowej:

for i= 1:1:10,
a(i) = 3*i - 1;
end;

disp(a)

Przykład2. Sumowanie elementów w tablicy jednowymiarowej:

clear a;
suma = 0;

for i= 1:1:10,
a(i) = i^2,
pause, %zatrzymuje do naciśnięcia dowolnego klawisza
suma=suma+a(i);
end

disp(suma)

Przykład 3. Wypełnianie tablicy dwuwymiarowej – "zagnieżdżenie" iteracji:

clear a;

for i= 1:1:5,
for j = 1:1:5,
a(i , j) = i*j;

a(i , j) = i*j;

a(i , j) = i*j;

a(i , j) = i*j;

pause

pause

pause

pause

end

%ograniczenie pętli wewnętrznej

end

%ograniczenie pętli zewnętrznej

disp(a)

Przykład 4. Sumowanie elementów w tablicy dwuwymiarowej:

clear a;
suma = 0;

for i= 1:1:5,
for j = 1:1:5,
a(i , j) = 2*i - 4* j,
pause,
suma=suma+a(i , j);
end
end

background image

2

disp(suma)

Ograniczenia pętli wewnętrznej mogą być zależne od licznika pętli zewnętrznej. Wykonać i wyjaśnić poniższy

przykład:

Przykład 5.

clear a;

for i= 1:1:5,
for j = 1:1:i,
a(i , j) = 2*i - 4* j;
end
end

disp(a)

Zliczanie i sumowanie warunkowe

Zliczanie warunkowe (np. policz ile elementów w tablicy jest dodatnich) wymaga zastosowania pętli for, w

której dla każdego kroku badamy element tablicy (wykorzystując instrukcję warunkową if). Dla elementów

spełniających dany warunek należy wartość pomocniczej zmiennej powiększać o 1. Po zakończeniu pętli

wyświetlić wartość zmiennej pomocniczej. Schemat działań:

M=-3:0.1:2
ile=0;
N=length(M) % funkcja

length

zwraca liczbę kolumn tablicy

for

for

for

for i=1:N

if

if

if

if M(i)>0

ile=ile+1;

end

end

end

end

end

end

end

end;
disp(ile)

Podobny jest algorytm sumowania warunkowego (np. obliczenie sumy elementów dodatnich w tablicy) :

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

for

for

for i=1:N

if

if

if

if M(i)>0

suma_d=suma_d+M(i);

end

end

end

end

end

end

end

end;
disp(suma_d)

Zadania

1.

Napisać m-plik, w którym zdefiniowana jest dowolna tablica 5x5, (wykorzystać funkcję rand(N), która

generuje losowo macierz kwadratową NxN), a następnie obliczana jest suma elementów w 3-ciej

kolumnie.

2.

Napisać m-plik, w którym zdefiniowana jest dowolna tablica 10x10, następnie obliczana jest suma

elementów na przekątnej głównej.

3.

Napisać m-plik, w którym zdefiniowana jest dowolna tablica 10x10, następnie obliczana jest suma

elementów na przeciwprzekątnej.

4.

Napisać m-plik, w którym zdefiniowana jest dowolna tablica 10x10, następnie obliczane jest ile

elementów jest dodatnich, a ile ujemnych.

5.

Napisać m-plik, w którym zdefiniowana jest dowolna tablica 5x5, następnie obliczana jest suma

elementów ujemnych w całej tablicy.

background image

3

Proste obliczenia kinematyczne

Jedną wartość możemy obliczyć na podstawie znanego wzoru lub znanej funkcji przez podstawienie

wartości liczbowych parametrów lub wartości liczbowej argumentu funkcji.

Ćwiczenie

Zadanie 1. Obliczyć przyspieszenie samochodu, który startuje w chwili t

0

od prędkości v

0

=0 i przyspiesza

ruchem jednostajnie przyspieszonym do prędkości v

1

=20m/s (72km/h) w czasie 5 sekund.

Korzystamy ze znanego wzoru na prędkość:

v=v

0

+a*(t-t

0

)

Powyższe równanie możemy rozwiązać ręcznie otrzymując wzór na przyspieszenie:

a =

v − v

t − t

Po podstawieniu do tego wzoru danych:

t

0

=0, v

0

=0, t=5; v=20,

obliczamy przyspieszenie a.

Obliczenie w m-pliku Matlaba:

t0=0, v0=0, t=5, v=20
a=(v-v0)/(t-t0)

Zadanie 2. Obliczyć opóźnienie (przyspieszenie ujemne) samochodu, który jedzie w chwili t

0

z prędkością

v

0

=20m/s (72km/h) i zatrzymuje się przed skrzyżowaniem. Czas hamowania wynosi 4 sekundy, a prędkość

samochodu maleje jednostajnie.

Korzystamy ze wzoru na przyspieszenie z przykładu 1.

Po podstawieniu danych :

t0=0, v0=20, t=4, v=0

do wzoru

ܽ =

௩ି௩

௧ି௧

i obliczamy przyspieszenie a.

Obliczenia w m-pliku Matlaba:

t0=0, v0=20, t=4, v=0
a=(v-v0)/(t-t0)

Zadanie 3. Samochód startuje w chwili t

0

=0 od prędkości v

0

=0 i przyspiesza ruchem jednostajnie

przyspieszonym do prędkości v

1

= 20m/s (72 km/h) w czasie 5 sekund. Jedzie ze stałą prędkością przez 2

minuty do chwili t

2

, a następnie hamuje przez 4 sekundy i zatrzymuje się przed skrzyżowaniem w chwili t

3

.

a.

Narysować wykres prędkości przy użyciu funkcji plot.

b.

Obliczyć przyspieszenia na poszczególnych odcinkach czasu i narysować wykres przyspieszenia

przy użyciu funkcji plot.

ad a)

Przyjmujemy oznaczenia:

t

0

=0,

v

0

=0

t

1

=t

0

+5,

v

1

=20

t

2

=t

1

+2*60, v

2

=20

t

3

=t

2

+4,

v

3

=0

Podstawiamy oznaczenia poszczególnych chwil do macierzy jednowierszowej t:

t=[t

0

, t

1

, t

2

, t

3

]

Podstawiamy oznaczenia poszczególnych prędkości do macierzy jednowierszowej v:

v=[v

0

, v

1

, v

2

, v

3

]

Stosujemy funkcję plot:

plot(t,v)

background image

4

Metoda rozwiązania w m-pliku Matlaba:

%Program tworzenia wykresu prędkości
t0=0, v0=0
t1=t0+5, v1=20
t2=t1+2*60, v2=20
t3=t2+4, v3=0
t=[t0, t1, t2, t3]
v=[v0, v1, v2, v3]
plot(t,v), grid
title(

'

Wykres predkosci

'

)

ad b)

Zgodnie z wynikiem zad.1 na odcinku <t0,t1> przyspieszenie ma wartość stałą a1=4. Na odcinku <t1,t2>

przyspieszenie a2=0, ponieważ prędkość jest stała. Na podstawie wyniku z zad.2 przyspieszenie na odcinku

<t2,t3> ma wartość a3=-5.

Rysujemy schematyczny rysunek:

- na osi t zaznaczamy poszczególne chwile t0, t1, t2, t3,

- na osi a rysujemy poszczególne odcinki a1,a2,a3,

- numerujemy poszczególne punkty wykresu kolejnymi liczbami 1,2,3,4,5,6,7,8 zaczynając od punktu (t0,0).

Kolejne punkty mają współrzędne:

1(t

0

,0), 2(t

0

,a

1

), 3(t

1

,a

1

), 4(t

1

,a

2

), 5(t

2

,a

2

), 6(t

2

,a

3

), 7(t

3

,a

3

), 8(t

3

,0)

Podstawiamy oznaczenia pierwszych współrzędnych kolejnych punktów do wektora t:

t=[t

0

, t

0

,t

1

,t

1

,t

2

,t

2

,t

3

,t

3

]

Podstawiamy oznaczenia drugich współrzędnych kolejnych punktów do wektora v:

v=[0,a

1

,a

1

,a

2

,a

2

,a

3

,a

3

,0]

Wywołujemy instrukcję plot i instrukcję grid:

plot(t,v), grid

Metoda rozwiązania w Matlab-ie:

% Program tworzenia wykresu przyspieszenia
t0=0, t1=t0+5, t2=t1+2*60, t3=t2+4
a1=4, a2=0, a3=-5
t=[t0,t0,t1,t1,t2,t2,t3,t3]
a=[0,a1,a1,a2,a2,a3,a3,0]
plot(t,a), grid
title('Wykres przyspieszenia')

Indeksy elementów wektora

W matematyce często argumenty zmiennej x i wartości zmiennej y numerujemy od 0;np.:

x

0

, x

1

,x

2

,…,x

i

,…,x

n-1

,x

n

lub w zapisie skróconym

{x

i

};i=0:n

y

0

,y

1

,y

2

,…,y

i

,…,y

n-1

,y

n

lub w zapisie skróconym

{y

i

}; i=0:n

background image

5

ݔ

+ ݔ

+ ݔ

+ ⋯ + ݔ

+ ⋯ + ݔ

௡ିଵ

+ ݔ

lub krócej:

∑ E

I

J

IM6

W fizyce zmienną czasową t, prędkość v i drogę s również często numerujemy od 0, np.:

t

0

, t

1

, t

2

,…t

i

,…,t

n

v

0

, v

1

, v

2

,…v

i

,…,v

n

s

0

, s

1

, s

2

,…s

i

,…,s

n

W języku Matlab indeksy (wskaźniki) numerujemy od 1. Dlatego, też musimy we wzorach zmieniać indeksy

x

1

, x

2

,x

3

,…,x

i

,…x

n

,x

n+1

lub w zapisie skróconym

{x

i

};i=1:n+1

y

1

,y

2

,y

3

,…,y

i

,…,y

n-1

,y

n+1

lub w zapisie skróconym

{y

i

}; i=1:n+1

E

F

+ E

G

+ E

N

+ ⋯ + E

I

+ ⋯ + E

JOF

PQR S T8UVWVX WYZó[\]^_ ` E

I

JOF

IMF

t

1

, t

2

, t

3

,…t

i

,…,t

n+1

v

1

, v

2

, v

3

,…v

i

,…,v

n+1

s

1

, s

2

, s

3

,…s

i

,…,s

n+1

Do elementu wektora odwołujemy się poprzez nazwę wektora i indeks w nawiasie okrągłym; np.: do trzeciego

elementu wektora x

3

odwołujemy się x(3).

Metody obliczeń wielu wartości funkcji

Wartości funkcji można obliczać na wiele sposobów.

Ćwiczenie

Zadanie 4. Obliczyć wartości drogi dla podanego wzoru na drogę:

s=

a<

b

G

dla

a=4

w przedziale dla

t=[0, 5]

Sposób 1. Obliczanie wielu wartości dla podanego wzoru, np.. Chcemy obliczyć wartości drogi s co jedną

sekundę.

Generujemy listę argumentów w wektorze t od 0 do 5.

t=[0:0.1:5]

Tworzymy wyrażenie, które oblicza wartości s dla każdego elementu wektora t według wzoru s=2t

2

:

s=2*t.^2

Metoda obliczeń w Matlab-ie:

t=[0:0.1:5];

s=2*t.^2;

plot(t,s)

Sposób 2. Obliczanie wielu wartości przez podział przedziału t=[a,b] na n podprzedziałów i zastosowanie

iteracji for:

Otrzymamy wtedy n+1 wartości t (n-1 wartości w punktach podziału oraz dwa punkty końcowe a i b).

Metoda obliczeń:

Obliczamy długość podprzedziału h:

h=(b-a)/n

Obliczamy wartości argumentu w punktach podziału

t

i

=a+(i-1)*h dla

i=1,2,3…,n+1

Obliczamy wartości s

i

wg wzoru:

s

i

= 2*t

i

^2

Metoda obliczeń w m-pliku Matlaba:

a=0; b=5; n=50;

h=(b-a)/n;

for

for

for

for i=1:n+1

t(i)=a+(i-1)*h;

s(i)=2*t(i)^2;

end

end

end

end

plot(t,s)

Zadanie domowe

1.

Bazując na temacie zadania 2 wykonać wykres drogi przebytej przez pojazd s(t) dla wszystkich trzech

przedziałów przejazdu.


Wyszukiwarka

Podobne podstrony:
GW CW03 Przyklad Transport
cw03-protokol, Politechnika Wrocławska Energetyka, III semestr, Materiały
pi cw03
cw03 PS
se cw03
ELEKTRONIKA cw03 id 424651 Nieznany
cw03
GW CW03 B Transport
cw03 przetwornik ADC id 122514 Nieznany
pi cw03
GW CW03 Przyklad
Laboratorium TWN - Cw03 - Badanie przekładników prądowych i napięciowych - Skrypt , Studia dzienne -
ćw03 Dysocjacja, In?ynieria Ruchu Morskiego, rok I, gr
Cw03 1, Akademia Morska, 1 rok, Fizyka, FIZYKA1, fiza
cw03
cw03
cw03
ELEKTRONIKA cw03(2)

więcej podobnych podstron