Ćw.12 Matlab4-Pliki, funkcje własne
Transkrypt
Ćw.12 Matlab4-Pliki, funkcje własne
Informatyka Ćw.6B Matlab – Zapis i odczyt pliku, własne funkcje Komunikacja z plikami Zapis tablicy do pliku tekstowego ASCII i jego odczyt Przeanalizować poniższy przykad: clc clear delete('mydata.dat') %usuń plik (bo inaczej dopisanie do ewentualne istniejącego pliku) a = magic(4) b = ones(2, 4) c = [8 6 4 2] save -ascii mydata.dat clear load mydata.dat disp('Dane z pliku:'); mydata a2=mydata(1:4, 1:4) Wyjaśnienia: - tablica kwadratwowa wygenerowana funkcją magic(N) (o rozmiarze N>2) posiada elementy typu całkowitego <N2 i te same sumy każego wiersza i każdej kolumny. - funkcja save tworzy plik tekstowy o podanej nazwie i zapisuje w nim wartości wszystkich zmiennych, - jeśli danymi są tablice (jak w powyższym przykładzie), muszą mieć one tyle samo kolumn, - funkcja load ładuje zawartość pliku do tablicy o nazwie takiej jak nazwa pliku, - aby dokonać rozdziału na poprzednie zmienne można stosować zapis: a2=mydata(1:4, 1:4) co oznacza: do zmiennej a2 przypisać z tablicy mydata komórki o podanych zakresach indeksów wierszy i kolumn. Zapis tablicy do pliku typu mat i odczyt pliku Binarne pliki z rozszerzeniem .mat umozliwiają zapis dowolnego zestawu zmiennych o różnych typach danych. Dostępne one są po załadowaniu pliku pod ich oryginalnymi nazwami. Przykład: clc clear delete plik.mat a=rand(3) b=6 c= -7 save plik.mat a b clear load plik.mat disp(a) disp(b) disp(c) %usuń plik jeśli istnieje %losowa tablica 3x3 %zapisz do pliku zmienne a i b %wyczyść wszystkie zmienne Oczywiście zmienna c nie będzie dostępna po załadowaniu pliku, bo jej nie umieścileśmy w matpliku. Definiowanie własnych funkcji w Matlabie Funkcje zdefiniowane przez użytkownika zapisujemy w osobnym pliku z rozszerzeniem .m. Postać ogólna funkcji: function zmienna (lub tablica zmiennych)= nazwa(argumenty) treść funkcji Przykład funkcji, której zadaniem jest obliczanie średniej arytmetycznej elementów wektora: Poniższy opis działania funkcji zapisujemy w pliku o nazwie srednia.m - takiej samej jak nazwa funkcji! – w naszym bieżącym katalogu. function wynik=srednia(x) suma=0; for i=1:length(x), % wbudowana funkcja length - określa rozmiar wektora suma=suma+x(i); end;% pętla sumująca wynik=suma/length(x); %obliczenie średniej Przykładowe wykorzystanie funkcji w naszym, własnym pliku: w=srednia([1 2 3 4 5 6]) albo M=[1 2 3 4 5 6] w=srednia(M) Można też wykorzystywać własną funkcję zapisaną w pliku funkcyjnym w innych m-plikach, pod warunkiem uzyskanego do niego dostępu. Uwaga: sprawdzenie spisu wszystkich ścieżek dostępu Matlaba (katalogów, których m-pliki mogą być wykorzystywane w naszym m-pliku) uzyskujemy poleceniem: path Dołączenie dodatkowej ścieżki przeszukiwań wykonać można poleceniem: path(path,'dysk:\ścieżka') Ćwiczenie Opracować własną funkcję do obliczania pola powierzchni i objętości kuli przy zadanym promieniu kuli R. Tworzymy m-plik o nazwie kula.m z kodem: function [pole objetosc]=kula(r) pole=4*pi*r^2; objetosc=4/3*pi*r^3; Zapisujemy aktualną zawartość pliku z funkcją. Tworzymy inny, własny m-plik, w którym piszemy przykładowo: clc, clear disp('Obliczenie pola powierzchni i objętości kuli'); promien=input('Podaj promień:'); [a b]=kula(promien); disp('Pole wynosi:') disp(a) disp('Objętość wynosi:') disp(b) Sprawdzamy działanie pliku. Zadania 1. Pliki z powyższego ćwiczenia wyposażyć w pętlę for obliczającą pola i objętości kul o promieniach od 10 do 15, z krokiem 1. 2. Utworzyć nowy katalog w dowolnej lokalizacji. Dołączyć go do ścieżki przeszukiwań. Przenieść do niego plik kula.m. Sprawdzić ścieżki dostępu. Sprawdzić działanie naszego m-pliku wykorzystującego utworzoną funkcję. 3. Opracować własną funkcję silnia dla obliczania n! (n silnia). Sprawdzić wykorzystanie tej funkcji w Matlabie. Porównać wynik dla dowolnego n z wynikiem predefiniowanej w Matlabie funkcji factorial(n). 4. Utworzyć własną funkcję do wyznaczania pierwiastków równania kwadratowego (ze sprawdzaniem warunków obliczalności pierwiastków rzeczywistych). 5. Utworzyć własną funkcję do dzielenia wektora na dwa mniejsze wektory. Argumentami funkcji będą: wektor wejściowy i liczba elementów jednego z wektorów składowych. 6. Skompresować pliki ćwiczenia i wyśłać do serwisu ISWN.