• Nie Znaleziono Wyników

SKRYPTY Zadanie

N/A
N/A
Protected

Academic year: 2021

Share "SKRYPTY Zadanie"

Copied!
16
0
0

Pełen tekst

(1)

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

+ + ⋅

⋅ + + +

=

y

y x x

y x z

(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)

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

(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 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)

(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

n j

n j i

i j

A

ij

i , = 1 , 2 ,..., = 1 , 2 ,..., +

= −

(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ść

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

(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:

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

(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:

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

(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

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

(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

1

x y

a a+1

(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 ( | )

Cytaty

Powiązane dokumenty

Istotą tego aforyzmu jest po- stulat, by liczby naturalne traktować jako pojęcia pierwotne, nie wymagające definicji, wszystkie zaś pozostałe typy liczb powinny być definiowane, a

Przeedytujmy plik xml, korzystając z Notatnika, zmniejszając wartości właściwości o połowę. Odczytajmy serializacją plik xml po zmianie i wyświetlmy

Do wszystkich klas definiujących stopnie, czyli do klasy bazowej Stopien_walu oraz do klas pochodnych StopienFazaZLewej, StopienFazaZPrawej dodamy metodę XMLZapisz –

1, obsługującej zdarzenie btnZapisz_Click() musimy jawnie wskazać o jaki obiekt nam chodzi stąd wpisujemy nazwę obiektu, w tym przypadku

„Statystyk”. Korzystając z informacji zawartych w pliku pesel-dane.txt oraz dostępnych narzędzi informatycznych, wykonaj poniższe polecenia. Odpowiedzi do poszczególnych

• Możliwość wykonania danej operacji na określonych rastrach może być uzależniona od głębokości piksela, typu kodowania danych, (np. rastry typu „ze znakiem” nie

Głównym celem ćwiczenia jest przeprowadzenie pełnej charakterystyki struktury krystalicznej przykładowego związku w oparciu o plik CIF przy wykorzystaniu programu

Włącz konspekt numerowany (numerację rozdziałów) tak, by akapity złożone stylem &#34;Nagłówek 1&#34; były numerowane jako kolejne rozdziały, a te złożone stylem