Raport z programów 1 i 2 (lista 4)
Rafał Rubiszewski 184123
Zadanie 1:
Treść:
Utwórz tablicę strukturalną do przechowywania danych pacjentów (np. numer PESEL,
nazwisko, imię, płeć, wzrost, wektor z kolejnymi wynikami pomiarów masy ciała).
Wprowadź trzech pacjentów.
a) Dokonaj analizy statystycznej wyników pomiarów masy ciała (średnia, odchylenie
standardowe). Wyniki wprowadź jako dodatkowe pole w strukturach.
b) Na podstawie numeru PESEL oblicz aktualny wiek pacjenta. Wyniki wprowadź jako
dodatkowe pole w struckturach.
c) Usuń pole PESEL (RMFIELD).
d) Usuń drugiego pacjenta.
Rozwiązanie:
% zad 1
clear all
clc
a=[77,78,76];
b=[56,52,55];
c=[80,81,80];
s=struct('PESEL',{00050859847,86072388547,68080811043},'nazwisko',...
{'Kowalski','Mika','Pipiri'},'imie',{'Jan','Paulina','Jakub'},...
'plec',{'M','K','M'},'wzrost',{196,174,164},'masa',{a,b,c});
%a)
for i=1:3
s(1,i).sr=mean(s(1,i).masa);
s(1,i).odch=std(s(1,i).masa);
end
%b
for i=1:3
x = datestr(now,'yyyy')
k=datestr(now,'yy')
r=eval(x);
r1=eval(k);
y=(s(1,i).PESEL)/10^9
if 00<y<k
s(1,i).wiek=round(r-(1900+y)-100);
else
s(1,i).wiek=round(r-(1900+y));
end
end
%c
s=rmfield(s,'PESEL');
%d
s(1,2).nazwisko={};
s(1,2).imie={};
s(1,2).plec={};
s(1,2).wzrost={};
s(1,2).masa={};
s(1,2).sr={};
s(1,2).odch={};
s(1,2).wiek={};
Opis rozwiązania:
Na samym początku tworzymy strukturę z trzema pacjentami, gdzie znajdują się podstawowe pola, czyli Imię, Nazwisk, Masa (trzy pomiary), Pesel, Płeć.
W podpunkcie a) dzięki pętli for uzupełniamy strukturę o dwie nowe wielkości, czyli średnia masa oraz jej odchylenie standardowe. Funkcje obliczające są funkcjami wbudowanymi.
W podpunkcie b) znów używamy pętli for do obliczania wieku pacjenta na podstawie peselu. Na samym początku tworzymy zmienną x, która jest rokiem obecnym. Możemy działać na tej danej, dzięki funkcji eval (można wykorzystać zmienną typu łańcuchowego jako instrukcję). Zmienna y, zostawia z nr pesel tylko i wyłącznie dwie pierwsze cyfry (rok narodzin) oraz dzięki funkcji round (najbliższa liczba całkowita).
Następnie dzięki dwóm warunkom liczymy wiek w zależności, czy osoba urodziła się po 2000 roku, czy przed. Rozwiązanie to zapewnia zawsze poprawne liczenie wieku, dodatkowo gwarantując nam to, ze nie trzeba co rok z zmieniać liczby zamykającej przedział osób urodzonych po 2000 roku (dodatkowa data regulująca to). Opracowane rozwiązanie, zakłada, że pacjent może mieć maksymalnie 99 lat.
W podpunkcie c) usuwamy pole pesel, które po obliczeniu wieku jest już zbędne. Operacje wykonujemy dzięki funkcji rmfield, która usuwa podane pole struktury.
W podpunkcie d) usuwamy wszystkie dane o pacjencie, poprzez czyszczenie wszystkich pól ( nadpisywanie obecnych danych, pustymi polami)
Zadanie 2:
Treść:
W wyniku pomiaru zależności wielkości y(x) otrzymano odpowiadające sobie x i y (plik:
Lista_4_z2_dane.txt). Jaką zależność wykazuje y(x)? Narysuj wykres punków pomiarowych
oraz krzywą dopasowania wraz z równaniem.
a) Dopasowanie za pomocą wielomianu (POLYFIT, POLYVAL)
b) Dopasowanie za pomocą funckji
(FIT, FITTYPE, FITOPTIONS)
Porównaj jakość dopasowania w obu przypadkach (współczynnik korelacji R2)
Rozwiązanie:
clear all
clc
dane=load('danedo4.txt');
x=dane(:,1);
y=dane(:,2);
plot(x,y,'p','Color','g')
%a
hold on
wspolczynniki=polyfit(x,y,5);
dopasowanie=polyval(wspolczynniki,x);
plot(x,dopasowanie,'m','Linewidth',2)
%b
o=fitoptions('Method','Nonlinear','Normalize','Off');
typ=fittype('1/(1+exp(-beta*x))','options',o);
[f2, parametry]=fit(x,y,typ);
beta=f2.beta;
y2=1./(1+exp(-beta.*x));
plot(x,y2,'b','Linewidth',2)
legend('pomiar','dopasowanie wielomianem','dopasowanie funkcja')
%Macierz korelacji dla dwóch metod dpasowania
R=corrcoef(x,y)
R1=corrcoef(x,y2)
Opis rozwiązania:
Na samym początku wczytujemy dane do programu z pliku txt, który został uprzednio podany. Dane zostają przedstawione na wykresie po przez funkcję plot, dodatkowo wykres został sformatowany (zielony kolor wykresu, dane wyświetlane jako ‘*’.
W podpunkcie a) na samym początku określiliśmy współczynniki wielomianu 5-stopnia, dzięki funkcji polyfit. Następnie obliczamy wartości wartości dla funkcji wielomianu o podanych współczynnikach dla podanych x, dzięki funkcji polyval. Na samym końcu zostaje narysowany wykres dopasowania wielomianem, który jest kolorem różowym i grubością linii 2.
W podpunkcie b) na początku ustaliliśmy opcje dopasowania dzięki funkcji fitoptions (można wybrać wiele opcji, my wybraliśmy m.in. że wykres ma być nieliniowy) następnie wedle opcji i podanego wzoru został dopasowane dane do aproksymacji oraz został narysowany dzięki funkcji plot kolorem niebieskim.
Na końcu widzimy funkcję legend, która pozwala nam utworzyć na wykresie legendę.
Współczynniki korelacji dal obu metod zostały policzone. Współczynniki korelacji są bardzo silne, jednak współczynnik dla drugiej metody są większe co oznacza, że druga metoda jest lepsza.