Ć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
1
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 i=1:N
for
for
for
if M(i)>0
if
if
if
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 i=1:N
for
for
for
if M(i)>0
if
if
if
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.
2
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 t0 od prędkości v0=0 i przyspiesza
ruchem jednostajnie przyspieszonym do prędkości v1=20m/s (72km/h) w czasie 5 sekund.
Korzystamy ze znanego wzoru na prędkość:
v=v +a*(t-t )
0 0
Powyższe równanie możemy rozwiązać ręcznie otrzymując wzór na przyspieszenie:
v - v
a =
t - t
Po podstawieniu do tego wzoru danych:
t =0, v =0, t=5; v=20,
0 0
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óznienie (przyspieszenie ujemne) samochodu, który jedzie w chwili t0 z prędkością
v0=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 t0=0 od prędkości v0=0 i przyspiesza ruchem jednostajnie
przyspieszonym do prędkości v1 = 20m/s (72 km/h) w czasie 5 sekund. Jedzie ze stałą prędkością przez 2
minuty do chwili t2, a następnie hamuje przez 4 sekundy i zatrzymuje się przed skrzyżowaniem w chwili t3.
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, v =0
0 0
t =t +5, v =20
1 0 1
t =t +2*60, v =20
2 1 2
t =t +4, v =0
3 2 3
Podstawiamy oznaczenia poszczególnych chwil do macierzy jednowierszowej t:
t=[t , t , t , t ]
0 1 2 3
Podstawiamy oznaczenia poszczególnych prędkości do macierzy jednowierszowej v:
v=[v , v , v , v ]
0 1 2 3
Stosujemy funkcjÄ™ plot:
plot(t,v)
3
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
przyspieszenie ma wartość stałą a1=4. Na odcinku
przyspieszenie a2=0, ponieważ prędkość jest stała. Na podstawie wyniku z zad.2 przyspieszenie na odcinku
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), 2(t ,a ), 3(t ,a ), 4(t ,a ), 5(t ,a ), 6(t ,a ), 7(t ,a ), 8(t ,0)
0 0 1 1 1 1 2 2 2 2 3 3 3 3
Podstawiamy oznaczenia pierwszych współrzędnych kolejnych punktów do wektora t:
t=[t , t ,t ,t ,t ,t ,t ,t ]
0 0 1 1 2 2 3 3
Podstawiamy oznaczenia drugich współrzędnych kolejnych punktów do wektora v:
v=[0,a ,a ,a ,a ,a ,a ,0]
1 1 2 2 3 3
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.:
x0, x1,x2,& ,xi,& ,xn-1,xn lub w zapisie skróconym {xi };i=0:n
y0,y1,y2,& ,yi,& ,yn-1,yn lub w zapisie skróconym {yi}; i=0:n
4
"
+ + + ï" + + ï" + + lub krócej:
W fizyce zmienną czasową t, prędkość v i drogę s również często numerujemy od 0, np.:
t , t , t ,& t ,& ,t v , v , v ,& v ,& ,v s , s , s ,& s ,& ,s
0 1 2 i n 0 1 2 i n 0 1 2 i n
W języku Matlab indeksy (wskazniki) numerujemy od 1. Dlatego, też musimy we wzorach zmieniać indeksy
x1, x2,x3,& ,xi,& xn,xn+1 lub w zapisie skróconym {xi };i=1:n+1
y1,y2,y3,& ,yi,& ,yn-1,yn+1 lub w zapisie skróconym {yi}; i=1:n+1
+ + + ï" + + ï" + ó
t , t , t ,& t ,& ,t v , v , v ,& v ,& ,v s , s , s ,& s ,& ,s
1 2 3 i n+1 1 2 3 i n+1 1 2 3 i n+1
Do elementu wektora odwołujemy się poprzez nazwę wektora i indeks w nawiasie okrągłym; np.: do trzeciego
elementu wektora x3 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= 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=2t2 :
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 =a+(i-1)*h dla i=1,2,3& ,n+1
i
Obliczamy wartości si wg wzoru:
s = 2*t ^2
i i
Metoda obliczeń w m-pliku Matlaba:
a=0; b=5; n=50;
h=(b-a)/n;
for i=1:n+1
for
for
for
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.
5
Wyszukiwarka
Podobne podstrony:
GW CW03 A Transport
ELEKTRONIKA cw03
C16 2005 cw03
cw03
ELEKTRONIKA cw03(2)
GW CW03 Przyklad Transport
instrukcja cw03
Cw03 Word2003
cw03 PS
cw03
cw03
izs cw03
LF E CW03
C16 2005 cw03
cw03
więcej podobnych podstron