SKRYPTY
Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego
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
1 sin 3
) 2 ( 1
1
2 2
+ + ⋅
⋅ + + +
=
yy x x
y x z
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
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
lubload(‘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.
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.
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)
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)
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 format: % 10. 3 f
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’)
Daje efekt
A =
NaN 12.5000 NaN 9.8700
2.0 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)
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)
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
n j
n j i
i j
A
iji , = 1 , 2 ,..., = 1 , 2 ,..., +
= −
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ść
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
....
9 4 1
?
1
2
= + + +
= ∑
= i
i
S
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:
OPERATORY LOGICZNE
AND & A & B lub and(A,B)
OR | A | B lub or(A,B)
NOT ~ ~A lub not(A)
>>A = magic(3) A =
8 1 6 3 5 7 4 9 2
>>B =
1 5 12 4 8 20 0 15 7
>> P = A<B P =
0 1 1 1 1 1 0 1 1
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:
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 = 1 2 3 4
C = 0 1 2 3 B =
-1 0 5 6
>> W=A&B&C W =
0 0 1 1
A = 1 2 3 4
C = 0 1 2 3 B =
-1 0 5 6
>> W = A|B|C W =
1 1 1 1
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
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
A =
0 2 0 3 4 5 1 0 5
>> N = not(A) N =
1 0 1 0 0 0 0 1 0
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
1
x y
a a+1
>> 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 (&)