1
MATLAB
WPROWADZENIE
2
CZYM JEST MATLAB?
CZYM JEST MATLAB?
Matlab to pakiet przeznaczony do
wykonywania obliczeń numerycznych oraz
graficznej prezentacji wyników, opracowany
w firmie MathWorks (
).
Dostępny jest na różnych platformach
sprzętowych oraz systemowych (np..
Windows, Macintosh).
Podstawową strukturą danych w Matlabie
jest macierz.
3
ROZKŁAD MATERIAŁU
ROZKŁAD MATERIAŁU
Operacje macierzowe.
Instrukcje, funkcje, tworzenie skryptów.
Operacje na plikach.
Możliwości graficzne pakietu.
Obliczenia numeryczne: interpolacja,
aproksymacja danych, całkowanie
numeryczne, rozwiązywanie układów
liniowych, nieliniowych, różniczkowych.
4
ELEMENTY PAKIETU
ELEMENTY PAKIETU
MATLAB
MATLAB
Język Matlab – umożliwia tworzenie programów,
kompletnych aplikacji, udostępnia funkcje, obsługę
wejścia/wyjścia i elementy programowania obiektowego;
Środowisko robocze Matlaba – zestaw narzędzi do
zarządzania zmiennymi w przestrzeni roboczej, m-
plikami, aplikacjami Matlaba oraz do importowania i
eksportowania danych;
System graficzny – zawiera funkcję do tworzenia dwu- i
trójwymiarowych wykresów, funkcje przetwarzania
obrazów i tworzenia animacji a także polecenia
umożliwiające pełną kontrolę wyglądu tworzonych grafik
i budowę graficznego interfejsu użytkownika;
5
Biblioteka funkcji matematycznych –
podstawowe funkcje matematyczne, funkcje
macierzowe oraz specyficzne funkcje
matematyczne np.. Funkcje Bessela;
Interfejs API – biblioteka umożliwiająca
tworzenie programów w językach C i Fortran,
współpracujących z programami napisanymi w
Matlabie.
6
PRACA Z PAKIETEM
PRACA Z PAKIETEM
MATLAB
MATLAB
1)
W trybie bezpośrednim – typowy tryb
roboczy, umożliwiający prowadzenie
dialogu pomiędzy użytkownikiem a
pakietem na zasadzie: pytanie-odpowiedź;
2)
W trybie pośrednim – umożliwiającym
szybkie i efektywne wykonanie obliczeń i
prezentację wyników za pomocą
uruchomienia programu napisanego w
języku pakietu Matlab, czyli tzw. Skryptu.
7
ZMIENNE
ZMIENNE
Nazwa zmiennej musi rozpoczynać się
literą i może składać się z dowolnej
liczby liter, cyfr i znaków podkreślenia.
Pakiet Matlab nie wymaga deklarowania
zmiennych ani określenia ich rozmiaru.
Aby sprawdzić wartość istniejącej już
zmiennej, należy w wierszu poleceń
wpisać jej nazwę.
Matlab rozróżnia duże i małe litery.
Standardowe polecenia pakietu pisane
są zawsze małymi literami.
8
LICZBY
LICZBY
Stałopozycyjne-z opcjonalnym użyciem
znaku + lub – oraz kropki dziesiętnej;
Zmiennopozycyjnej-z użyciem znaku e
lub E poprzedzającego wykładnik potęgi
10, np. 1e2=100;
Do zapisu części urojonej liczb
zespolonych używa się stałej i lub j.
9
POLECENIA
POLECENIA
Po wydaniu polecenia i naciśnięciu klawisza
Enter Matlab natychmiast wyświetla jego
wynik.
Umieszczenie po poleceniu średnika
spowoduje wykonanie obliczeń, ale bez
zwracania wyniku.
Polecenie powinno się mieścić w jednym
wierszu.
Kilka poleceń w jednym wierszu oddzielamy
od siebie przecinkami lub średnikami.
10
POMOC SYSTEMOWA
POMOC SYSTEMOWA
Uzyskanie informacji o funkcjach
Matlaba: >>help nazwa_funkcji
Help Desk-podręcznik opracowany
w postaci stron HTML.
11
MACIERZE-DEFINIOWANIE
MACIERZE-DEFINIOWANIE
MACIERZY
MACIERZY
Elementy w wierszu macierzy muszą
być oddzielane spacją lub przecinkami;
Średnik lub znak nowego wiersza
kończy wiersz macierzy i powoduje
przejście do następnego;
Cała lista elementów musi być ujęta w
nawiasy kwadratowe.
12
ODWOŁANIA DO FRAGMENTÓW
ODWOŁANIA DO FRAGMENTÓW
MACIERZY
MACIERZY
x(j:k) – elementy wektora wierszowego
x o numerach od j do k
A(i,:) – wszystkie elementy w wierszu i
macierzy A
A(i,j:l)- wszystkie elementy w wierszu i
macierzy A o numerach od j do l
A(i:k,j:l)-wszystkie elementy w
kolumnach od j do l wierszy od i do l
13
A(x,j:l)-wszystkie elementy w
kolumnach od j do l w wierszach
macierzy A o numerach określonych
przez elementy wektora x
A(:,:) – cała dwuwymiarowa macierz A
A(:)-cała macierz A w postaci wektora
kolumnowego.
14
WYŚWIETLANIE MACIERZY I ICH
WYŚWIETLANIE MACIERZY I ICH
ROZMIARÓW
ROZMIARÓW
disp(A)-wyświetla zawartość macierzy A
w oknie poleceń;
size(A)-wyświetla rozmiar
dwuwymiarowej macierzy A (liczbę
wierszy i kolumn) w postaci
dwuelementowego wektora wierszowego;
[n m]=size(A)-przypisuje zmiennej n
liczbę wierszy, a zmiennej m liczbę
kolumn;
15
n=size(A,1)-przypisuje zmiennej n
liczbę wierszy macierzy A;
m=size(A,2)-przypisuje zmiennej
m liczbę kolumn macierzy A;
length(x)-zwraca długość wektora
x lub dłuższy z wymiarów macierzy.
16
ARYTMETYKA MACIERZOWA I
ARYTMETYKA MACIERZOWA I
TABLICOWA
TABLICOWA
A+B
A-B
A*B, B*A
C1=B/A, C2=A\B
A^2=A*A
A’
A+B
A-B
A.*B=B.*A
B./A=A.\B
A.^2
A’
17
FUNKCJE GENERUJĄCE I
FUNKCJE GENERUJĄCE I
PRZEKSZTAŁCAJĄCE MACIERZE
PRZEKSZTAŁCAJĄCE MACIERZE
eye(n)-tworzy macierz jednostkową nxn;
ones(n)-tworzy macierz nxn o
elementach równych 1;
zeros(n)-macierz zerowa nxn;
rand(n)-macierz nxn wypełniona
liczbami pseudolosowymi z przedziału
<0,1> o rozkładzie jednostajnym;
randn(n)-macierz nxn wypełniona
liczbami pseudolosowymi o rozkładzie
normalnym ze średnią 0 i wariancją 1.
18
A=diag(x)-macierz przekątniowa A
ze składnikami wektora x na
głównej przekątnej;
x=diag(A)-utworzenie wektora x z
elementów znajdujących się na
głównej przekątnej macierzy A;
inv(A)-utworzenie macierzy
odwrotnej do A;
repmat(A,n,m)-utworzenie
macierzy przez powielenie
podmacierzy A m razy w poziomie i
n razy w pionie;
19
reshape(A,n,m)-utworzenie
macierzy o n wierszach i m
kolumnach z elementów branych
kolejno kolumnami z macierzy A;
rot90(A)-obrócenie macierzy A o
90 stopni w kierunku przeciwnym
do wskazówek zegara;
tril(A)-utworzenie z macierzy A
macierzy trójkątnej dolnej;
triu(A)- utworzenie z macierzy A
macierzy trójkątnej górnej.
20
MACIERZE WIELOWYMIAROWE
MACIERZE WIELOWYMIAROWE
Matlab dopuszcza definiowanie macierzy
wielowymiarowych. Odwoływanie się do
elementów takich macierzy wymaga liczby
indeksów większej niż 2.
Pierwszy indeks-wiersz macierzy (wymiar 1);
Drugi indeks-kolumna macierzy (wymiar 2);
Trzeci indeks-strona macierzy (wymiar 3)
Czwarty indeks-książka macierzy (wym. 4);
Piąty indeks-tom macierzy (wym.5);
itd.;
21
METODY TWORZENIA TABLIC
METODY TWORZENIA TABLIC
WIELOWYMIAROWYCH
WIELOWYMIAROWYCH
1)
przez indeksowanie;
2)
przez zastosowanie funkcji (ones, zeros, randn,
repmat-tworzy tablice wielowymiarową
wypełnioną jednakowymi wartościami);
3)
przez zastosowanie funkcji cat (konkatenacja,
scalanie tablic);
4)
cat(dim,A,B) scala dwie macierze A i B zgodnie
z podanym wymiarem dim;
5)
cat(2,A,B) oznacza to samo co [A, B];
6)
cat(1,A,B) oznacza to samo co [A; B];
7)
B=cat(dim,A,B,C,...) scala macierze A,
B,C,... zgodnie z podanym wymiarem
dim;
22
PRZYKŁAD
PRZYKŁAD
Na rysunku widoczna jest
macierz trójwymiarowa o
rozmiarze 2x3x2 (2
wiersze i 3 kolumny na
każdej stronie, 2 strony);
>>D(:,:,1)=[1 3 0; 5 7 2]
%str.1;
>>D(:,:,2)=[4 7 8; 1 0 5]
%str.2;
str
on
y
wiersze
k
o
lu
m
n
y
23
PODSTAWOWE FUNKCJE I STAŁE
PODSTAWOWE FUNKCJE I STAŁE
MATEMATYCZNE
MATEMATYCZNE
Funkcja
opis
sin(z), cos(z), tan(z), cot(z)
Sinus, cosinus, tangens,
cotangens; argument
funkcji w radianach;
asin(z), acos(z), atan(z),
acot(z)
Funkcje
cyklometryczne; wynik
w radianach;
sinh(z), cosh(z), tanh(z),
coth(z)
Funkcje hiperboliczne;
argument w radianach;
sqrt(z)
Pierwiastek z ; z<0 –
wynik zespolony;
24
exp(z)
e
z
log(z)
lnz; z<0 – wynik
zespolony;
log2(z)
log
2
z; z<0 – j.w.
abs(z)
lzl lub moduł liczby
zespolonej;
angle(z)
argument liczby
zespolonej;
real(z), imag(z)
część rzeczywista i
urojona liczby z
conj(z)
liczba zespolona
sprzężona;
z
e
25
complex(x,y)
utworzenie liczby
zespolonej;
ceil(z)
zaokrąglenie liczby w
górę;
floor(z)
zaokrąglenie liczby w
dół;
fix(z)
zaokrąglenie liczby
dodatniej w dół, ujemnej
w górę;
round(z)
zaokrąglenie do
najbliższej liczby
całkowitej;
rem(x,y); mod(x,y)
reszta z dzielenia x
przez y;
sign(x)
funkcja signum;
26
FUNKCE OPERUJĄCE NA WEKTORACH
FUNKCE OPERUJĄCE NA WEKTORACH
max(x)
zwraca największy
element wektora x;
min(x)
zwraca najmniejszy
element wektora x;
sum(x)
zwraca sumę
elementów wektora x;
prod(x)
zwraca iloczyn
elementów wektora x;
mean(x)
zwraca średnią
arytmetyczną
elementów wektora x;
27
STAŁE MATEMATYCZNE
STAŁE MATEMATYCZNE
stałe
opis
pi
przybliżenie wartości
eps
względna dokładność
zmiennoprzecinkowa;
i lub j
pierwiastek z liczby –1;
Inf lub
inf
nieskończoność (ang. Infinity); jest
rezultatem operacji, która przekracza
zakres arytmetyki komputera,
np.dzielenie przez 0;
NaN lub
nan
nie liczba; jest wynikiem
matematycznie niezdefiniowanych
operacji;
28
TYPY DANYCH
TYPY DANYCH
Matlab dopuszcza użycie sześciu
podstawowych typów danych:
1.
Double-liczby podwójnej precyzji; podstawowy
typ danych dla zmiennych MATLAB-a (wszystkie
obliczenia w Matlabie są prowadzone w trybie
podwójnej precyzji dla zmiennych
numerycznych i łańcuchowych);
2. Char-znaki i łańcuchy znaków; łańcuch znakowy
definiuje się za pomocą apostrofów i
przechowywany jest w pamięci w postaci
wektora liczb całkowitych reprezentujących
kody ASCII poszczególnych znaków;
29
3. Sparse-dotyczy dwuwymiarowych macierzy rzadkich podwójnej
precyzji; (macierz rzadka to taka macierz, w której
zapamiętywane są tylko elementy niezerowe; redukuje to
zapotrzebowanie pamięci);
4. Cell-typ komórkowy; elementy tablic komórkowych mogą
zawierać inne tablice;
5. Struct-typ strukturalny; tablice strukturalne odwołują się do
nazw pól, które mogą zawierać inne tablice;
6. Uint8-typ przeznaczony do efektywnego wykorzystania
pamięci; możliwe są takie operacje, jak zmiana wymiarów lub
kształtu tablicy, ale niedozwolone są żadne operacje
matematyczne;
Oprócz wymienionych typów istnieje typ UserObject, który jest
typem definiowanym przez użytkownika.
30
FUNKCJE PRZETWARZAJĄCE
FUNKCJE PRZETWARZAJĄCE
ŁAŃCUCHY
ŁAŃCUCHY
deblank(s)
usuwa spacje z końca łańcucha;
findstr(s1,s2)
szuka krótszego z łańcuchów s1 i
s2 w dłuższym; zwraca wektor
indeksów, od których zaczyna się
występowanie krótszego łańcucha;
lower(s)
zmienia wszystkie litery w
łańcuchu na małe;
strcat(s1,s2,.
..)
łączy łańcuchy w poziomie z
pominięciem spacji na końcu
każdego z nich;
strcmp(s1,s2
)
porównuje dwa łańcuchy; jeśli są
identyczne, zwraca 1, jeśli nie-0;
funkcja rozróżnia wielkość liter;
31
strcmpi(s1,s2)
porównuje dwa
łańcuchy bez
rozróżniania wielkości
liter;
strncmp(s1,s2,n)
porównuje n
pierwszych znaków w
dwu łańcuchach;
strvcat(s1,s2,s3)
łączy łańcuchy w
pionie, dodając na
końcu każdego z nich
odpowiednią liczbę
spacji; zwraca macierz
znakową;
upper(s)
zmienia wszystkie
litery w łańcuchu na
duże;
32
FUNKCJE KONWERTUJĄCE ŁAŃCUCHY
FUNKCJE KONWERTUJĄCE ŁAŃCUCHY
int2str(n)
konwertuje liczbę
całkowitą n na łańcuch
(liczba niecałkowita
przed konwersją
zostanie zaokrąglona);
argumentem funkcji
może być macierz;
num2str(x)
konwertuje wyrażenie
MATLAB-a (liczbę,
macierz lub polecenie)
na łańcuch;
str2double(s)
konwertuje łańcuch s
na liczbę (rzeczywistą
lub zespoloną); liczba w
łańcuchu musi mieć
prawidłowy format;
33
ŚRODOWISKO MATLABA
ŚRODOWISKO MATLABA
Okno poleceń. Funkcje obsługujące
okno poleceń.
clc
wyczyszczenie okna
poleceń i umieszczenie
kursora w jego lewym
górnym rogu;
hom
e
umieszczenie wiersza
poleceń i kursora w lewym
górnym rogu okna
poleceń;
34
echo on/echo
of
włącza/wyłącza wysyłanie na
ekran treści wykonywanych
poleceń;
more on/more
of
włącza/wyłącza
stronicowanie tekstów
wysyłanych na ekran;
diary plik
polecenia i teksty (bez
grafiki) wysyłane na ekran
będą zapisywane w pliku o
podanej nazwie;
diary of/on
przełącznik funkcji diary
35
Formaty liczb. Do określenia sposobu
wyświetlania liczb rzeczywistych w oknie służy
funkcja format. Użycie funkcji nie ma wpływu
na dokładność wykonywanych obliczeń, a tylko
na widok liczby na ekranie.
Format
Opis
Wynik dla 1/23
short
5-cyfr.liczba
stałopozycyjna (format
domyślny);
0,0435
short
e
5-cyfr.liczba
zmiennopozycyjna;
4,3478e-002
long
15-cyfr.liczba
stałopozycyjna;
0,03478260869
57
36
long
e
15-cyfr.liczba
zmiennopozycyjna;
4,347826086956522e-
002
short
g
5 znaczących cyfr liczby
stało- lub zmiennopozycyjnej;
0,043478
long
g
15 znaczących cyfr liczby
stało- lub zmiennopozycyjnej;
0,0434782608695652
hex
liczba szestnastkowa;
3fa642c8590b2164
+
drukuje znak + dla liczb
dodatnich,- dla ujemnych,
spację dla zera;
+
bank
format walutowy
0,04
rat
przybliża liczbę ułamkami
małych liczb całkowitych;
1/23
compac
t
wyłącza dodawanie
dodatkowych pustych
wierszy;
loose włącza ...
37
Przestrzeń robocza-obszar pamięci, w której
przechowywane są zmienne utworzone w
oknie poleceń. Funkcje obsługujące
zarządzanie pamięcią.
who
wyświetla listę wszystkich zmiennych
znajdujących się aktualnie w pamięci;
whos
wyświetla listę wszystkich zmiennych
wraz z informacją na temat ich rozmiaru
i rodzaju;
who global
whos global
wyświetlają informacje o zmiennych
globalnych;
clear
usuwa z pamięci wszystkie zmienne;
clear z
usuwa z pamięci zmienną z;
clear global z usuwa zmienną globalną z;
clear all
usuwa wszystkie zmienne i funkcje;
38
Funkcje obsługujące zapis i odczyt danych.
save
zapisuje binarnie wszystkie zmienne w
pliku matlab.mat;
save plik
zapisuje binarnie wszystkie zmienne w
pliku o nazwie plik.mat;
save plik
lista
zapisuje binarnie w pliku o nazwie plik.mat
tylko zmienne wymienione;
load
wczytuje zmienne zapisane w pliku
matlab.mat;
load plik
wczytuje zmienne zapisane w pliku
plik.mat;
load
plik.rozsz
wczytuje zmienne zapisane w pliku
tekstowym o podanej nazwie i dowolnym
rozszerzeniu; dane muszą tworzyć tablicę
prostokątną; zostaną zapisane w macierzy o
nazwie plik;
39
POLECENIA SYSTEMOWE
POLECENIA SYSTEMOWE
Katalog bieżący-zapisywane są w nim
pliki tworzone podczas pracy z
pakietem.
Funkcje obsługujące polecenia
systemowe:
dir lub ls
wyświetla pliki w bieżącym lub
podanym katalogu (dozwolone jest
użycie znaków masek *,?)
cd katalog
zmienia katalog bieżący na
podany
delete plik
usuwa plik o podanej
nazwie
pwd
wyświetla pełną ścieżkę
określającą katalog bieżący
!polecenie
wykonuje dowolne polecenie
systemu operacyjnego (np.. !type
matlab.txt wyświetli zawartość
pliku matlab.txt)
40
FUNKCJE MATLABA
Wbudowane-część jądra pakietu,
do których użytkownicy nie mają
dostępu (np..sqrt);
Implementowane w m-plikach-
przechowywane w ogólnie
dostępnych plikach (np..sinh);
takie m-pliki użytkownicy mogą
tworzyć sami;
41
LISTA ŚCIEŻEK
Lista ścieżek to lista katalogów, do
których Matlab ma dostęp.
Jest zdefiniowana w pliku
pathdef.m, znajdującym się w
podkatalogu toolbox\local katalogu
z Matlabem.
Można ją wyświetlać lub zmieniać.
42
FUNKCJE ZARZĄDZAJĄCE LISTĄ ŚCIEŻEK
path
wyświetla listę
ścieżek;
path(path,s1)
dodaje do listy
ścieżek katalog
określony
łańcuchem s1;
path(s1)
zmienia listę
ścieżek na
składającą się tylko
z katalogu
określonego
łańcuchem s1;
43
FUNKCJE OBSŁUGUJĄCE POMIAR CZASU
clock
podaje aktualną datę i czas w postaci
sześcioelementowego wektora
[rok miesiąc dzień godzina minuta
sekunda]
date
podaje aktualną datę w postaci
łańcucha o formacie:’dd-mmm-rrrr’
etime(t2,t
1)
podaje różnicę czasu, który upłynął
między chwilami t1 i t2 (t1, t2-wektory
o formacie, jak w poleceniu clock)
tic
zeruje odmierzanie czasu przed
użyciem polecenia toc
toc
podaje czas (w sek.), który upłynął od
momentu użycia polecenia tic
44
PROGRAMOWANIE W MATLABIE
Instrukcje sterujące działaniem
programu (control flow):
warunkowe:
if, switch
;
iteracyjne: for,
while
;
uzupełniające, różne: np..
break,
error, warning
;
45
Instrukcja warunkowa
if
:
if wyrażenie_logiczne1
instrukcje1
elseif wyrażenie_logiczne2
instrukcje2
else
instrukcje3
end
46
Operatory porównania
a==b
a~=b
a<b
a>b
a<=b
a>=b
47
Operatory logiczne
operator
opis
relacja
a I b
a&b
~a
alternatyw
a
koniunkcja
negacja
a lub b
a i b
nie a
48
Funkcje logiczne
all(A)
sprawdza,czy wszystkie elementy
wektora A są różne od 0 i zwraca 1
(„prawda”) lub 0 („fałsz”)
any(A)
sprawdza,czy którykolwiek z
elementów wektora A jest różny od
zera i zwraca 1 („prawda”) lub 0
(„fałsz”)
isequal(A,B,..
.)
zwraca 1, jeśli argumenty funkcji
są macierzami o jednakowym
rozmiarze i zawartości
isempty(A)
zwraca 1, jeśli macierz A nie ma
zawartości
49
Instrukcja warunkowa
switch:
switch wyrażenie
case wartość1
instrukcje
case wartość2
instrukcje
...
otherwise
instrukcje
end
50
Instrukcja iteracyjna
for
:
for zmienna=macierz_wartości
instrukcje
end
W praktyce wyrażenie
macierz_wartości
ma najczęściej
jedną z postaci:
minimum:maksimum
minimum:krok:maksimum
51
Instrukcja
while:
while wyrażenie
instrukcje
end
Instrukcje w bloku
while
są powtarzane
dopóty, dopóki część rzeczywista
wyrażenia
ma wszystkie elementy różne
od zera (warunek przyjmuje wartość
„prawda”). Postać
wyrażenia
jest taka
sama, jak w instrukcji
if.
52
SKRYPTY
Skrypt jest plikiem tekstowym o
rozszerzeniu .m (m-plikiem),
zawierającym polecenia i instrukcje
Matlaba.
Skrypty nie pobierają żadnych
argumentów wejściowych ani nie zwracają
argumentów wyjściowych-mogą tylko
operować na zmiennych dostępnych w
przestrzeni roboczej Matlaba.
53
Funkcje obsługi wejścia skryptu
x=input(tekst)
wyświetla łańcuch tekst, oczekuje na
wpisanie przez użytkownika danej
liczbowej i przypisuje ją zmiennej
liczbowej x; zamiast danej liczbowej
można wpisać wyrażenie Matlaba,
które funkcja obliczy
x=input(tekst,
’s’)
wyświetla łańcuch tekst, oczekuje na
wpisanie przez użytkownika łańcucha
znakowego i przypisuje go zmiennej x
pause
zatrzymuje wykonywanie skryptu do
momentu naciśnięcia dowolnego
klawisza
pause(n)
zatrzymuje wykonywanie skryptu na n
sekund
54
FUNKCJE
Pierwszy wiersz m-pliku musi
zawierać definicję nowej funkcji:
słowo kluczowe function;
nazwę funkcji-musi być taka sama,
jak nazwa pliku (bez rozszerzenia
.m), w którym znajduje się funkcja;
wartości funkcji (lista argumentów
wyjściowych);
parametry funkcji (lista
argumentów wejściowych).
55
Definicja funkcji:
function[wart_fun1,wart_fun2,...]=nazwa_funkcji(parametr1,parametr2,...)
%ewentualny opis funkcji w formie komentarza-w drugim
%wierszu pliku instrukcje
W ciele funkcji, wśród instrukcji, powinno się znaleźć
przypisanie:
wart_fun1=wynik1;
wart_fun2=wynik2;
...
56
PRZYKŁADY
Ćw.1 napisz m-plik wyznaczający wartość następującej
funkcji:
f(x)=1+x+x
2
/2 dla IxI<1
sin(1+x+x
2
/2 dla IxI>=1
dla wartości wprowadzonej z klawiatury.
%cw1.m
%wyznaczanie wartości funkcji niejednoznacznej
clc
clear
format compact
x=input(‘podaj x=‘)
f=1+x+0.5*x*x;
if abs(x)>=1
f=sin(f)
end
disp([‘f=‘,num2str(f)])
%dokonuje konwersji macierzy liczbowej na
%łańcuch
57
Ćw.2 w ćwiczeniu tym pokazuje się
łatwy sposób tworzenia i obsługi menu.
%cw2.m
%przykład wykorzystania instrukcji if
n=menu(‘0biekty’,’element iteracyjny 1-szego rzędu’,...
‘element oscylacyjny’,...
‘obiekt opóźniający’,...
‘obiekt całkujący’);
clc;
if n==1
disp(‘wybrałeś el.iter.1-szego rzędu’)
elseif n==2
disp(‘wybrałeś el.oscylacyjny’)
elseif n==3
disp(‘wybrałeś obiekt opóźniający’)
elseif n==4
58
disp(‘wybrałeś obiekt całkujący’)
end
%efektem tego m-pliku jest okno,pozwalające wybrać
%za pomocą myszy odpowiedni element.
%Funkcja menu zwraca wartość n zalężną od wybranej
% pozycji menu. Wartość n jest wykorzystywana
% następnie w instrukcji warunkowej if.
%n=menu(tytuł_menu,nazwa_1_pktu,nazwa_2_pktu,...)
%kreuje tzw.menu wyboru,nadając tworzonemu menu
tytuł_menu
% i nazwy poszczególnych w nim pozycji
59
ćw.3 napisać m-plik, który wyznacza równania
dwóch prostych: jedna z tych prostych
przechodzi przez punkty o współrzędnych
(x1,y1) oraz (x2,y2), a druga przez dany punkt
(x3,y3) oraz przez punkt o współrzędnych
(x4,y4) będący środkiem pierwszej prostej.
Wykreśl te proste oraz znajdź kąt pomiędzy nimi.
%cw3.m
%wyznaczanie prostych
clc
clear
format compact
%wprowadzenie danych
for i=1:3
x(i)=input([‘podaj x’,int2str(i),’=‘])
60
y(i)=input([‘podaj y’,int2str(i),’=‘])
disp(‘ ‘)
%pusta linia
end
x1=x(1)
x2=x(2)
x3=x(3)
y1=y(1)
y2=y(2)
y3=y(3)
%równanie prostej przechodzącej przez P1 i P2
[m1,n1]=prosta(x1,y1,x2,y2)
disp(‘równanie prostej przechodzącej przez P1 i
P2’)
disp([‘y=‘,num2str(m1),’x+’,num2str(n1)])
61
%równanie prostej przechodzącej przez P3 i P4
x4=(x(1)+x(2))/2
y4=(y(1)+y(2))/2
[m2,n2]=prosta(x3,y3,x4,y4)
disp(‘równanie prostej przechodzącej przez P3 i
P4’)
disp([‘y=‘,num2str(m2),’x+’,num2str(n2)])
if x(1)>x(2)
x=x(2):0.1:x(1)
else
x=x(1):0.1:x(2)
end
y1=m1*x+n1
y2=m2*x+n2
62
if m1==m2 & n1==n2
disp(‘proste pokrywają się’)
end
%wykresy obu funkcji
plot(x,y1,x,y2)
pause
close
%kąt pomiędzy prostymi
if ((m1>0) & (m2>0)) I ((m1<0) & (m2<0))
fi=atan(m1)-atan(m2)
disp(‘ radianów’)
else
fi=atan(m1)+atan(m2)
disp(‘ radianów’)
end
disp([‘tzn ‘,num2str(180*fi/pi),’ stopni’])
63
Funkcja pomocnicza: m-funkcja prosta.m:
%prosta.m, y=mx+n
function [m,n]=prosta(x1,y1,x2,y2)
%sprawdzanie poprawności danych
x(1)=x1;
y(1)=y1;
x(2)=x2;
y(2)=y2;
r=x(2)-x(1);
if abs( r )<1e-11*(abs(x(1))+abs(x(2)))
error(‘niepoprawne dane’)
else
n=1/r;
m=n*(y(2)-y(1));
n=n*(x(2)*y(1)-x(1)*y(2));
end
64
OPERACJE NA PLIKACH
Przed zapisaniem lub odczytaniem danych
należy otworzyć plik za pomocą funkcji
fopen:
id_pliku=fopen(nazwa_pliku,rodzaj_dostępu
)
gdzie:
nazwa_pliku-
łańcuch znaków z nazwą
otwieranego pliku’
rodzaj_dostępu
-łańcuch znaków o
dopuszczalnych wartościach jak w tabeli.
65
Wartość
argument
u
opis
‘r’
otwarcie pliku do odczytu
‘w’
usunięcie zawartości istniejącego
pliku lub otworzenie nowego i
otwarcie go do zapisu
‘a’
otwarcie pliku w celu dopisywania
elementów na jego końcu
‘r+’
otwarcie pliku do odczytu i zapisu
‘w+’
usunięcie zawartości istniejącego
pliku lub utworzenie nowego i
otwarcie go do odczytu i zapisu
‘a+’
otwarcie pliku w celu czytania lub
dopisywania elementów na jego
końcu
66
Funkcja
fopen
otwiera plik wskazany
łańcuchem
nazwa_pliku
i zwraca
unikatowy identyfikator pliku
(zmienną
id_pliku
). Identyfikator ten
powinien być używany we wszystkich
operacjach wejścia i wyjścia
wykonywanych na danym pliku. Jeśli
operacja otwarcia pliku zakończy się
sukcesem, zmienna
id_pliku
będzie
nieujemną liczbą całkowitą, w
przeciwnym wypadku przyjmie
wartość –1.
67
Druga postać wywołania funkcji
fopen
jest
następująca:
[id_pliku,informacja]=fopen(nazwa_pliku,rodzaj_dostęp
u)
Informacja
jest łańcuchem znakowym, który
może być pomocny w ustaleniu błędu. Jest on
zwracany kiedy operacja otwarcia pliku
zakończy się niepowodzeniem.
Zamknięcie pliku o podanym identyfikatorze:
status=fclose(id_pliku)
Zamknięcie wszystkich otwartych plików:
status=fclose(‘all’)
68
Zapisu elementów macierzy A w pliku
binarnym określonym identyfikatorem
id_pliku
dokonujemy przy pomocy funkcji
fwrite:
liczba=fwrite(id_pliku,A,typ)
Argument funkcji
typ
pozwala określić, na ilu
bitach
mają być zapisane dane i jak powinny być
zinterpretowane. Wartością domyślną
argumentu
jest
‘uchar’
.
69
Wartość
argument
u typ f-cji
fwrite
Interpretacja
‘uchar’
pojedynczy znak zapisany na 8
bitach bez znaku +/-
‘schar’
pojedynczy znak zapisany na 8
bitach, w tym jeden bit przeznaczony
na +/-
‘int8’,’int
16’,’int32
’,’int64’
liczba całkowita ze znakiem zapisana
odpowiednio na 8,16,32,64 bitach
‘’int8’,’int
16’,’int32
’,’int64’
liczba całkowita bez znaku
70
‘single’
liczba zapisana w formacie
zmiennopozycyjnym na 8 bitach
‘float32’
liczba zapisana w formacie
zmiennopozycyjnym na 16
bitach
‘double’
liczba zapisana w formacie
zmiennopozycyjnym na 32
bitach
‘float64’
liczba zapisana w formacie
zmiennopozycyjnym na 64
bitach
71
Odczyt plików binarnych:
A=fread(id_pliku,rozmiar,typ)
[A,liczba]=fread(id_pliku,rozmiar,typ)
Funkcja
fread
wczytuje dane z pliku
binarnego określonego przez
identyfikator
id_pliku
i zapisuje je w
macierzy A.
Rozmiar
określa liczbę
argumentów, które powinny zostać
wczytane z pliku.
72
Wartości
argument
u rozmiar
funkcji
fread
Opis
n
odczytuje n elementów i
zapisuje je w wektorze
kolumnowym
[m,n]
odczytuje tyle argumentów,
aby wypełniły kolumnami
macierz o rozmiarze mxn;
brakujące elementy są
zastępowane zerami
73
SFORMATOWANE PLIKI TEKSTOWE
Funkcja
fprintf
o wywołaniu:
liczba=fprintf(id_pliku,format,A,...)
zwraca liczbę zapisanych bajtów. Umożliwia
konwersję danych przechowywanych w części
rzeczywistej macierzy A kolumnowo na
łańcuchy znakowe i zapisanie ich w pliku
tekstowym o podanym identyfikatorze
id_pliku
.
Argument
format
jest łańcuchem znakowym
określającym m.in..rodzaj konwersji, szerokość
pola i liczbę cyfr znaczących każdej wymienionej w
funkcji
fprintf
macierzy.
74
Rodzaj
konwersji
Opis
%d
do zapisu liczb całkowitych
%f
do zapisu liczb rzeczywistych
w formacie stałoprzecinkowym
%e
do zapisu liczb rzeczywistych
w formacie
zmiennoprzecinkowym
%g
automatyczny dobór
krótszego formatu (%e lub %f)
%c
do zapisu pojedynczych
znaków
%s
do zapisu łańcuchów
znakowych
75
Znak
specjalny
opis
\b
cofnięcie o jeden znak
\f
nowa strona
\n
nowy wiersz
\r
powrót karetki
(przesunięcie kursora do
początku wiersza)
\t
znak tabulatora
\”
znak apostrofu
\\
znak lewego ukośnika
%%
znak procentu
76
Odczyt danych z pliku tekstowego o
identyfikatorze
id_pliku
dokonuje funkcja
fscanf
. Konwertuje ona dane w sposób
określony w argumencie format i zapisuje
w macierzy A:
A=fscanf(id_pliku,format,rozmiar)
[A,liczba]=fscanf(id_pliku,format,rozmiar)
Rozmiar
określa liczbę elementów, które
powinny zostać wczytane z pliku. Może
on przyjmować wartości identyczne jak w
wypadku funkcji
fread.
Polecenie
fscanf
dopuszcza takie same rodzaje konwersji,
jak funkcja
fprintf.
77
Funkcja
fprintf
może też wyświetlać
sformatowane dane na ekranie:
liczba=fprintf(format,A,...)
Wywołując funkcję
fprintf
, można
wymieniać po przecinku wiele macierzy,
które zostaną przekształcone na
łańcuchy znakowe, a następnie
zapisane w pliku kolumnami.