Technická zpráva
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Technická zpráva
Základy programování v MatLabu
Vypracovala: Krystýna Lupínková
Úvod
Tato technická zpráva je součástí výstupu ze semestrální práce z předmětu Základy programování
v MatLabu. Cílem práce bylo vypracovat 4 samostatně zadané a na sebe nenavazující příklady. Každému
příkladu je věnována zvlášť jedna kapitola, která se bude skládat ze 3 podkapitol, a to sice zadání, napsaný
kód (obsah souboru s příponou .m k danému příkladu) a výstupu.
Všechny vypracované úlohy jsou přiloženy a odevzdány spolu s touto zprávou.
Příklad č. 1
Zadání
Napište m-soubor (funkci),kde vstupem bude vektor hodnot X a funkce bude vracet hodnoty základních
číselných charakteristik polohy (aritmetický průměr, dolní a horní kvartil, medián, modus, maximum,
minimum), variability (rozptyl, směrodatná odchylka, variační koeficient, rozpětí, mezikvartilové rozpětí),
tvarové charakteristiky (šikmost, špičatost) a ostatní (počet dat, suma) a budou uloženy ve strukturním
poli (Structure Array).
Funkce dále vykreslí grafy průzkumové analýzy dat (histogram hustoty + teoretická hustota
pravděpodobnosti N(x, s), krabicový graf, empirická distribuční funkce + teoretická distribuční funkce
N(x, s), histogram + jádrový odhad hustoty, normální pravděpodobnostní graf, Q-Q graf s teoretickými
kvantily normálního rozdělení), které budou v jednom grafickém okně.
Kód
function [vysledek]=Lupinkova_1(X)
% hodnoty základních èíselných charakteristik polohy (aritmetický prùmìr,
% dolní a horní kvartil, medián, modus, maximum, minimum), variability (rozptyl,
% smerodatna odchylka, variacni koeficient, rozpeti, mezikvartilove rozpeti),
% tvarové charakteristiky (¹ikmost, ¹pièatost) a ostatní (poèet dat, suma) a budou
% ulo¾eny ve strukturním poli (Structure Array).
% ciselne charakteristiky polohy
vysledek.max=max(X);
vysledek.min=min(X);
vysledek.prumer=mean(X);
vysledek.modus=mode(X);
vysledek.d_kvartil=quantile(X,0.25);
vysledek.h_kvartil=quantile(X,0.75);
vysledek.median=quantile(X,0.5);
% ... variability
vysledek.smerodatna_odchylka=std(X);
vysledek.rozptyl=var(X);
vysledek.variacni_koeficient=std(X)/mean(X);
vysledek.rozpeti=range(X);
vysledek.mezikvartilove_rozpeti=iqr(X);
% tvarove charakteristiky
vysledek.sikmost=skewness(X);
vysledek.spicatost=kurtosis(X);
vysledek.pocet_dat=numel(X);
vysledek.suma=sum(X);
rozmezi=vysledek.min:0.1:vysledek.max;
nbins = ceil(sqrt(numel(X)))*2;
%grafy
figure
%Histogram hustoty + teoretická hustota pravdìpodobnosti
pdf=normpdf(rozmezi,vysledek.prumer,vysledek.smerodatna_odchylka);
subplot(2,3,1),histogram(X,nbins),title('Histogram hustoty + teoreticka hustota
pravdepodobnosti')
hold on
plot(rozmezi,pdf)
legend('histogram','pravdepodobnost','Location','NW')
%krabicový graf
subplot(2,3,2),boxplot(X), title('krabicovy graf')
hold on
plot(rozmezi,pdf)
%empiricka distribucni funkce + teoreticka distribucni funkce
subplot(2,3,3),cdfplot(X),title('Empiricka a teoreticka distribucni funkce')
hold on
cdf=normcdf(rozmezi,vysledek.prumer,vysledek.smerodatna_odchylka);
plot(rozmezi,cdf,'r')
xlabel('X')
ylabel('F(X)')
legend('empiricka','teoreticka','Location','NW')
grid on
%histogram a jádrový odhad hustoty
subplot(2,3,4),histfit(X, nbins,'kernel'),
title('histogram a jadrovy odhad hustoty')
legend('histogram','jadrovy odhad hustoty')
%normální pravedpodobnostni graf
subplot(2,3,5),normplot(X)
title('Normalni pravdepodobnostni graf')
xlabel('Hodnota')
ylabel('Pravdepodobnost')
%Q-Q graf s teoretickými kvantily normálního rozdìlení
subplot(2,3,6), qqplot(X)
title('Q-Q graf s teoretickymi kvantily normalniho rozdeleni')
xlabel('Standartni quantily')
ylabel('Quantily vstupu')
grid on
end
Výstup
data = [1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 9, 9, 10];
Lupinkova_1(data);
ans =
struct with fields:
max: 10
min: 1
prumer: 6.4286
modus: 9
d_kvartil: 4
h_kvartil: 9
median: 7.5000
smerodatna_odchylka: 2.9539
rozptyl: 8.7253
variacni_koeficient: 0.4595
rozpeti: 9
mezikvartilove_rozpeti: 5
sikmost: -0.5666
spicatost: 1.9370
pocet_dat: 14
suma: 90
Příklad č. 2
Zadání
Je dána funkce tabulkou.
Metodou nejmenších čtverců odhadněte polynomy
, pro n = 1, 3, 5. Napište m-soubor
(skript) v MatLabu pro odhad koeficientù metodou nejmenších čtvercù. Využijte cyklus for. Nakreslete
graf pro výše uvedené polynomy a do grafu vyneste body s tabulky.
Kód
%zadani funkce tabulkou
x=[0.1 0.28 0.71 0.91 1.2 1.4];
y=[5.2 1.72 2.33 0.15 -0.48 -0.7];
z=0:0.01:1.5;
%priprava promennych na ulozeni koeficientu a hodnot
koeficienty = zeros(3, 6);
hodnoty = zeros(3, numel(z));
%vypocet koeficientu a hodnot pro stupne 1, 3, 5
for i = 1:1:3
stupen = i*2-1;
koeficienty(i, 1:stupen+1)=polyfit(x,y,stupen);
hodnoty(i, :) = polyval(koeficienty(i, 1:stupen+1), z);
end
%grafy
plot(x, y, 'X', MarkerSize=12, Color='black')
hold on
plot(z, hodnoty(1, :), 'r')
hold on
plot(z, hodnoty(2, :), 'g')
hold on
plot(z, hodnoty(3, :), 'b')
legend('Data','P1(x)','P2(x)','P3(x)')
xlabel('x')
ylabel('y')
grid on
Výstup
Příklad č. 3
Zadání
Vytvořte m-soubor (funkce), která vypoète prùmìr syntetického vlákna (kruhový průřez) v
mikrometrech, když vstupní parametry jsou t [dtex] a ρ [kg/m^3]. Pokud je průměr vlákna vyšší než 10
μm, vypše se text "průměr vlákna je vyšší než 10 mikrometrů", jinak text "průměr vlákna je nižší než 10
mikrometrů". Vyzkoušejte funkci pro PP vlákno (t = 2.2 dtex, ρ = 991 kg{m3 ) a ocel-nerezové vlákno (t =
3.85 dtex, ρ = 8000 kg/m^3 ).,
Kód
function [d] = Lupinkova_3(t, ro)
% vypocet prumeru + prepocet jednotek (tex = 0.1*dtex)
%vypocet prumeru v metrech
d = 2*sqrt(t*0.1)/sqrt(ro*pi*10^6);
%prevod na mikrometry
d = d*10^6;
if d>10
disp("Prumer vlakna je vyssi nez 10 mikrometru");
else
disp("Prumer vlakna je nizsi nez 10 mirkometru");
end
end
Výstup
Pro PP vlákno: d = 16.8124 μm.
Pro ocel-nerezové vlákno: d = 7.8278 μm.
Příklad č. 4
Hodnocena byla stínící účinnost (SE) plošné textilie v závislosti na obsahu vodivé komponenty v
materiálu. x - nezávisle promìnná, obsah vodivé komponenty P [%], y - závisle proměnná, stínící účinnost
SE [dB]. Předpokládejte, že data pocházejí z normálního rozdělení.
Vytvořte m-file (skript), který:
• vykreslí bodový graf průměrných hodnot stínící účinnosti SE na obsahu vodivé komponenty +
95% intervaly spolehlivosti pro střední hodnotu
• do stejného grafu vykreslí model, funkci SE = 14 * P^0.3
• vloží legendu popisující význam bodů a spojité čáry
Kód
% Hodnoty ze zadani
P = [1 3 5 10 15 20 40 60 75];
SE = [13.50 20.30 23.70 29.50 31.90 36.50 40.70 46.20 52.10
13.60 21.10 23.80 28.60 32.50 33.70 41.50 45.00 49.90
12.40 19.70 24.90 29.90 32.40 34.60 39.70 45.80 51.60
12.90 20.50 23.10 29.20 31.90 34.20 42.20 45.20 48.70
12.70 21.20 24.70 27.80 32.90 34.40 42.00 43.60 49.80
13.20 19.90 24.00 28.50 32.00 34.50 42.50 45.10 49.10
12.80 20.30 24.00 29.60 31.10 35.80 42.60 44.90 50.40
12.50 20.30 23.40 28.90 32.80 33.10 43.60 44.00 50.00
13.10 21.10 23.80 28.40 33.30 35.30 40.90 43.30 50.10
13.30 19.50 22.50 28.40 34.20 35.30 40.20 44.10 50.80];
%stredni hodnota a 95% interval spolehlivosti
[muHat,~,muCI,~] = normfit(SE, 0.5);
% funkce SE = 14 * P^0.3
fSE = 14*P.^0.3;
%odchylky
odchylky = muCI(2,:)-muHat;
%graf
plot(P, muHat, 'o', Color='black');
hold on
plot(P, fSE, 'r');
hold on
errorbar(P, muHat, err,'k+');
xlabel('P [%]');
ylabel('SE [dB]');
legend('hodnoty', 'f_SE(P)=14*P^0.3', '95% int. spolehlivosti', 'location', 'SE');
Výstup
Závěr
Během vypracovávání této semestrální práce jsme si vyzkoušeli práci s MatLabem a využili jsme
vědomostí, zkušeností a dovedností ze semestru. Dále jsme si díky této práci uvědomili, že MatLab lze
použít v mnoha úlohám různého typu a v různých oborech. Díky tomu lze říci, že MatLab je, hlavně pro
technicky zaměřené obory, neodmislitelnou součástí a nástrojem, který nám umožňuje poměrně rychle
vypočítat různé hodnoty a graficky vykreslit vložená data.