Ć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.