Raport z programów 1 i 2

Raport z programów 1 i 2 (lista 4)

Rafał Rubiszewski 184123

  1. Zadanie 1:

  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.

  1. Rozwiązanie:

  1. % zad 1

  2. clear all

  3. clc

  4. a=[77,78,76];

  5. b=[56,52,55];

  6. c=[80,81,80];

  7. s=struct('PESEL',{00050859847,86072388547,68080811043},'nazwisko',...

  8. {'Kowalski','Mika','Pipiri'},'imie',{'Jan','Paulina','Jakub'},...

  9. 'plec',{'M','K','M'},'wzrost',{196,174,164},'masa',{a,b,c});

  10. %a)

  11. for i=1:3

  12. s(1,i).sr=mean(s(1,i).masa);

  13. s(1,i).odch=std(s(1,i).masa);

  14. end

  15. %b

  16. for i=1:3

  17. x = datestr(now,'yyyy')

  18. k=datestr(now,'yy')

  19. r=eval(x);

  20. r1=eval(k);

  21. y=(s(1,i).PESEL)/10^9

  22. if 00<y<k

  23. s(1,i).wiek=round(r-(1900+y)-100);

  24. else

  25. s(1,i).wiek=round(r-(1900+y));

  26. end

  27. end

  28. %c

  29. s=rmfield(s,'PESEL');

  30. %d

  31. s(1,2).nazwisko={};

  32. s(1,2).imie={};

  33. s(1,2).plec={};

  34. s(1,2).wzrost={};

  35. s(1,2).masa={};

  36. s(1,2).sr={};

  37. s(1,2).odch={};

  38. s(1,2).wiek={};

  1. 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)

  1. Zadanie 2:

  1. 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)

  1. Rozwiązanie:

  1. clear all

  2. clc

  3. dane=load('danedo4.txt');

  4. x=dane(:,1);

  5. y=dane(:,2);

  6. plot(x,y,'p','Color','g')

  7. %a

  8. hold on

  9. wspolczynniki=polyfit(x,y,5);

  10. dopasowanie=polyval(wspolczynniki,x);

  11. plot(x,dopasowanie,'m','Linewidth',2)

  12. %b

  13. o=fitoptions('Method','Nonlinear','Normalize','Off');

  14. typ=fittype('1/(1+exp(-beta*x))','options',o);

  15. [f2, parametry]=fit(x,y,typ);

  16. beta=f2.beta;

  17. y2=1./(1+exp(-beta.*x));

  18. plot(x,y2,'b','Linewidth',2)

  19. legend('pomiar','dopasowanie wielomianem','dopasowanie funkcja')

  20. %Macierz korelacji dla dwóch metod dpasowania

  21. R=corrcoef(x,y)

  22. R1=corrcoef(x,y2)

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


Wyszukiwarka