MATLAB część 2

Transkrypt

MATLAB część 2
1
SKRYPTY
Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego
y+
z=
1
1 + ( x + 2) 2 x ⋅ sin y 2
+
y +1
3⋅ x
dla danych wartości x = 12.5 i y = 9.87.
Zadanie to można rozwiązać:
• wpisując dane i wzór wyrażenia z w oknie CommandWindow, po czym
wykonać obliczenia naciskając klawisz <Enter>, lub
• tworząc SKRYPT i w nim zapisując wszystkie instrukcje do wykonania, po
czym wykonać napisany skrypt.
Skrypty są to:
• to zewnętrzne pliki, zawierające sekwencję instrukcji i poleceń MATLAB–a,
które będą wykonywane wielokrotnie z linii poleceń >> (Command Line) okna
poleceń (Command Window)
•
są zapamiętywane w kartotece roboczej MATLAB-a na plikach o nazwie z
rozszerzeniem .m ( M–pliki), np., Skrypt_W_Z.m
•
mogą działać na danych już istniejących w przestrzeni roboczej (Workspace)
lub mogą tworzyć nowe dane, które zostają umieszczone w Workspace, i na
których można wykonywać określone działania w dalszych obliczeniach
•
mogą zawierać komentarze
2
TWORZENIE NOWEGO SKRYPTU:
W oknie MATLAB–a wybieramy opcje:
File – New – M–File
Pojawia się edytor MATLAB-a, w którym wpisujemy dane (ewentualnie) i polecenia
do wykonania, czyli instrukcje algorytmu. W naszym przypadku będą to polecenia:
% Wyznaczenie wartosc wyrazenia z
x = 12.5
y = 9.87
z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1)
Następnie wykonujemy opcje:
File – Save
i w oknie Save file as: zapisujemy w kartotece roboczej skrypt pod nazwą, np.
Skrypt_W_Z.m
po czym zamykamy okno edycji – klikając myszką na przycisku x.
WYKONANIE SKRYPTU
1. SPOSÓB
W oknie Command Window piszemy po znaku zachęty nazwę skryptu, czyli
>> Skrypt_W_Z
po czym naciskamy <Enter>.
2. SPOSÓB
W zakładce Current Directory okna Workspace znajdujemy plik o nazwie
Skrypt_W_Z.m.
Kursor na nazwie pliku, klikamy prawym przyciskiem myszy, po czym wybieramy
spośród wyświetlonych opcji opcję Run
3
POPRAWIANIE LUB UZUPEŁNIANIE SKRYPTU
Okno Workspace, zakładka Current Directory:
• kursor na nazwie pliku Skrypt_W_Z.m
• przycisnąć prawy przycisk myszy
• wybrać spośród wyświetlonych opcji opcję Open. Pojawia się okno edycji
istniejącego skryptu Skrypt_W_Z.m – dokonujemy poprawek
• Opcje: File – Save – zapisujemy poprawioną wersję skryptu pod tą samą nazwą
• Ponownie wykonujemy poprawiony skrypt (sposób, jak wyżej)
WCZYTYWANIE DANYCH Z PLIKU
Tworzymy plik z danymi o nazwie, np.,
Dane_W_Z.txt
za pomocą dowolnego zewnętrznego edytora (np. Notatnika) i zapisujemy go w
kartotece roboczej MATLAB-a (nazwa kartoteki roboczej jest wyświetlana w oknie
MATLAB–a tuż poniżej głównego menu). Na pliku będą się znajdowały dwie liczby:
12.5
9.87
Jedną z funkcji do czytania danych z pliku (w naszym przypadku z pliku:
Dane_W_Z.txt) jest funkcja LOAD, która może być stosowana w wersjach:
load Dane_W_Z.txt
lub
load(‘Dane_W_Z.txt’)
Korzystając z funkcji LOAD musimy pamiętać o tym, by dane na pliku były zapisane
w postaci regularnej tablicy, tak by w każdym wierszu tej tablicy znajdowała się taka
sama liczba elementów.
4
Funkcja LOAD zapisuje dane znajdujące się na pliku do tablicy o nazwie takiej
samej jak nazwa pliku. Po wykonaniu czytania otrzymujemy tablicę
dwuelementową:
Dane_W_Z =
12.5000
9.8700
Pierwszy element tej tablicy zawiera wartość zmiennej x z naszego przykładu, drugi
zawiera wartość y. Musimy więc dokonać przyporządkowania:
x = Dane_W_Z(1)
y = Dane_W_Z(2)
i tak określone wartości zostaną wstawione do wzoru na z, by wyznaczyć wartość
zmiennej z.
Skrypt zawierający instrukcje czytania danych z pliku będzie miał więc postać:
% Wyznaczenie wartosci wyrazenia z
load Dane_W_Z.txt
x = Dane_W_Z(1)
y = Dane_W_Z(2)
z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1)
UWAGA!
We wszystkich dotychczasowych przykładach wynik obliczeń był wyświetlany na
monitorze w oknie CommandWindow.
5
FORMATOWANY ZAPIS DANYCH DO PLIKU.
FUNKCJA FPRINTF
Załóżmy, że chcemy zapisać wynik działania naszego skryptu na pliku
przechowywanym w kartotece roboczej. Załóżmy, że chcemy, by wydruk danych i
wyników na tym pliku miał poniższą postać:
Obliczenie wartości wyrażenia
Dane:
x = 12.500
y=
9.870
Wynik:
z=
0.2317
Zapis danych i wyników do pliku wymaga wykonania kilku poleceń:
• Skojarzenie z nazwą fid nazwy pliku z wynikami i otwarcie dostępu
do tego pliku:
fid = fopen(‘Wyn_W_Z.txt’,’w’,’a’)
gdzie:
fid = >0 - OK
fid = 1 – ekran
fid = -1 – błąd!
Atrybuty pliku: ‘w’ – plik do zapisu,
‘a’ – możliwość dopisywania informacji na końcu pliku
• Wydruk wartości zmiennej na plik skojarzony ze zmienną fid:
count =fprintf(fid,format,a,b,c)
gdzie:
fid – oznacza gdzie (na którym pliku) będziemy zapisywać dane i wyniki
format – oznacza jak będziemy drukować dane
a,b – co będziemy drukować
count – liczba zapisanych bitów (opcjonalnie)
6
format:
% 10. 3 f
początek specyfikacji formatu
szerokość pola przeznaczonego na wydruk liczby
Liczba miejsc po kropce w wydruku liczby rzeczywistej dokładność wydruku
kod konwersji - postać wydruku
Kod konwersji dla wydruku liczby double może być: f, e lub E.
Przykład:
Chcemy wydrukować wartość zmiennej x = 12.85. Napisanie
fprintf(fid,’Zmienna x = %10.5f \n’,x)
da efekt:
Zmienna x =
12.850
Napisanie:
fprintf(fid,’Zmienna x = %10.5E \n’,x)
da efekt:
Zmienna x =
1.285E+001
\n – w formacie wydruku oznacza przejście do następnej linii PO wykonaniu
wydruku. Uwaga na apostrofy!
• Zamknięcie dostępu do pliku z wynikami, skojarzonego ze zmienną
plikową fid:
fclose(fid)
7
Aby zrealizować zamierzony wydruk na plik, skrypt powinien zawierać instrukcje:
% Wyznaczenie wartosci wyrazenia z
load Dane_W_Z.txt
x = Dane_W_Z(1)
y = Dane_W_Z(2)
z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1)
fid=open(‘Wyn_W_Z.txt’,’w’,’a’)
fprintf(fid,’Obliczenie wartosci wyrazenia \n\n’)
fprintf(fid,’Dane: \n’)
fprintf(fid,’x = %10.3f \n’,x)
fprintf(fid,’y = %10.3f \n\n’,y)
fprintf(fid,’z = %10.4f \n’,z)
fclose(fid)
CZYTANIE DANYCH Z PLIKU EXCEL–owego
Załóżmy, że dane reprezentujące wartość x i y do obliczenia wartości wyrażenia z
znajdują się na pliku Excel–owym o nazwie ‘W_Z.xls’ i postaci:
Napisanie w oknie CommandWindow instrukcji:
>>A = xlsread(‘W_Z.xls’)
8
Daje efekt
A=
NaN 12.5000
NaN
2.0
9.8700
5.0000
Wszystkie dane, które znajdowały się na pliku ą wpisane do tablicy A. Tam gdzie
zamiast liczby jest tekst, MATLAB wpisuje symbol NaN co oznacza: Not-a-Number.
Teraz należy tylko określić, że:
x = A(1,2)
y = A(2,2).
Można wybrać z Arkusza Excel’owego odpowiedni fragment podając interesujący
zakres komórek:
>>A = xlsread(‘W_Z.xls’,’B1:B2’)
Teraz
>>A =
12.5000
9.8700
i wystarczy dokonać przyporządkowania x = A(1), y = A(2) by policzyć wartość z.
Odpowiedni skrypt miałby postać:
% Wyznaczenie wartosci wyrazenia z
A = xlsread(‘W_Z.txt’,’B1:B2’)
x = A(1)
9
y = A(2)
z = (y+1/(1+(x+2)^2))/(3*x)+x*sin(y^2)/(y+1)
fid=open(‘Wyn_W_Z.txt’,’w’,’a’)
fprintf(fid,’Obliczenie wartosci wyrazenia \n\n’)
fprintf(fid,’Dane: \n’)
fprintf(fid,’x = %10.3f \n’,x)
fprintf(fid,’y = %10.3f \n\n’,y)
fprintf(fid,’z = %10.4f \n’,z)
fclose(fid)
ZAPIS WYNIKÓW NA PLIK EXCEL–owy
Do zapisu na plik Excel–owy służy instrukcja:
xlswrite. Należy podać nazwę pliku
Excel–owego na który mają być zapisane dane i nazwę tablicy, która powinna być na
tym pliku zapisana. Czyli jeśli chcielibyśmy zapisać na pliku ‘Wyn_W_Z.xls’ dane i
wynik obliczenia wartości z należałoby na końcu w/w skryptu umieścić instrukcje:
A(3) = z
xlswrite(‘Wyn_W_Z.xls’,A)
10
ELEMENTY PROGRAMOWANIA W MATLABIE
PĘTLA FOR
Instrukcja pętli służy do wielokrotnego wykonywania w identyczny sposób jednej lub
wielu instrukcji.
SKŁADNIA:
for zmienna = od:krok:do
instrukcje
end
na przykład za pomocą instrukcji:
>>n = 10
>>for i = 1:1:n
fprintf(1,’Kocham Cie!!! \n’)
end
można wydrukować n razy tekst ‘Kocham Cie!!!’
Przykład_1: utworzyć tablicę x, której elementami będą sześciany kolejnych liczb
całkowitych i, dla i=1,2,...,n
>>n = 5
>> for i=1:1:n
x(i) = i^3;
end
>> x
% Wydrukuj wektor x
x=
1 8 27 64 125
Przykład_2: utworzyć dwuwymiarową tablicę A, której elementy określa wzór
Aij =
i− j
, i = 1,2,..., n
i+ j
j = 1,2,..., n
11
Wykonanie poniższych instrukcji
for i=1:1:3
for j=1:1:3
A(i,j) = (i-j)/(i+j)
end
end;
daje efekt:
A =
0
0.3333
0.5000
-0.3333
0
0.2000
-0.5000
-0.2000
0
PĘTLA WHILE
SKŁADNIA:
while wyrażenie logiczne
instrukcje
end
Instrukcja while wykonywana jest tak długo jak długo wyrażenie
logiczne jest prawdziwe.
Przykład:
Wyznaczyć wartość
S=
?
∑
i 2 = 1 + 4 + 9 + ....
i =1
Sumowanie przerwać w momencie, gdy suma S będzie >= 1000.
>> i=1;
>> S=1;
>> while S <= 1000
i = i+1;
S = S+i^2
end
12
INSTRUKCJE WARUNKOWE
Operatory relacji logicznych:
>
>=
<
<=
== ~=
– równy i różny, odpowiednio
Operatory te dokonują porównania element po elemencie dwóch tablic. W wyniku
otrzymujemy tablicę takiego samego rozmiaru wypełnioną 1 i 0. 1 – gdy relacja jest
prawdziwa, 0 – w przypadku przeciwnym.
Na przykład:
>>A = magic(3)
A=
>>B =
>> P = A<B
1
5
12
20
0
1
1
7
1
1
1
0
1
1
8
1
6
4
8
3
5
7
0
15
4
9
2
P=
OPERATORY LOGICZNE
AND
&
A&B
lub
and(A,B)
OR
|
A|B
lub
or(A,B)
NOT
~
~A
lub
not(A)
13
OPERATOR LOGICZNY AND
W =A & B & C
W=and(A,B)!
A, B to tablice lub skalary. Gdy A,B,C są tablicami jednakowych rozmiarów AND
dokonuje operacji logicznej na odpowiadających sobie elementach tych tablic.
Tablica wynikowa W ma taki sam wymiar i ma elementy o wartościach równych 1 lub
0. Element Wij = 1 gdy na pozycji (i,j) w tablicach A,B i C były elementy niezerowe,
oraz 0 w przypadku przeciwnym. Gdy A,B,C są skalarami W też jest skalarem.
Przykład:
B=
A=
>> W=A&B&C
C=
1
2
-1
0
0
1
3
4
5
6
2
3
W=
0
0
1
1
OPERATOR LOGICZNY OR
W =A | B | C
W=or(A,B)!
A, B to tablice lub skalary. Gdy A,B,C są tablicami jednakowych rozmiarów OR
dokonuje operacji logicznej na odpowiadających sobie elementach tych tablic.
Tablica wynikowa W ma taki sam rozmiar i składa się elementów równych 1 lub 0.
Element Wij = 1 gdy na pozycji (i,j) w którejkolwiek tablicy A,B lub C znajduje się
element niezerowy, oraz 0 w przypadku przeciwnym. Gdy A,B,C są skalarami W też
jest skalarem
A=
B=
>> W = A|B|C
C=
1
2
-1
0
0
1
3
4
5
6
2
3
W=
1
1
1
1
14
OPERATOR LOGICZNY NOT
C=~A
C=not(A)
A może być tablicą lub skalarem. Gdy A jest tablicą NOT działa na kolejne elementy
tablicy A i zwraca tablicę takiego samego wymiaru co A składającą się albo z 1 albo
0. Element tablicy wynikowej przyjmuje wartość1 gdy w tablicy A na danej pozycji
znajduje się 0, lub 0 gdy na danej pozycji w tablicy A stoi element różny od zera
>> N = not(A)
A=
N=
0
2
0
1
0
1
3
4
5
0
0
0
1
0
5
0
1
0
INSTRUKCJA WARUNKOWA I
SKŁADNIA:
if wyrażenie_logiczne1
instrukcje_1
end
INSTRUKCJA WARUNKOWA II
SKŁADNIA:
if wyrażenie_logiczne1
instrukcje_1
else
instrukcje_2
end
15
Przykład:
>>x = -10;
>>y = 20;
>> if x<y z = x+y, info = 'x<y'
else z = x-y, info = 'x>y'end
>>z =
10
info =
x<y
INSTRUKCJA WARUNKOWA III
SKŁADNIA:
if wyrażenie_logiczne1
instrukcje_1
elseif wyrażenie_logiczne2
instrukcje_2
else
instrukcje_3
end
Przykład:
Wyznaczyć wartość funkcji y=y(x) określonej wykresem w zależności od wartości x
y
a+1
1
a
x
16
>> a = 10;
>> x = 6.5;
>> if x<=0 y = 1
elseif x>a y = a+1
else y = x+1
end
y=
7.5000
lub równoważnie
>> a = 10;
>> x = 6.5;
>> if ((x>0) & (x<=a)) y = x+1
elseif x>a y = a+1
else y = 1
end
y=
7.5000
KOLEJNOŚĆ DZIAŁAŃ W KIERUNKU MALEJĄCEGO PRIORYTETU
1.
Działania w ( )
2.
Transponowanie (.’), potęgowanie (.^), potęgowanie (^)
3.
Plus, minus (+) (-) (zmiana znaku), negacja logiczna (~)
4.
Mnożenie (.*), dzielenie (./), dzielenie (.\), mnożenie macierzy (*)
dzielenie macierzy (/), dzielenie macierzy (\)
5.
Dodawanie (+), odejmowanie (-)
6.
Operator ( : )
7.
Operatory relacji logicznych <, <=, >, <=, ==, ~=
8.
Operator AND (&)
9. Operator OR ( | )