Laboratorium Algorytmy Obliczeniowe Lab. 9 Prezentacja wyników w Matlabie 1. Wyświetlanie wyników na ekranie: W Matlabie możliwe są następujące sposoby wyświetlania wartości zmiennych: a. wpisując w programie nazwę zmiennej bez zakończenia linii średnikiem, np.: a spowoduje wyświetlenie na ekranie: a=1. b. wykorzystanie funkcji disp: Nazwę zmiennej podajemy jako argument funkcji, np.: disp(a); spowoduje wyświetlenie na ekranie wartości 1. W przypadku funkcji disp jest możliwe jednoczesne wyświetlenie tekstu i wartości zmiennej, jednak trzeba pomóc sobie funkcją num2str (dokonuje zamiany wartości liczbowej na tekst), np.: disp([ Wartość zmiennej a wynosi: num2str(a)]); Metoda ta nie działa w przypadku macierzy! c. wykorzystanie funkcji fprintf: Funkcja fprintf pozwala zapisywać do pliku lub wyświetlać jednocześnie tekst i wartości zmiennych. Pozycję zmiennej w tekście określamy dedykowanym ciągiem znaków specjalnych rozpoczynającym się symbolem %, np.: fprintf( Wartość zmiennej a wynosi %d, a); spowoduje wyświetlenie na ekranie tekstu: Wartość zmiennej a wynosi 1. Możliwe jest też określenie maksymalnej liczby wyświetlanych znaków części całkowitej i ułamkowej liczby, np.: fprintf( %4.2f, a); spowoduje wyświetlenie wartości zmiennej a na maksymalnie 4 znakach części całkowitej i maksymalnie 2 znakach części ułamkowej. Znaki specjalne używane w funkcji fprintf przedstawiono w tabeli: ciąg znaków %c %d %e %f %o %s %u %x Sposób wyświetlania pojedyncza litera lub cyfra liczba całkowita liczba w zapisie wykładniczym, np. 3.1415e+00 zapis stałoprzecinkowy zapis w systemie ósemkowym tekst ciąg znaków liczba całkowita bez znaku zapis w systemie szesnastkowym (HEX)
2. Zapis danych do pliku i wczytywanie wartości zmiennych z pliku W Matlabie istnieje wiele sposobów zapisu danych do pliku. Najpopularniejsze to: a. Korzystając z funkcji fopen i fprintf: fid = fopen(nazwa pliku, uprawnienia); fprintf(fid, tekst i format zmiennych, zmienne); Podawanie uprawnień do wykonywania operacji na pliku w funkcji fopen jest opcjonalne. Możemy wyróżnić następujące uprawnienia: r odczyt z istniejącego pliku w zapis do istniejącego lub utworzonego pliku a zapis z dopisywaniem do istniejącej zawartości r+ odczyt i zapis do istniejącego pliku w+ odczyt i zapis do istniejącego lub utworzonego pliku a+ odczyt i zapis z dopisywaniem do istniejącej zawartości istniejącego lub utworzonego pliku. fid = fopen( wyniki.txt, w+ ); fprintf(fid, Wartość zmiennej a wynosi %d,a); b. Korzystając z funkcji save: save(nazwa pliku, zmienne, -append, format); Opcjonalny argument append określa że dane mają zostać dopisane na końcu pliku do istniejącej zawartości. format określa sposób zapisu pliku spośród dostępnych opcji: -mat plik danych Matlaba -ascii plik tekstowy z zapisem liczb na 8 znakach -ascii, -tabs plik tekstowy z zapisem liczb na 8 znakach i oddzielaniem liczb tabulatorami -ascii, -double plik tekstowy z zapisem liczb na 16 znakach -ascii, -double, -tabs plik tekstowy z zapisem liczb na 16 znakach i oddzielaniem liczb tabulatorami b=2; save( wyniki.txt, a, b, -ascii ); c. Korzystając z funkcji dlmwrite: dlmwrite(nazwa pliku, zmienna, znak odstępu ); Opcjonalny argument znak odstępu określa w jaki sposób kolejne wartości są oddzielane od siebie, np. \t oznacza tabulator. dlmwrite( wyniki.txt, a, \t );
W przypadku odczytu danych z pliku mamy odpowiednio 3 możliwości: a. Korzystając z funkcji fopen i fscanf: fid = fopen(nazwa pliku, uprawnienia); [zmienne] = fscanf(fid, format zmiennych); fid = fopen( wyniki.txt, r ); a = fscanf(fid, %f ); b. Korzystając z funkcji load: [zmienne] = load(nazwa pliku); [a,b] = load( wyniki.txt ); c. Korzystając z funkcji dlmread: [zmienne] = dlmread(nazwa pliku, znak odstępu); a = dlmread( wyniki.txt, \t ); 3. Tworzenie wykresów a. Użyteczne uwagi: Przy tworzeniu wykresów przydatne mogą być następujące polecenia definiujące wygląd wykresów: figure tworzy nowe okno wykresu, grid on/grid off włącza/wyłącza widok siatki wartości na wykresie, hold on/hold off włącza/wyłącza dopisywanie nowych wykresów do istniejących w tym samym oknie, title( tekst ) dodaje tytuł wykresu, xlabel( tekst ), ylabel( tekst ) dodają tytuły osi odpowiednio X i Y axis([x min, x max, y min, y max ]) określa zakresy osi X i Y, legend( tekst1, tekst2, ) wyświetla legendę z opisem poszczególnych wykresów; subplot(m,n,p) dzieli okno z wykresem na tabelę o m wierszach i n kolumnach i na pozycji p umieszcza kolejny wykres; to polecenie pozwala umieścić kilka wykresów w jednym oknie, np.:
x=0:.1:2*pi; subplot(1,2,1); plot(x,sin(x)); subplot(1,2,2); plot(x,cos(x)); b. Zwykły wykres plot: plot(argument x1, argument y1, definicja wyświetlania linii i znaczników, ) x = -pi:.1:pi; y=sin(x); plot(x,y); Istnieją też wersje wykresów 2 D z osiami w skali logarytmicznej: semilogx(argument x1, argument y1, definicja wyświetlania linii i znaczników, ) wykres z osią X w skali logarytmicznej semilogy(argument x1, argument y1, definicja wyświetlania linii i znaczników, ) wykres z osią Y w skali logarytmicznej loglog(argument x1, argument y1, definicja wyświetlania linii i znaczników, ) wykres z osią X i Y w skali logarytmicznej
c. Wykres słupkowy bar: bar(argument x, argument y, kolor, ); x = -2.9:0.2:2.9; bar(x,exp(-x*x), r ); d. Wykres kołowy pie: pie(argument x, explode); x = [1 3 0.5 2.5 2]; explode = [0 1 0 0 0]; pie(x,explode); e. Wykres konturowy contour (argumenty są macierzami):: contour(argument x, argument y, argument z, definicja wyświetlania linii, ) [X,Y] = meshgrid(-2:.2:2,-2:.2:3); Z = X.*exp(-X.^2-Y.^2); contour(x,y,z);
f. Wykresy 3 D: Wykres siatkowy mesh (argumenty są macierzami): mesh(argument X, argument Y, argument Z); [X,Y] = meshgrid(-8:.5:8); R = sqrt(x.^2 + Y.^2) + eps; Z = sin(r)./r; mesh(x,y,z); Wykres powierzchniowy surf (argumenty są macierzami): surf(argument X, argument Y, argument Z); [X,Y] = meshgrid(-8:.5:8); R = sqrt(x.^2 + Y.^2) + eps; Z = sin(r)./r; surf(x,y,z); colormap hsv; colorbar;