Compare commits

..

9 Commits

Author SHA1 Message Date
437aa678fc Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-06-20 14:19:07 +02:00
36028899bc Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-06-20 14:18:45 +02:00
f3cebb936b bla 2026-06-20 14:18:38 +02:00
fdcf4b4a3d blabla 2026-06-20 14:17:14 +02:00
4951da8fd9 Merge branch 'master' of github.com:szymon-jozef/ZUT-notatki 2026-06-14 19:09:56 +02:00
2237683c00 hehehehe 2026-06-14 19:09:49 +02:00
4cf7dce6fc blallblabla 2026-06-09 09:18:05 +02:00
0d7c0d381a probne kolokwium 2026-05-31 20:27:11 +02:00
f9fce835d5 dsa;lkfj 2026-05-31 14:59:03 +02:00
37 changed files with 1764 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,54 @@
# Logika
- Prawo de'morgana przy negacji alternatywy lub koniunkcji zamieniamy też ze sobą działania
- suma indeksowanej rodziny zbiorów elementy które występują w co najmniej jednym
- iloczyn indeksowanej rodziny zbiorów elementy które wystęupją w każdym
# Abstrakcja
- Izomorfizm bijekcja, która zachowuje funkcje i relacje.
- Homomorfizm odwzorowanie jednej algebry liniowej(np. pierścienia) w drugą przy zachowaniu odpowiednich działań
- Automorfizm izomorfizm na samym sobie, czyli odwzorowanie struktury na samą siebie przy zachowaniu działań itp.
# Relacje
- piwo z kolegami
- zwrotność (każda ze sobą)
- symetryczność (działa w dwie strony)
- przechodniość (jeśli xRy i yRz to xRz)
- relacja równoważności, gdy spełnia wszystko powyżej
- antysymetryczność (xRy i yRx wtedy i tylko wtedy gdy x = y)
# Struktury
- Grupa struktura algebraiczna definiowana jako zbiór z określonym na nim łącznym i odwracalnym dwuargumentowym działaniem wewnętrznym[1]; szczególny przypadek monoidu, w którym każdy element ma element odwrotny (zob. Podobne struktury).
- Iniekcja każdy argument ma przypisaną tylko jedną wartość i żadne dwa argumenty nie dają tej samej wartości. Innymi słowy jest różnowartościowa.
- Suriekcja zbiór wartości pokrywa się z przeciwdziedziną (każdy element przeciwdziedziny jest użyty)
- Bijekcja iniekcja i suriekcja na raz. Liczba bijekcji to $n!$ gdzie n to ilość el. zbioru.
- działanie wewnętrzne operacjie nie wyrzucają nas z danego zbioru
- rozdzielność $a \cdot (b + c) = (a \cdot b) + (a \cdot c)$
- półgrupa nie potrzebuje el. neutralnego i odwrotnego
# Grafy
- Graf podstawowy obiekt rozważań teorii grafów, struktura matematyczna służąca do przedstawiania i badania relacji między obiektami. W uproszczeniu graf to zbiór wierzchołków, które mogą być połączone krawędziami w taki sposób, że każda krawędź kończy się i zaczyna w którymś z wierzchołków.
- Graf planarny graf który można narysować nie przecinając linii na kartce.
- Graf spójny każda para wierzchołków jest połączona
- Twierdzenie Kuratowskiego graf jest planarny, jeśli nie zawiera podgrafu, który jest grafem rozszerzonym grafu $K_5$ lub $K_{3,3}$. Innymi słowy: graf jest planarny jeśli nie jest stworzony z pentagramu/3 kropek na góra-dół.
- Macierz incydencji pokazuje gdzie wierzchołki grafu mają krawędzi. Wiersz to wierzchołek, a kolumny to krawędzi. Jeśli jest $0$ to nie styka się, jeśli liczba $< 0$ to wchodzi do wierzchołka, a jeśli $> 0$ to z niego wychodzi.
# Teoria liczb
- $ax + by = c$, przy takim zapisie szukamy $NWD(a, b)$ i sprawdzamy czy dzieli liczbę c. Uzywamy rozszerzonego algorytmu Euklidesa
- Hinolskie twierdzenie o resztach służy do rozwiązywania układów równań.
Ważne wzory:
$$
\begin{align}
N &= n_i \cdot n_{i + 1} \cdot \ ...\ \cdot n_k \\
N_i &= \frac{N}{n_i} \\
N_i \cdot y_i &\equiv 1 \pmod{n_i} \\
x &= \sum_{i = 1}^{k}({a_i \cdot N_i \cdot y_i}) \pmod{N}
\end{align}
$$
# Euklides
Mamy NWD(a,b), gdzie a > b
1. Rozpisujemy a za pomocą b $a = b \cdot x + r$, gdzie x to wielokrotność a r reszta
2. rozpisujemy b za pomocą r
3. powtórz, aż dojdziesz do momentu gdy $r = 0$
Rozszerzenie polega na robieniu tego samego ale w drugą stronę

View File

@@ -0,0 +1,15 @@
Funkcje rekurencyjne są trudne i często nierozwiązywalne.
Równania liniowe jednorodne.
Funkcja afiniczna nie jest liniowa.
$$
\begin{align}
a_{n + 1} &= 4 \cdot a_n \\
a_{a} &= 1 \\
a_{i} &= 0 \\
\end{align}
$$

View File

@@ -0,0 +1,27 @@
24 punkt suma, od 17 zdajesz
14 pytań zamkniętych, 10 otwartych
# Zadania zamknięte, które na pewno będą$1$!!!!!!!!
$$
\begin{align}
P(a < X < b) \\
P(a <= X <= b) \\
P(X > a) \\
P(X >= a) \\
\end{align}
$$
Statystyka $Tn$ jest estymatorem najefektywniejszym jeśli
Pytanie o współczynnik korelacji i jego interpretacje
# Otwarte
Prawdopodobieństwo geometryczne
Standaryzacja rozkładu normalnego
Zawsze do policzenia współczynnik korelacji, ale używać skróconych ułamków z pierwiastkiem
Funkcja charakterystyczna, wzory których __nie ma na kartach__. $EX to \frac{\phi(0)}{i}$ a $EX^2 = -\phi''(0)$

View File

@@ -0,0 +1,13 @@
Version: 1.0
RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8
RnwWeave: Sweave
LaTeX: pdfLaTeX

View File

@@ -0,0 +1,701 @@
#### === LAB 7 Zarządzanie danymi i elementami statystyki opisowej==== ####
# Ogólne manipulowanie zestawem danych
## Wyświetlenie podsumowania danych
### przed faktoryzacją
summary(Ankieta)
Ankieta$Płeć = factor(Ankieta$Płeć) # <- ustawiamy płeć jako zmienną kategorialną
### po faktoryzacji
summary(Ankieta)
Ankieta$Sysytem = factor(Ankieta$System)
Ankieta$M.zamieszkania = factor(Ankieta$M.zamieszkania)
Ankieta$Sz.średnia = factor(Ankieta$Sz.średnia)
Ankieta$Rodzeństwo = factor(Ankieta$Rodzeństwo)
## Dodanie kolumny
Ankieta$Średnia = round(((Ankieta$Algebra * 5 + Ankieta$Fizyka * 5 + Ankieta$Programowanie1 * 5 + Ankieta$MSzS1 * 5 + Ankieta$Algorytmy1 * 6 + Ankieta$WdI * 4) / 30), 2); # Po prostu wpisujemy co chcemy
## Skopiowanie kolumny z ocenami (subset)
Ankieta$Średnia = round(((Ankieta$Algebra * 5 + Ankieta$Fizyka * 5 + Ankieta$Programowanie1 * 5 + Ankieta$MSzS1 * 5 + Ankieta$Algorytmy1 * 6 + Ankieta$WdI * 4) / 30), 2); # select pozwala wybrac konkretne kolumny poprzez wektor
## Dodanie i likwidacja kolumny
Ankieta$Waga.dag = Ankieta$Waga * 100 # <- dodaje
Ankieta$Waga.dag = NULL # <- likwiduje
# Wykres ramka-wąsy
ggplot(Ankieta, aes(x=Ankieta$Płeć, y=Ankieta$Waga)) + geom_boxplot(fill='red', col='purple') # x zmienna kategorialna, y zmienna mierzalna
## funkcja
zakres3sigm = function(x) {
data.frame(lewy.kres=mean(x) - 3 * sd(x), prawy.kres=mean(x) + 3 * sd(x))
}
## Podzbiory
Ankieta.M = subset(Ankieta, Ankieta$Płeć == 'M')
Ankieta$L.g.kody = cut(Ankieta$L.godzin, breaks = c(0, 4, 8, 24), labels = c("krótko", "średnio", "długo"), include.lowest = TRUE)
table(Ankieta$L.g.kody)
#### === LAB 8 Parametry opisowe === ####
# zadanie 1
p.opisowe = function(wektor) {
library(moments)
srednia = round(mean(wektor), 2)
mediana = round(median(wektor), 2)
kwartyl_dolny = round(quantile(wektor, 1/4), 2)
kwartyl_gorny = round(quantile(wektor, 3/4), 2)
minimum = round(min(wektor), 2)
maximum = round(max(wektor), 2)
odchylenie = round(sd(wektor), 2)
rozstep_empiryczny = round(max(wektor) - min(wektor), 2)
rozstep_kwartylowy = round(IQR(wektor), 2)
wspolczynnik_zmiennosci = round(sd(wektor)/mean(wektor) * 100, 2)
skosnosc = round(skewness(wektor), 2)
kurtoza = round(kurtosis(wektor), 2)
rbind(srednia, mediana, kwartyl_dolny, kwartyl_gorny, minimum, maximum, odchylenie, rozstep_empiryczny, rozstep_kwartylowy, wspolczynnik_zmiennosci, skosnosc, kurtoza)
}
# zadanie 2
# współczynnik zmienności
# |V| <= 10% słaba zmienność
# 10% < |V| <= 50% umiarkowana zmienność
# |V| > 50% duża zmienność
# skośność (współczynnik asymetrii)
# |G| <= 0.5 słaba
# 0.5 < |G| < 1 umiarkowana
# |G| > 1 duża silna asymetria
# G < 0 lewostronna
# G > 0 prawostronna
# G = 0 symetria (prawie się nie zdarza)
# kurtoza (współczynnik skupienia/spłaczszczenia)
# K = 3 rozkład normalny
# K < 3 niższe skupienie niż w rozkładzie normalnym
# K > 3 wyższe skupienie niż w rozkładzie normalnym
# a)
p.opisowe(Ankieta$Wzrost)
# kwartyl_dolny 174.00 wzrost 25% mężczyzn nie przekroczył 174
# odchylenie 7.16 wzrost mężczyzn odchylał się od średniej wzrostu przeciętnie o około 7.16
# wspolczynnik_zmiennosci 3.98 udział odchylenia standardowego wzrostu w wartości średniej wynosi 3.98 co świadczy o tym, że mężczyźni są słabo zróżnicowani pod względem wzrostu
# skosnosc 0.20 rozkład wzrostu mężczyzn charakteryzuje się słabą asymetrią prawostronną
# b)
p.opisowe(Ankieta$Średnia)
# mediana 3.80 średnia 50% studentów w badanej grupie nie przekroczyla 3.80
# kwartyl_gorny 4.24 średnia 75% studentów w badanej grupie nie przekroczyla 4.24
# c)
p.opisowe(Ankieta$L.godzin)
# srednia 7.07 czas spędzany przy komputerze w badanej grupie skupiał się wokół wartości 7.07
# kurtoza 2.55 rozklad czasu spędzanego przy komputerze w badanej grupie charakteryzuje się niższym skupieniem wokół średniej wagi niż w rozkładzie normalnym.
# zadanie 3
przedzial.odchylenie = function(x, uf) {
# 1 - a = uf
# a = 1 - uf
a = 1 - uf
n = length(x)
ss_z_daszkiem = var(x)
# s^2 = (n - 1)/n * ss_z_daszkiem
ss = (n - 1)/n * ss_z_daszkiem
dolna = sqrt((n * ss) / qchisq(1 - (a / 2), n - 1))
gorna = sqrt((n * ss) / qchisq(a / 2, n - 1))
round(cbind(dolna, gorna), 4)
}
przedzial.odchylenie(Ankieta.M$Wzrost, 0.95)
# zadanie 4
# a)
ggplot(data.frame(x=c(-4, 4)), aes(x))+ylab('Gęstość rozkładu studenta')+ stat_function(fun=dt, args=1, col='red', size=1) + stat_function(fun=dt, args=2, col='pink', size=1) + stat_function(fun=dt, args=10, col='green', size=1) + stat_function(fun=dt, args=50, col='blue', size=1)
# b)
ggplot(data.frame(x=c(-1, 100)), aes(x))+ylab('Gęstość rozkładu chi kwadrat') + stat_function(fun=dchisq, args=5, col='red', size=1) + stat_function(fun=dchisq, args=10, col='blue', size=1) + stat_function(fun=dchisq, args=20, col='green', size=1) + stat_function(fun=dchisq, args=50, col='pink', size=1)
#### === LAB 9 Estymacja i testowanie hipotez dla jednej populacji === ####
# zadanie 1
# a)
# założenie: normalność rozkładu test shapiro-wilka
# hipoteza podstawowa h0 rozkład wzrostu w populacji mężczyzn jest normalny
# hipoteza h1 nieprawda, że h0
shapiro.test(Ankieta.M$Wzrost)
# Statystyka testowa W = 0.9598, p-value = 0.04048
# alpha = 0.01 # poziom istotności
# wniosek alpha < p-value, więc na poziomie istotności 0.01 nie ma podstaw do odrzucenia h0, że rozkład wzrostu w populacji mężczyzn jest zgodny z rozkładem normalnym.
# b)
# przedzial ufności dla wartości średniej w populacji (mężczyzn)
t.test(Ankieta.M$Wzrost, conf.level = 0.95)
# 178.0049 181.6403
# interpretacja: przedział liczbowy od 178.0049 do 181.6403 z prawdopodobieństwem 0.95 obejmuje nieznaną wartość średnią wzrostu w populacji mężczyzn studiujących na pierwszym roku WI ZUT w Szczecinie w tym roku akademickim (2025/2026)
t.test(Ankieta.M$Wzrost, conf.level = 0.98)
# 177.6509 181.9942
przedzial.odchylenie(Ankieta.M$Wzrost, 0.97)
# 5.9801 8.8895
# interpretacja: przedzial o końcach 5.9801 i 8.8895 [cm] z ufnością 0.97 obejmuje rzeczywistą wartość odchylenia standardowego wzrostu w populacji mężczyzn studiujących na pierwszym roku WI ZUT w Szczecinie w tym roku akademickim.
# d)
# test dla wartości średniej w populacji
# hipoteza h0: m = 180
# hipoteza h1: m > 180
t.test(Ankieta.M$Wzrost, mu = 180, alternative = 'g')
# statystyka testowa t = -0.19518, df = 61, p-value = 0.577
# alpha = 0.01
# alpha < p-value, więc
# na poziomie istotności 0.01 nie ma podstaw do odrzucenia hipotezy h0. Nie można zatem potwierdzić hipotezy, że średni wzrost mężczyzn w badanej populacji jest większy niż 180 cm.
table(Ankieta$Sz.średnia)
# LO(RM) = 22
# a)
# przedział ufności dla odsetka (wskaźnika struktury, frakcji, procentu, proporcji)
prop.test(22, 72, conf.level = 0.98)
# 0.1909 0.4489
# te końce nie mają jednostek!
# interpretacja: przedział o końcach 0.1909 i 0.4489 z ufnością 0.98 obejmuje rzeczywistą wartość odsetka osób, które ukończyły LO(RM) w badanej populacji.
# b)
# test dla wskaźnika struktury
# hipoteza h0: p = 45%
# hipoteza h1: p < 45%
prop.test(22, 72, p = 0.45, alternative = 'l')
# statystyka testowa X-squared = 5.5, df = 1, p-value = 0.009508
# alpha = 0.05
# alpha > p-value, więc
# odrzucamy h0
# Alpha jest większa niż p-value, więc na poziomie istotności 0.05 odrzucamy hipotezę h0 i przyjmujemy h1, zatem odsetek osób, które ukończyły LO(RM) w badanej populacji studentów jest istotnie mniejszy, niż 45%.
# zadanie 3
# a)
# hipoteza h0: rozkład wagi w populacji kobiet jest normalny
# hipotezea h1: rozkład wagi w populacji kobiet nie jest normalny
shapiro.test(Ankieta.K$Waga)
# W = 0.94975, p-value = 0.6656
# alpha = 0.05
# alpha < p-value, więc
# na poziomie istotności 0.05 nie ma podstaw do odrzucenia h0, że rozkład wagi w populacji kobiet jest normalny
# b)
t.test(Ankieta.K$Waga, conf.level = 0.98)
# 49.34915 63.85085
# interpretacja: przedział o końcach 49.34915 i 63.85085 [kg] z ufnością 0.98 zawiera rzeczywistą wartość średniej wagi w populacji wszystkich kobiet studiujących na I roku WI
# zadanie 4
# a)
table(Ankieta$M.zamieszkania)
# akademik = 23
prop.test(23, 72, conf.level = 0.995)
# 0.1842 0.4918
# interpretacja: przedział o końcach 0.1842 i 0.4918 z ufnością 0.995 obejmuje rzeczywistą wartość odestka osób, które mieszkają w akademiku podczas studiowania na pierwszym roku kierunku informatyka na WI ZUT w Szczecinie w tym roku akademickim
# b)
# hipoteza h0: p = 0.35
# hipoteza h1: p != 0.35
prop.test(23, 72, p = 0.35, alternative = 'two.sided')
# X-squared = 0.17643, df = 1, p-value = 0.6745
# alpha = 0.05
# alpha < p-value, więc
# odrzucamy h0
# wniosek: Alpha jest mniejsze, niż p-value, więc nie ma podstaw do odrzucenia h0, że odsetek osób, które mieszkają w akademiku w populacji wszystkich studentów I roku na WI różnie się istotnie od 35%
#### === LAB 10 === Testowanie hipotez dla dwóch populacji oraz test dla prób zależnych ####
# zadanie 1
# Próby niezależne
# a)
# założenie 1: normalność rozkładów
# h0 rozkład średnich ocen w populacji studentek jest normalny
# h1 ~h0
# h0' rozkład średnich ocen w populacji studentów jest normalny
# h1' ~h0'
by(Ankieta$Średnia, Ankieta$Płeć, shapiro.test)
# dla kobiet: W = 0.97625, p-value = 0.942
# dla mężczyzn: W = 0.97148, p-value = 0.1578
# aplha = 0.01
# w obu przypadka alpha < p-value
# brak podstaw do odrzucenia h0 i h0'
# b)
# h0 jednorodność wariancji sigma.k^2 = sigma.m^2
# h1 ~h0
var.test(Ankieta$Średnia ~ Ankieta$Płeć)
# F = 0.40623, num df = 9, denom df = 61, p-value = 0.1459
# alpha = 0.01
# Wniosek: brak podstaw do odrzucenia h0
# będziemy stosować test bez poprawki welcha
# wariancje jednorodne = bez poprawki welcha
# c)
# h0 m.kobiet = m.mężczyzn
# h1 m.kobiet > m.mężczyzn
t.test(Ankieta$Średnia ~ Ankieta$Płeć, alternative = 'g', var.equal = TRUE)
# t = -0.49177, df = 70, p-value = 0.6878
# alpha = 0.01
# Wniosek: Na poziomie istotności 0.01 nie ma podstaw do odrzucenia hipotezy h0, zatem wyniki próby nie potwierdzają przypuszczenia, że średnie oceny studentek są wyższe niż studentów studiujących na I roku WI na ZUT w Szczecinie w tym roku akademickim.
# Zadanie 2
# alpha = 0.05
# Test dla dwóch wskaźników struktury
# grupy:
# 1 grupa mieszkających z rodziną
# 2 grupa mieszkających poza domem rodzinnym
# wyróżniona cecha: absolewnci TI
# Hipotezy:
# h0 p1 = p2
# h1 p1 < p2
table(Ankieta$M.zamieszkania, Ankieta$Sz.średnia)
prop.test(c(15, 20), c(32, 40), alternative = 'l')
# X-squared = 0.00069498, df = 1, p-value = 0.4895
# aplha = 0.05
# Wniosek: na poziomie istotności 0.05 nie można odrzucić hipotezy h0. Zatem odsetki osób, które ukończyły TI nie różnią się istotnie dla mieszkających podczas studiowania z rodziną oraz dla mieszkających poza domem rodzinnym.
# Zadanie 3
# próby zależne
# alpha = 0.01
# założenie: normalność różnicy zmiennych
# h0 rozkład różnicy zmiennych jest normalny
# h1 ~h0
x1 = c(225, 236, 312, 238, 241, 196, 205, 259, 218)
x2 = c(216, 195, 245, 235, 221, 170, 180, 265, 179)
shapiro.test(x1 - x2)
# W = 0.96898, p-value = 0.8858
# Wniosek: brak podstaw do odrzucenia h0
# test studenta dla dwóch średnich próby zależne
# h0 m1 - m2 = 0
# h1 m1 - m2 > 0
t.test(x1, x2, paired = T, alternative = 'g')
# t = 3.3633, df = 8, p-value = 0.004942
# Wniosek: na poziomie isotności 0.01 odrzucamy h0 i przyjmujemy h1, zatem leczenie statynami istotnie wpływa na obniżenie poziomu cholesterolu.
# Zadanie 4
# normalność rozkładów -> jednorodność wariancji -> właściwy test
# aplha = 0.01
# założenie 1: normalność rozkładów
# h0 średni wzrost w populacji studentek jest normalny
# h1 ~h0
# h0' średni wzrost w populacji studentów jest normalny
# h1 ~h0'
by(Ankieta$Wzrost, Ankieta$Płeć, shapiro.test)
# dla kobiet: W = 0.95432, p-value = 0.7197
# dla mężczyzn: W = 0.9598, p-value = 0.04048
# brak podstaw do odrzucenia h0 i h0'
# założenie 2: jednorodność wariancji
# h0 jednorodność wariancji k.sigma^2 = m.sigma^2
# h1 ~h0
var.test(Ankieta$Wzrost ~ Ankieta$Płeć)
# F = 1.2842, num df = 9, denom df = 61, p-value = 0.528
# brak podstaw do odrzucenia h0
# będziemy stosować test bez poprawki welcha
# h0 m.kobiet = m.mężczyzn
# h1 m.kobiet ≠ m.mężczyzn
t.test(Ankieta$Wzrost ~ Ankieta$Płeć, alternative = 'two.sided', var.equal = T)
# t = -5.2844, df = 70, p-value = 1.36e-06
# Na poziomie istotności 0.01 odrzucamy h0 i przyjmujemy h1.
# zadanie 8
# alpha = 0.02
# założenie 1: normalność rozkładu
# h0 rozkład średnich ocen w grupie posiadającej rodzeństwo jest normalny
# h1 ~h0
# h0' rozkład średnich ocen w grupie nieposiadającej rodzeństwa jest normalny
# h1' ~h0'
by(Ankieta$Średnia, Ankieta$Rodzeństwo, shapiro.test)
# nieposiadający rodzeństwa: W = 0.93477, p-value = 0.3929
# posiadający rodzeństwo: W = 0.97486, p-value = 0.26
# brak podstaw do odrzucenia h0 i h0'
# założenie 2: jednorodność wariancji
# h0 jednorodność wariancji n.sigma^2 = t.sigma^2
# h1 ~h0
var.test(Ankieta$Średnia ~ Ankieta$Rodzeństwo)
# F = 0.80082, num df = 12, denom df = 58, p-value = 0.704
# brak podstaw do odrzucenia h0
# test bez poprawki welcha
# h0 m.z_rodzeństwem = m.bez_rodzeństwa
# h1 m.z_rodzeństwem ≠ m.bez_rodzeństwa
t.test(Ankieta$Średnia ~ Ankieta$Rodzeństwo, alternative = 'two.sided', var.equal = T)
# t = -0.61915, df = 70, p-value = 0.5378
# wniosek: na poziomie istotności 0.02 brak podstaw do odrzucenia h0, że średnia ocen osób posiadających rodzeństwo nie różni istotnie od średniej osób nieposiadających rodzieństwa w badanej grupie.
#### === LAB 11 === Testy dla populacji > 3####
# zadanie 1
# zmienna mierzalna
plony = c(2.6, 2.4, 2, 1.8, 2.2, 1.5, 1.5, 1.4, 1.2, 1.5, 1.2, 1.5, 0.8, 1)
# zmienna grupująca
kombinacje = c(rep('1', 5), rep('2', 4), rep('3', 5))
## Normalność rozkładów
### (wariant skrócony)
by(plony, kombinacje, shapiro.test)
# kombinacja 1: W = 0.98676, p-value = 0.9672
# kombinacja 2: W = 0.82743, p-value = 0.1612
# kombinacja 3: W = 0.90345, p-value = 0.4292
# Brak podstaw do odrzucenia hipotez zerowych
## Jednorodność wariancji
# h0: sigma^2 = (sigma.2)^2 = (sigma.3)^2
# h1: ~h0
bartlett.test(plony ~ kombinacje)
# Bartlett's K-squared = 1.8396, df = 2, p-value= 0.3986
# alpha < p-value Brak podstaw do odrzucenia h0
## Test anova
# h0: m.1 = m.2 = m.3 (brak wpływu)
# h1: ~h0 (istotny wpływ)
anova(aov(plony ~ kombinacje))
# Response: plony
# Df Sum Sq Mean Sq F value Pr(>F)
# kombinacje 2 2.7571 1.37857 18.053 0.0003356 ***
# Residuals 11 0.8400 0.07636
# F: 18.053 p-value: 0.0003356
# Odrzucamy h0, przyjmujemy h1, nawóz ma istotny wpływ
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem nawożenie istotnie wpływa na plony rzepaku jarego.
# Zadanie 2
# Jedna próba
## Test normalności rozkładu
# wariant skrócony
shapiro.test(Ankieta.M$Waga)
# W = 0.94653, p-value = 0.009113
# Odrzucamy h0
# Test nieparametryczny Wilcoxona
# h0: mediana = 70
# h1: mediana > 70
wilcox.test(Ankieta.M$Waga, mu = 70, alternative = 'g')
# V = 1129.5, p-value = 0.008091
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1. Zatem mediana wagi populacji mężczyzn studiujących na I roku WI ZUT w Szczecinie jest istotnie większa od 70kg.
# Zadanie 3
# Dwie niezależne próby
utargi = c(7.6, 12.0, 7.3, 11.3, 7.0, 10.8, 6.5, 8.1, 3.2, 8.7, 8.8, 11.7, 12.7, 18.5, 3.3, 6.7, 8.6, 6.9, 3.8, 3.7) # zmienna mierzalna
miasta = c(rep('A', 13), rep('B', 7)) # zmienna grupująca
## Normalność rozkładu
# wariant skrócony
by(utargi, miasta, shapiro.test)
# Miasto A: W = 0.94565, p-value = 0.5341
# Brak podstaw do odrzucenia h0
# Miasto B: W = 0.76886, p-value = 0.01989
# Odrzucamy h0
# Wniosek: odrzucamy hipotezę, że rozkład miesięcznego utargu w mieście B jest zgodny z rozkładem normalnym.
## Test nieparametryczny wilcoxona
# h0: mediana.A = mediana.B
# h1: mediana.A > mediana.B
wilcox.test(utargi ~ miasta, alternative = 'g')
# W = 65, p-value = 0.0674
# brak podstaw do odrzucenia h0
# Wniosek: Na poziomie istotności 0.05 nie ma podstaw by odrzucić hipotezę h0. Mediany utargów w mieście A i B nie różnią się istotnie.
# Zadanie 4
# Dwie zależne próby
x1 = c(85, 122, 162, 206, 121, 250, 200, 156)
x2 = c(87, 82, 158, 96, 131, 121, 194, 130)
## Normalność rozkładu różnicy zmiennych
# wariant skrócony
shapiro.test(x1 - x2)
# W = 0.81838, p-value = 0.04487
# Wniosek: odrzucamy h0
## Test nieparametryczny Wilcoxona: próby zależne
# h0: mediana1 - mediana2 = 0
# h1: mediana1 - mediana2 > 0
wilcox.test(x1, x2, paired = T, alternative = 'g')
# V = 31, p-value = 0.03906
# Odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem trening istotnie wpływa na skrócenie czasu potrzebnego myszom na wyjście z labiryntu.
# Zadanie 5
frewkencja = c(32.5, 40.8, 41.7, 41.2, 37.9, 38.3, 42, 39.8, 43.1, 42.6, 38.9, 43.1, 40.4, 41.8, 42, 39, 43.7, 40, 39.7, 43, 43.1, 43.9, 44.2, 45.2, 44.6, 42.5, 43.4, 44.8, 42.8, 43.1, 44.8, 45)
miasta = c(rep('Wroclaw', 10), rep('Warszawa', 11), rep('Krakow', 11))
# alhpa = 0.05
# 3 próby
## Jednorodność wariancji
# h0: sigma^2 = (sigma.2)^2 = (sigma.3)^2
# h1: ~h0
bartlett.test(frewkencja ~ miasta)
# Bartlett's K-squared = 11.774, df = 2, p-value = 0.002775
# aplha > p-value
# odrzucamy h0, przyjmujemy h1
# h0: mediana.1 = mediana.2 = mediana.3
# h1: ~h0
kruskal.test(frewkencja ~ miasta)
# Kruskal-Wallis chi-squared = 16.791, df = 2, p-value = 0.0002259
# alpha > p-value
# odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.05 odrzucamy h0 i przyjmujemy h1, zatem frekwencja w wyborach prezydenckich dla wszystkich tych miast nie jest taka sama.
# Zadanie 8
# 3 próby
# alpha = 0.01
## Test normalności
# wariant skrócony
by(Ankieta$L.godzin, Ankieta$M.zamieszkania, shapiro.test)
# akademik: W = 0.96227, p-value = 0.5107
# mieszkanie z rodziną: W = 0.98145, p-value = 0.8405
# stancja lub inne: W = 0.95429, p-value = 0.5278
# W każdej próbce brak podstaw do odrzucenia h0
## Test jednorodności wariancji
# h0: sigma.0^2 = (sigma.1)^2 = (sigma.2)^2
# h1: ~h0
bartlett.test(Ankieta$L.godzin ~ Ankieta$M.zamieszkania)
# Bartlett's K-squared = 0.47545, df = 2, p-value = 0.7884
# alpha < p-value
# brak podstaw do odrzucenia h0, zatem wariancje są jednorodne
# h0: m0 = m1 = m2 (brak wpływu)
# h1: ~h0 (istotny wpływ)
anova(aov(Ankieta$L.godzin ~ Ankieta$M.zamieszkania))
# F - 0.5896 p-value 0.5573
# alpha < 0.5573
# brak podstaw do odrzucenia h0
# Wniosek: Na poziomie istotności 0.01 nie ma podstaw do odrzucenia h0, zatem liczba godzin spędzonych przed komputerem w ciągu doby w popuplacji studentów pierwszego roku WI ZUT w Szczecinie w tym roku akademickim nie zależy od miejsca zamieszkania.
#### === LAB 12 === Korelacja i regresja, test niezależności chi kwadrat ####
# zadanie 1
# a)
# dwie zmienne mierzalne
x = c(150, 300, 450, 600, 750, 900, 1200, 1500, 1800) # wysokość nad poziomem morza w metrach, zmienna niezależna
y = c(27.2, 26.0, 24.2, 22.5, 21.7, 20.5, 19.0, 17.4, 16) # temperatura powietrza w stopniach celcjusza, zmienna zależna
plot(x, y) # wykres punktów empirycznych
lm(y ~ x) # oszacowanie liniowej funkcji regresji
# 27.322424 -0.006719
# oszacowana funkcja regresji ma: y = -0.006719x + 27.322424
# interpretacja współczynnika regresji: współczynnik regresji równy -0.007 oznacza, że ze wzrostem wysokości nad poziomem morza o jeden metr spada temperatura powietrza średnio o około 0.007 stopnia celcjusza.
abline(lm(y ~ x)) # wykres oszacowanej funkcji regresji
# b)
# istotność współczynnika regresji
# hipotezy:
# h0: ϐ1 = 0
# h1: ~h0
summary(lm(y ~ x))
# Estimate Std. Error t value Pr(>|t|)
# wyraz wolny: (Intercept) 27.3224242 0.4507429 60.62 8.73e-11 ***
# dla x: x -0.0067192 0.0004513 -14.89 1.48e-06 ***
# t = -14.89
# p-value = 1.48e-06
# alpha = 0.03
# odrzucamy h0
# Wniosek: Współczynnik regresji między wysokością nad poziomem morza, a temperaturą jest istotnie różny od zera.
# (na kolokwium tylko współczynnik regresji, interpretacja, test)
# zadanie 2
# dwie cechy mierzalne
#a) oszacować współczynnik koleracji i jego interpretacje
cor(Ankieta.K$Waga, Ankieta.K$Wzrost)
# 0.6351466
# Intepretacja współczynnika korelacji: Pomiędzy wagą i wzrostem studentek w badanej grupie istnieje umiarkowana korelacja dodatnia czyli im wyższa osoba tym średnio biorąc większa waga.
# umiarkowana, w tym samym kierunku
# r=0 brak korelacji
# 0<|r|<0.2 bardzo słaba
# 0.2<=|r|<0.4 słaba
# 0.4<=|r|<0.7 umiarkowana
# 0.7<=|r|<0.9 silna
# 0.9<=|r|<1 bardzo silna
# |r|=1 doskonała liniowa
# r > 0 cechy zmieniają się w tym samym kierunku
# r < 0 cechy zmieniają się w przeciwnych kierunkach
# b) przedział ufności dla współczynnika korelacji dla populacji ϱ
cor.test(Ankieta.K$Waga, Ankieta.K$Wzrost, conf.level = 0.95)
# 0.009199008 0.903470512
# Przedział liczbowy od (0.009; 0.903) z prawdopodobieństwem 0.95 obejmuje nieznany współczynnik korelacji między wagą i wzrostem populacji studentek I roku WI ZUT w Szczecinie.
# c) test istotności współczynnika korelacji
# hioptezy:
# h0: ϱ = 0
# h1: ϱ > 0
cor.test(Ankieta.K$Waga, Ankieta.K$Wzrost, alternative = 'g')
# t = 2.3258, df = 8, p-value = 0.02424
# alpha = 0.05
# Odrzucamy h0
# Wniosek: Przy poziomie istotności 0.05 odrzucamy h0, zatem współczynnik korelacji jest istotnie większy od 0.
# Zadanie 3
# dwie cechy niemierzalne
# alpha = 0.01
# hipotezy:
# h0: X, Y są niezależne | zawsze niezależność
# h1: X, Y są zależne
chisq.test(cbind(c(152, 52), c(8, 188)))
# X-squared = 203.67, df = 1, p-value < 2.2e-16
# odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.01, zatem można potwierdzić przypuszczenie, że wielkość cebulki wpływa na pojawienie się pędu kwiatostanowego.
# zad 5 c i d | dwie zmienne mierzalne
# wielkość produkcji niezależna
# liczba braków zależna
x = c(0.8, 1.2, 1.6, 1.8, 2.2, 1.6, 2.4, 2.0) # wielkość produkcji w tys. sztuk
y = c(6, 10, 12, 15, 18, 15, 20, 16) # liczba braków
# c)
plot(x, y)
regresja = lm(y ~ x)
# -0.3438 8.4375
# y = 8.4375x - 0.3438
abline(regresja)
# Interpretacja: współczynnik regresji równy 8.4375 oznacza, że wzrostem liczby wielkości produkcji o 1 tys. zwiększa się liczba braków o około 8 sztuk.
# d)
# istotność współczynnika regresji
# hipotezy:
# h0: beta1 = 0
# h1: ~h0
summary(regresja)
# t = 12.425
# p-value = 1.66e-05
# alpha = 0.01
# alpha > p-value, odrzucamy h0
# Wniosek: Współczynnik korelacji między wielkością produkcji, a liczbą braków jest istotnie różny od 0.

View File

@@ -0,0 +1,128 @@
# zadanie 1
# a)
# dwie zmienne mierzalne
x = c(150, 300, 450, 600, 750, 900, 1200, 1500, 1800) # wysokość nad poziomem morza w metrach, zmienna niezależna
y = c(27.2, 26.0, 24.2, 22.5, 21.7, 20.5, 19.0, 17.4, 16) # temperatura powietrza w stopniach celcjusza, zmienna zależna
plot(x, y) # wykres punktów empirycznych
lm(y ~ x) # oszacowanie liniowej funkcji regresji
# 27.322424 -0.006719
# oszacowana funkcja regresji ma: y = -0.006719x + 27.322424
# interpretacja współczynnika regresji: współczynnik regresji równy -0.007 oznacza, że ze wzrostem wysokości nad poziomem morza o jeden metr spada temperatura powietrza średnio o około 0.007 stopnia celcjusza.
abline(lm(y ~ x)) # wykres oszacowanej funkcji regresji
# b)
# istotność współczynnika regresji
# hipotezy:
# h0: ϐ1 = 0
# h1: ~h0
summary(lm(y ~ x))
# Estimate Std. Error t value Pr(>|t|)
# wyraz wolny: (Intercept) 27.3224242 0.4507429 60.62 8.73e-11 ***
# dla x: x -0.0067192 0.0004513 -14.89 1.48e-06 ***
# t = -14.89
# p-value = 1.48e-06
# alpha = 0.03
# odrzucamy h0
# Wniosek: Współczynnik regresji między wysokością nad poziomem morza, a temperaturą jest istotnie różny od zera.
# (na kolokwium tylko współczynnik regresji, interpretacja, test)
# zadanie 2
# dwie cechy mierzalne
#a) oszacować współczynnik koleracji i jego interpretacje
cor(Ankieta.K$Waga, Ankieta.K$Wzrost)
# 0.6351466
# Intepretacja współczynnika korelacji: Pomiędzy wagą i wzrostem studentek w badanej grupie istnieje umiarkowana korelacja dodatnia czyli im wyższa osoba tym średnio biorąc większa waga.
# umiarkowana, w tym samym kierunku
# r=0 brak korelacji
# 0<|r|<0.2 bardzo słaba
# 0.2<=|r|<0.4 słaba
# 0.4<=|r|<0.7 umiarkowana
# 0.7<=|r|<0.9 silna
# 0.9<=|r|<1 bardzo silna
# |r|=1 doskonała liniowa
# r > 0 cechy zmieniają się w tym samym kierunku
# r < 0 cechy zmieniają się w przeciwnych kierunkach
# b) przedział ufności dla współczynnika korelacji dla populacji ϱ
cor.test(Ankieta.K$Waga, Ankieta.K$Wzrost, conf.level = 0.95)
# 0.009199008 0.903470512
# Przedział liczbowy od (0.009; 0.903) z prawdopodobieństwem 0.95 obejmuje nieznany współczynnik korelacji między wagą i wzrostem populacji studentek I roku WI ZUT w Szczecinie.
# c) test istotności współczynnika korelacji
# hioptezy:
# h0: ϱ = 0
# h1: ϱ > 0
cor.test(Ankieta.K$Waga, Ankieta.K$Wzrost, alternative = 'g')
# t = 2.3258, df = 8, p-value = 0.02424
# alpha = 0.05
# Odrzucamy h0
# Wniosek: Przy poziomie istotności 0.05 odrzucamy h0, zatem współczynnik korelacji jest istotnie większy od 0.
# Zadanie 3
# dwie cechy niemierzalne
# alpha = 0.01
# hipotezy:
# h0: X, Y są niezależne | zawsze niezależność
# h1: X, Y są zależne
chisq.test(cbind(c(152, 52), c(8, 188)))
# X-squared = 203.67, df = 1, p-value < 2.2e-16
# odrzucamy h0 i przyjmujemy h1
# Wniosek: na poziomie istotności 0.01, zatem można potwierdzić przypuszczenie, że wielkość cebulki wpływa na pojawienie się pędu kwiatostanowego.
# zad 5 c i d | dwie zmienne mierzalne
# wielkość produkcji niezależna
# liczba braków zależna
x = c(0.8, 1.2, 1.6, 1.8, 2.2, 1.6, 2.4, 2.0) # wielkość produkcji w tys. sztuk
y = c(6, 10, 12, 15, 18, 15, 20, 16) # liczba braków
# c)
plot(x, y)
regresja = lm(y ~ x)
# -0.3438 8.4375
# y = 8.4375x - 0.3438
abline(regresja)
# Interpretacja: współczynnik regresji równy 8.4375 oznacza, że wzrostem liczby wielkości produkcji o 1 tys. zwiększa się liczba braków o około 8 sztuk.
# d)
# istotność współczynnika regresji
# hipotezy:
# h0: beta1 = 0
# h1: ~h0
summary(regresja)
# t = 12.425
# p-value = 1.66e-05
# alpha = 0.01
# alpha > p-value, odrzucamy h0
# Wniosek: Współczynnik korelacji między wielkością produkcji, a liczbą braków jest istotnie różny od 0.

View File

@@ -0,0 +1,259 @@
# Węzły
Węzły interpolacyjne to inaczej nazwane punkty przez które przechodzi interpolowana funkcja. Żeby możliwe było znalezienie rozwiązania takiego zadania w każdym węźle koordynat X musi być różny.
# [Efekt Rungego](https://pl.wikipedia.org/wiki/Efekt_Rungego)
Efekt rungego polega na pogorszeniu się jakości interpolacji pomimo zwiększenia liczby węzłów (punktów). Początkowo im więcej węzłów tym lepsze przybliżenie, ale od pewnego momentu zaczyna się pogarszać, co widać szczególnie na krańcach przedziałów. To zachowanie dotyczy [interpolacji wielomianowej]. Aby to zjawisko wystąpiło muszą być spełnione dwie przesłanki:
- wysoki stopień wielomianu
- równa odległość pomiędzy węzłami interpolacyjnymi
# [Macierz Vandermonda](https://pl.wikipedia.org/wiki/Macierz_Vandermonde%E2%80%99a)
Taka macierz:
$$
A = \left(\begin{matrix}
1 & 1 & 1 & 1 \\
1 & 2 & 4 & 8 \\
1 & 3 & 9 & 27 \\
1 & 4 & 16 & 64
\end{matrix}\right)
$$
Albo bardziej ogólnie:
$$
A = \left(\begin{matrix}
1 & x_1 & x^2_1 & \cdots & x^{n-1}_1 \\
1 & x_2 & x^2_2 & \cdots & x^{n-1}_2 \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & x_n & x^2_n & \cdots & x^{n-1}_n
\end{matrix}\right)
$$
Wyznacznik tej macierzy to specjalny **wyznacznik Vandermonde'a** i jest zapisywany w postaci:
$$
\det A = \prod_{1 \leqslant i<j \leqslant n} (x_j-x_i).
$$
# [Punkt stacjonarny](https://pl.wikipedia.org/wiki/Punkt_stacjonarny)
Zwany również punktem krytycznym, punkt w dziedzinie funkcji rzeczywistej, w którym pierwsza pochodna przyjmuje wartość zero. W tym punkcie oryginalna funkcja oczywiście zmienia kierunek.
Jeśli w tym punkcie istnieje druga pochodna, to punkt ten jest ekstremum lokalnym lub punktem przegięcia (przegioles pale).
Dla funkcji wielu zmiennych w punkcie krytycznym zerują sie pochodne cząstkowe.
# [Gradient](https://pl.wikipedia.org/wiki/Gradient_(matematyka))
Wektor, który wskazuje gdzie funkcja rośnie. Długość wektora mówi nam o ile wzrasta funkcja na jednostkę długości.
uno dos tres quanto sinco sinco ses
[Wyznaczanie gradientu](https://youtu.be/Pt-AJvGEPuA?si=Q2Gh7xz62cELr_8j&t=9)
Ogólnie rzecz ujmując sprowadza się do tego, żeby obliczyć pochodne po następnych zmiennych ($x, y, z$), a potem umieścić je w wektorze. Potem obliczyć wartość gradientu dla konkretnego punktu.
# Metoda częściowego wyboru elementu podstawowego
Rozwinięcie metody eliminacji Gausaa, które polega na znalezieniem najlepszego kandydata do eliminowania kolumn przed rozpoczęciem całej procedury.
- Będąc w k-tym kroku eliminacji wybieramy k-tą kolumnę i szukamy maksimum po module poniżej głównej przekątnej włącznie.
- Ten wiersz gdzie znaleźliśmy nową liczbę zamieniamy z k-tym wierszem.
Dzięki temu nie dzielimy przez zero jak debil i pomniejszamy błędy wynikające z zaokrągleń wyników dzielenia małych liczb.
# [Metoda Newtona](https://pl.wikipedia.org/wiki/Metoda_Newtona)
Zwana również metodą stycznych polega na tym, że się styka ten teges. Proste i logiczne.
Algorytm prowadzi do znalezienia przybliżonej wartości miejsca zerowego funkcji jednej lub wielu zmiennych.
Jeżeli w przedziale znajduje się 1 pierwiastek funkcji, krańce mają różne znaki, pierwsza i druga mają stały znak w przedziale to wybieramy dowolny kraniec przedziału, wyznaczamy styczną do wykresu funkcji w tym punkcie, wyznaczamy odciętą punktu przecięcia stycznej z osią OX odcięta jest drugim przybliżeniem szukanego rozwiązania. Nową wartość przyjmujemy jako startową i tak powstaje perpetum debile.
Metodę te można uogólnić do przypadku wielowymiarowej. Wtedy ponownie wybieramy punkt startowy, a następnie rekurencyjnie przekształcamy wektor jedynek lub zerowy, aż do momentu satysfakcjonującego nas przybliżenia. Wektor ma tyle kolumn/wierszy co liczba zmiennych w wielomianie.Przkształcamy wektor zgodnie z równaniem macierzowym:
$$
x_{k+1} = x_K - (F'(x_k))^{-1} F(x_k)
$$
Gdzie $F'(x_K)$ to macierz Jacobiego. Zawiera wszystkie możliwe pochodne cząstkowe pierwszego rzędu. $F(x_K)$ to wektor wartości rozwiązań wszystkich równań dla aktualnego punktu.
Kończymy liczyć, gdy osiągniemy wystaczające przybliżenie, czyli wartość jest mniejsza niz epsilon.
# Wielomian interpolacyjny w postaci Newtona
Jak to gówno zbudować?
1. Bierzemy punkty np.
$$
\begin{align}
(x_o, y_0) \\
(x_1, y_1) \\
(x_2, y_2)
\end{align}
$$
2. Wykonujemy działania
$$
\begin{align}
I_1 &= \frac{y_0 - y_1}{x_0 - x_1} \\
I_2 &= \frac{y_2 - y_1}{x_2 - x_1} \\
I_3 &= \frac{I_2 - I_1}{x_2 - x_0} \\
\end{align}
$$
3. Podstawiamy:
$$
W(x) = y_0 + I_1(x - x_0) + I_3(x - x_0)(x - x_1) +…
$$
Tablica ilorazów różnicowych
| $x_i$ | $f(x_i)$ | $I_1$ | $I_2$ | $I_3$ | |
| --------- | -------- | ------------- | ------------------ | ----------------------- | --- |
| $x_0$<br> | $f(x_0)$ | $f[x_0, x_1]$ | $f[x_0, x_1, x_2]$ | $f[x_0, x_1, x_2, x_3]$ | |
| $x_1$ | $f(x_1)$ | $f[x_1, x_2]$ | $f[x_1, x_2, x_3]$ | | |
| ... | | | | | |
Czyli dla przykładu:
x: $-3\ 1\ 3$
f(x) $8\ 16\ 24$
| -3 | 8 | $\frac{8}{4} = 2$ | $\frac{1}{3}$ |
| ------------- | --- | ----------------- | ------------- |
| 1 | 16 | $\frac{8}{2} = 4$ | |
| 3 | 24 | | |
| | | | |
| Współczynniki | 8 | 2 | $\frac{1}{3}$ |
$W(x) = 8 + 2(x + 3) + \frac{1}{3}(x + 3)(x - 1)$
# [Hesjan](https://pl.wikipedia.org/wiki/Macierz_Hessego)
Elitarna macierz drugich pochodnych cząstkowych fla funkcji wielu zmiennych o wartościach rzeczywistych dwukrotnie różniczkowalnych w punkcie, w którym liczone są te pochodne.
Cała ta macierz opisuje własności krzywizny wykresu funkcji w otoczeniu punktu. Jest wyznaczana np. w punktach krytycznych przy wyszukiwaniu ekstremów i punktów przegięcia (przegioles).
Macierz ta jest kwadratowa.
Buduje się ją w sposób następujący:
Musimy policzyć wszytkie możliwe pochodne drugiego stopnia. Po x, po xy, po xz, po z, po zx, itp, itd. Potem układamy to tak:
- po przekątnej pochodne po jednej zmiennej
- w kolumnach ustawiamy pochodne po kolejnych zmiennych
- w rzędach zmieniamy naszą pojedyńczą zmienną pochodną
# [Wersor](https://pl.wikipedia.org/wiki/Wektor_jednostkowy)
Wektor jednostkowy o długości jeden. Wskazuje kierunek i zwrot pewnego wektora początkowego, któremu ten wersor się przypisuje. Każdy wektor można zamienić na wersor (znormalizować) dzieląc go przez jego długość.
![](../../../media/Pasted%20image%2020260617124924.png)
# [Aproksymacja sześcienna]
POlega na przykładaniu funkcje szcześciennej do wykresu. Jako punktów uzywa wartości funkcji i jej pochodnych. żeby to było możliwe to oczywiście musi być na krańcach przedzialu pochodna wymnożona na minusie tego typu
# Wyznaczniki macierzy trójkątnych i diagonalnych
Oblicza się je mnożąć przez siebie wszytkie liczby leżące na głównej przekątnej.
Macierz diagonalna ma liczby tylko na przekątnej.
Macierz trójkątna górna –» ma zera pod główną przekątną.
# [Metoda falsi](https://pl.wikipedia.org/wiki/Regula_falsi)
Falsi z nazwy metody oznacza oczywiście, że jest do dupy.
Bierzemy jeden punkt powyżej zera, drugi jest poniżej. Rysujemy prostą (falsi[znaną również pod nazwą prosta sraka]). Tam gdzie sraka przechodzi przez oś OX liczymy wartość funkcji. Zamieniamy to na ten poprzedni punkt. Powtarzamy, aż osiągniemy dokładność.
# [Metoda Powella](http://www.optymalizacja.w8.pl/Powella.html)
Metoda bezgradientowa, która wykorzystuje wersor.
Mamy dwa wektory (kierunki) $d_i$ i $d_j$. Nazywamy je sprzężonymi względem kwadratowej dodatnio określonej macierzy H jeśli:
$$
d_i^T \cdot H d_i = 0 \ \text {dla } i \neq j
$$
# [Metoda najszybszego spadku](https://pl.wikipedia.org/wiki/Metoda_najszybszego_spadku)
Metoda gradientowa.
$$
\begin{align}
P_{k + 1} &= P_K - \alpha_k \nabla_k \\
\text{gdzie:}
\alpha_k &= \frac{\nabla_k^T \nabla_k}{\nabla_K^T H_k \nabla_K}
\end{align}
$$
Co to dokładnie oznacza? Każdy kolejny krok to aktualny krok minus gradient razy krok. A krok $\alpha$ to transponowany gradient razy gradient podzielone przez transponowany gradient razy gradient razy hesjan.
Problemem tej metody jest to, że potrafi zwolni i zyzgakować, jeśli funkcja ma kształt wąskiej, ukośnej doliny. Żeby temu zapobiec:
- wprowadza się nowe kierunki za pomocą $\Delta = P_{k + 1} - P_K$
- obraca układ współrzędnych, by jedna z osi pokrywała się z dnem.
# Warunek przy szukaniu pierwiastków równań nieliniowych
$f(a) \cdot f(b) < 0$
W komputerach może występować zjawisko niedomiaru, które wynika z zaokrągleń do zera przy bardzo niskich wartościach. Aby temu zapobiec robi się taki myk:
```matlab
sign(f(a)) != sign(f(b))
```
# [Metoda połowienia](https://pl.wikipedia.org/wiki/Metoda_r%C3%B3wnego_podzia%C5%82u)
Algorytm poszukiwania pierwiastka funkcji.
Metoda polega na dzieleniu przedziału na pół, a następnie odrzucaniu podprzedziału, w którym dwa jego krańce nie zmieniają znaku.
# [Metoda złotego podziału](https://pl.wikipedia.org/wiki/Metoda_z%C5%82otego_podzia%C5%82u)
Metoda optymalizacji jednowymiarowej funkcji celu.
Polega na wybraniu dwóch punktów, które wyznaczane tak, by dzieliły aktualny przedział w proporcji złotego podziału ( $61.8\%$) Wybieramy punkt, który jest niżej, aż osiągniemy zadaną dokładność $\epsilon$. Wtedy bierzemy środek tego przedziału i *beng* mamy minimum!
# [Simplex](https://pl.wikipedia.org/wiki/Algorytm_sympleksowy)
## Jak to liczyć?
1. Mamy układ równań, przekształcamy go w taki sposób, by po prawej stronie wszystkie wartości były dodatnie
$$
\begin{align*}
&f(x,y) = 7x + 2y - 3z \to \max \\
&\text{ograniczenia:}
\end{align*}
$$
$$
\begin{align*}
\begin{cases}
2x + y - 3z &= 12 \\
5x - 3y + z &\geqslant 15 \\
-x + 2y &\geqslant -1 \implies x - 2y \leqslant 1
\end{cases}
\end{align*}
$$
2. Zamieniamy układ w taki sposób, by wyeliminować wszystkie symbole mniejsze/większe niż. Żeby to zrobić musimy albo odjąć albo dodać jakąś liczbę. Jeżeli mam więcej niż to musimy odjąć i analogicznie.
$$
\begin{align}
\begin{cases}
2x + y - 3z &= 12 \\
5x - 3y + z - S_1 &= 15 \\
-x + 2y + S_2 &= 1
\end{cases}
\end{align}
$$
3. Zapisujemy funkcję celu
$$
f(x, y, z, S_1, S_2) = 7x + 2y -3z + 0S_1 + 0S_2
$$
4. Sprawdzamy czy mamy macierz jednostkową, czyli czy mamy kwadrat 3x3 w którym w każdej kolumnie jest jedna jedynka i jest ona w różnych wierszach. W tym przypadku pasuje nam tylko $S_2$, więc dodajemy zmienne sztuczne.
$$
\begin{align}
\begin{cases}
2x + y -3z + a_1 &= 12 \\
5x - 3y + z - S_1 + a_2 &= 15 \\
x - 2y + S_2 &= 1
\end{cases}
\end{align}
$$
Macierz jednostkowa
![](../../../media/Pasted%20image%2020260616200137.png)
5. Dodajemy albo bardzo dużo zmiennych sztucznych albo bardzo mało. Jeśli szukamy max to muszą być ujemne i analogicznie.
$$
f(x, y, z, S_1, S_2) = 7x + 2y -3z + 0S_1 + 0S_2 - 1000a_1 - 1000a_2
$$
6. Przechodzimy do uzupełniania tabelki
- 1. W $Cj\rightarrow$ wpisujemy ilość następnych zmiennych.
- 2.Wiersz pod tym wpisujemy co to są za zmienne.
- 3. Pod $B\downarrow$ (bazowa) wpisujemy wyrazy wolne po przekształceniach.
- 4. Pod $WB\downarrow$(wektory bazowe) wpisujemy nasze nowe sztuczne zmienne, które tworzą naszą macierz jednostkową.
- 5. Pod $CB\downarrow$ wpisujemy ile mamy tych zmiennych.
- 6. Uzupełniamy środek tabelki wartościami z układu równań dla poszczególnych zmiennych
- 7. $WW\rightarrow$(wiersz wskaźnikowy) uzupełniamy poprzez wymnożenie wartości z kolumny CB razy poszczególne kolumny zmiennych. Np. $-1000 \cdot 12 + (-1000) \cdot 15 + 0 \cdot 1 = -27000$ . Potem od wyniku odejmujemy wartość funkcji celu. Czyli np dla kolumny $x$ wykonujemy działanie $-7000 - 7 = -7007$
| | | Cj$\rightarrow$ | 7 | 2 | -3 | 0 | 0 | -1000 | -1000 | |
| -------------- | --------------- | --------------- | ----- | ---- | ---- | ----- | ----- | ----- | ----- | ------------------ |
| CB$\downarrow$ | WB $\downarrow$ | B $\downarrow$ | x | y | z | $S_1$ | $S_2$ | $a_1$ | $a_2$ | $\frac{B}{x}$ |
| -1000 | $a_1$ | 12 | 2 | 1 | -3 | 0 | 0 | 1 | 0 | $\frac{12}{2} = 6$ |
| -1000 | $a_2$ | 15 | 5 | -3 | 1 | -1 | 0 | 0 | 1 | $\frac{15}{5} = 3$ |
| 0 | $S_2$ | 1 | 1 | -2 | 0 | 0 | 1 | 0 | 0 | 1 |
| | $WW\rightarrow$ | -27000 | -7007 | 1998 | 2003 | 1000 | 0 | 0 | 0 | |
- 8. Gdy już mamy taką tabelkę szukamy wartość zmiennej wiersza wskaźnikowego, która jest najmniejsza. W tym przypadku będzie to zmienna $x$. Ta kolumna będzie kluczowa.
- 9. Szukamy najmniejszej wartości w $\frac{B}{x}$. To będzie wiersz kluczowy.
- 10. Kolumna kluczowa wskazuje na wartość, która wchodzi do bazy, a wiersz kluczowy na wartość, która wylatuje.
- 11. Wartość na przecięciu się kolumny i wiersza kluczowego to pivot. Pivot musi być 1, a jeśli nie jest to mnożymy wiersz razy tyle, żeby był.
- 12. Używamy pivota, żeby zlikwidować liczbę nad nim. Ma być zerem! (Podobnie jak w metodzie eliminacji gaussa)
- 13.(7) Ponownie liczymy wiersz wskaźnikowy.
| | | Cj$\rightarrow$ | 7 | -2 | -3 | 0 | 0 | -1000 | -1000 | |
| -------------- | --------------- | --------------- | --- | ------ | ---- | ----- | ----- | ----- | ----- | ------------------ |
| CB$\downarrow$ | WB $\downarrow$ | B $\downarrow$ | x | y | z | $S_1$ | $S_2$ | $a_1$ | $a_2$ | $\frac{B}{y}$ |
| -1000 | $a_1$ | 10 | 0 | 5 | -3 | 0 | -2 | 1 | 0 | $\frac{10}{5} = 2$ |
| -1000 | $a_2$ | 10 | 0 | 7 | 1 | -1 | -5 | 0 | 1 | $\frac{10}{7}$ |
| 7 | $x$ | 1 | 1 | 2 | 0 | 0 | 1 | 0 | 0 | $\frac{1}{-2}$ |
| | $WW\rightarrow$ | -19993 | 0 | -12016 | 2003 | 1000 | 7007 | 0 | 0 | |
- 14.(8) szukamy najmniejszej wartości w WW. To jest kolumna kluczowa. Tutaj to będzie y
- 15. (9) wyliczamy $\frac{B}{x}$ i szukamy najmniejszej nieujemnej wartości. Wiersz kluczowy!
- 16. Powtarzamy te kroki, aż w WW nie będzie ujemnych wartości. Wtedy w kolumnie WB w WW będzie wartość optymalna funkcji celu. W kolumnie B znajdziemy wtedy wartości zmiennych funkcji, które wpływają na ten wynik. Gdybyśmy liczyli minimum to nie mogłoby być żadnych liczb dodatnich!
**Na egzaminie nie trzeba rysować drugiej tabelki!**

View File

@@ -0,0 +1 @@
Programowanie liniowe

View File

@@ -0,0 +1,233 @@
#include <algorithm>
#include <iostream>
#include <memory>
#include <ostream>
#include <stdexcept>
#include <string>
#include <vector>
class Wydawnictwo {
std::string nazwa, miasto;
public:
Wydawnictwo(std::string nazwa, std::string miasto)
: nazwa(nazwa), miasto(miasto) {}
friend std::ostream &operator<<(std::ostream &os, Wydawnictwo &p) {
os << "Wydawnictwo o nazwie: " << p.nazwa << ", pochodzi z miasta "
<< p.miasto;
return os;
}
};
class Pozycja {
protected:
std::string tytul;
double cena;
int liczba_egzamplarzy;
Wydawnictwo wydawnictwo;
public:
Pozycja(std::string tytul, double cena, int liczba_egzamplarzy,
Wydawnictwo wydawnictwo)
: tytul(tytul), cena(cena), liczba_egzamplarzy(liczba_egzamplarzy),
wydawnictwo(wydawnictwo) {}
virtual ~Pozycja() = default;
double wartosc() { return liczba_egzamplarzy * cena; }
void zmienCene(double nowaCena) { cena = nowaCena; }
std::string getTytul() const { return tytul; }
virtual std::string kategoria() = 0;
virtual void wypisz() {
std::cout << "Pozycja pt. " << tytul << " kosztuje" << cena
<< "\nAktualnie jest " << liczba_egzamplarzy << " takich pozycji."
<< "\nWydawnictwo to: " << wydawnictwo;
}
virtual double cenaKoncowa() const = 0;
friend std::ostream &operator<<(std::ostream &os, Pozycja &p) {
os << "Tytuł: " << p.tytul << " kosztuje " << p.cenaKoncowa()
<< " i jest kategorii " << p.kategoria() << '\n'
<< "Aktualnie jest " << p.liczba_egzamplarzy << " tej pozycji";
return os;
}
};
class Ksiazka : public Pozycja {
int liczbaStron;
public:
Ksiazka(std::string tytul, double cena, int liczba_egzamplarzy,
Wydawnictwo wydawnictwo, int liczbaStron)
: Pozycja(tytul, cena, liczba_egzamplarzy, wydawnictwo),
liczbaStron(liczbaStron) {}
~Ksiazka() {}
std::string kategoria() override { return "ksiazka"; }
double cenaKoncowa() const override {
if (liczbaStron < 100) {
return cena - cena * 0.1;
}
return cena;
}
void wypisz() override {
wypisz();
std::cout << "\nLiczba stron wynosi" << liczbaStron << '\n';
}
Ksiazka operator+(Ksiazka &p1) {
Ksiazka nowa_pozycja =
Ksiazka(tytul, cena, liczba_egzamplarzy + p1.liczba_egzamplarzy,
wydawnictwo, liczbaStron);
return nowa_pozycja;
};
};
class Czasopismo : public Pozycja {
int numerWydania;
public:
Czasopismo(std::string tytul, double cena, int liczba_egzamplarzy,
Wydawnictwo wydawnictwo, int numerWydania)
: Pozycja(tytul, cena, liczba_egzamplarzy, wydawnictwo),
numerWydania(numerWydania) {}
~Czasopismo() {}
std::string kategoria() override { return "czasopismo"; }
double cenaKoncowa() const override {
if (numerWydania < 12) {
return cena - cena * 0.2;
}
return cena;
}
void wypisz() override {
wypisz();
std::cout << "\nNumer wydania to: " << numerWydania << '\n';
}
Czasopismo operator+(Czasopismo &p1) {
Czasopismo nowa_pozycja =
Czasopismo(tytul, cena, liczba_egzamplarzy + p1.liczba_egzamplarzy,
wydawnictwo, numerWydania);
return nowa_pozycja;
};
};
class Biblioteka {
std::vector<std::unique_ptr<Pozycja>> pozycje;
int size;
static int biblioteka_ammount;
public:
Biblioteka(int size) : size(size) {
pozycje.reserve(size);
biblioteka_ammount++;
}
~Biblioteka() {} // nie musimy ręcznie zwalniać pamięci ponieważ unique_ptr sam
// się zwalnia, gdy jego właściciel umiera
void dodajPozycje(std::unique_ptr<Pozycja> p) {
pozycje.push_back(std::move(p));
}
Pozycja *znajdzPozycje(const std::string &tytul) const {
for (auto &p : pozycje) {
if (p->getTytul() == tytul) {
return p.get();
}
}
return nullptr;
}
Pozycja &operator[](int index) {
if (index < 0 || index >> size) {
throw std::out_of_range(
"Index nie może być mniejszy niż zero lub większy niż rozmiar");
}
Pozycja *p = pozycje[index].get();
return *p;
}
void sortujWgCeny() { std::sort(pozycje.begin(), pozycje.end()); }
void wypiszWszystkie() const {
for (auto &p : pozycje) {
p->wypisz();
}
}
double obliczWartoscBiblioteki() const {
double sum = 0;
for (auto &p : pozycje) {
sum += p->wartosc();
}
return sum;
}
int ilePozycjiKategorii(const std::string &kat) {
int sum = 0;
for (auto &p : pozycje) {
if (p->kategoria() == kat) {
sum++;
}
}
return sum;
}
static int ileBibliotek() { return biblioteka_ammount; }
};
int Biblioteka::biblioteka_ammount = 0;
int main() {
Biblioteka biblioteka = Biblioteka(10);
Wydawnictwo w1 = Wydawnictwo("Nowa Era", "Szczecin");
Wydawnictwo w2 = Wydawnictwo("Stara Era", "Warszawa");
biblioteka.dodajPozycje(
std::make_unique<Ksiazka>("Ogniem i Mieczem", 12, 10, w1, 360));
biblioteka.dodajPozycje(
std::make_unique<Czasopismo>("Telenowele", 2, 1, w2, 3));
Pozycja *znalezionaPozycja = biblioteka.znajdzPozycje("Ogniem i Mieczem");
if (!znalezionaPozycja) {
std::cout << "Nie znaleziono pozycji!!!\n";
return 1;
}
std::cout << "Przed zmianą ceny: " << *znalezionaPozycja << std::endl;
znalezionaPozycja->zmienCene(123);
std::cout << "Po zmianie ceny: " << *znalezionaPozycja << std::endl;
Pozycja *znalezionaPozycja2 = biblioteka.znajdzPozycje("Telenowele");
if (!znalezionaPozycja) {
std::cout << "Nie znaleziono pozycji 2!!!\n";
return 1;
}
Ksiazka k1 = Ksiazka("Trala", 23, 12, w1, 1);
Ksiazka k2 = Ksiazka("Tra", 1, 1, w1, 1);
std::cout << "\n=== Dodawanie ===\n";
Ksiazka k3 = k1 + k2;
std::cout << k1 << std::endl;
std::cout << k2 << std::endl;
std::cout << k3 << std::endl;
std::cout << "\n=== Wyświetlanie ===\n";
std::cout << "Zerowy element biblioteki: " << biblioteka[0] << std::endl;
std::cout << "Biblioteka jest warta " << biblioteka.obliczWartoscBiblioteki()
<< std::endl;
std::cout << "Aktualnie jest " << biblioteka.ilePozycjiKategorii("ksiazka")
<< " książek" << std::endl;
std::cout << "Aktualnie jest " << biblioteka.ileBibliotek() << " bibliotek"
<< std::endl;
std::cout << "\n=== Sortowanie ===\n";
// biblioteka.wypiszWszystkie();
biblioteka.sortujWgCeny();
// biblioteka.wypiszWszystkie();
}

View File

@@ -0,0 +1,188 @@
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
class Producent {
std::string nazwa, kraj;
public:
Producent(std::string nazwa, std::string kraj) : nazwa(nazwa), kraj(kraj) {}
friend std::ostream &operator<<(std::ostream &os, const Producent &p) {
os << "Producent o nazwie " << p.nazwa << " z kraju " << p.kraj;
return os;
}
};
class Towar {
protected:
std::string nazwa;
double cena;
int sztuki;
Producent producent;
public:
Towar(std::string nazwa, double cena, int sztuki, const Producent &producent)
: nazwa(nazwa), cena(cena), sztuki(sztuki), producent(producent) {}
virtual ~Towar() = default;
double wartosc() const { return cena * sztuki; }
void zmienCene(double nowaCena) { cena = nowaCena; }
void dodajSztuki(int ile) { sztuki += ile; }
std::string getNazwa() const { return nazwa; }
virtual std::string kategoria() const = 0;
virtual void wypisz() const {
std::cout << "Nazwa: " << nazwa << ", Cena jedn.: " << cena
<< ", Sztuk: " << sztuki << ", " << producent;
}
virtual double cenaKoncowa() const = 0;
int operator+(const Towar &t) const { return sztuki + t.sztuki; }
friend std::ostream &operator<<(std::ostream &os, const Towar &t) {
os << t.nazwa << " należy do kategorii " << t.kategoria()
<< " i kosztuje w sumie " << t.cenaKoncowa();
return os;
}
};
class TowarSpozywczy : public Towar {
std::string terminWaznosci;
public:
TowarSpozywczy(std::string nazwa, double cena, int sztuki,
const Producent &producent, std::string terminWaznosci)
: Towar(nazwa, cena, sztuki, producent), terminWaznosci(terminWaznosci) {}
~TowarSpozywczy() {}
std::string kategoria() const override { return "spożywczy"; }
double cenaKoncowa() const override {
int rabat = 10;
return wartosc() - rabat;
}
void wypisz() const override {
Towar::wypisz();
std::cout << ", termin ważności do " << terminWaznosci;
}
};
class TowarElektroniczny : public Towar {
int gwarancja;
public:
TowarElektroniczny(std::string nazwa, double cena, int sztuki,
const Producent &producent, int gwarancja)
: Towar(nazwa, cena, sztuki, producent), gwarancja(gwarancja) {}
~TowarElektroniczny() {}
std::string kategoria() const override { return "elektronika"; }
double cenaKoncowa() const override {
int koszt_gwarancji = 67;
return wartosc() + koszt_gwarancji;
}
void wypisz() const override {
Towar::wypisz();
std::cout << ", gwarancja na " << gwarancja << " miesięcy";
}
};
class Sklep {
std::vector<std::unique_ptr<Towar>> towary;
int max_towar, current_towar;
static int SKLEP_AMMOUNT;
public:
Sklep(int max) : max_towar(max), current_towar(0) {
towary.reserve(max);
SKLEP_AMMOUNT++;
}
~Sklep() { towary.clear(); }
bool dodajTowar(std::unique_ptr<Towar> t) {
towary.push_back(std::move(t));
return true;
}
Towar *znajdzTowar(const std::string &nazwa) {
for (auto &towar : towary) {
if (towar->getNazwa() == nazwa) {
return towar.get();
}
}
return nullptr;
}
void wypiszWszystkie() const {
for (auto &towar : towary) {
towar->wypisz();
std::cout << "\n";
}
}
double obliczWartoscSklepu() const {
double sum = 0;
for (const auto &towar : towary) {
sum += towar->cenaKoncowa();
}
return sum;
}
int ileTowarowKategorii(const std::string &kat) const {
int sum = 0;
for (const auto &towar : towary) {
if (towar->kategoria() == kat) {
sum++;
}
}
return sum;
}
static int ileSklepow() { return SKLEP_AMMOUNT; }
};
int Sklep::SKLEP_AMMOUNT = 0;
int main() {
Sklep sklep = Sklep(10);
Producent producent1 = Producent("Rafał Brzoska", "Polska");
Producent producent2 = Producent("Jeff Bezos", "Afryka");
sklep.dodajTowar(
std::make_unique<TowarSpozywczy>("burak", 20, 5, producent1, "67 lat"));
sklep.dodajTowar(
std::make_unique<TowarElektroniczny>("komputer", 20, 5, producent2, 24));
Towar *znalezionyTowar = sklep.znajdzTowar("burak");
Towar *znalezionyTowar2 = sklep.znajdzTowar("komputer");
if (znalezionyTowar)
znalezionyTowar->zmienCene(1);
if (znalezionyTowar && znalezionyTowar2) {
int wynik = *znalezionyTowar + *znalezionyTowar2;
std::cout << wynik << std::endl;
}
if (znalezionyTowar)
std::cout << *znalezionyTowar << std::endl;
if (znalezionyTowar2)
std::cout << *znalezionyTowar2 << std::endl;
std::cout << sklep.obliczWartoscSklepu() << std::endl;
std::cout << sklep.ileTowarowKategorii("spożywczy") << std::endl;
std::cout << sklep.ileSklepow() << std::endl;
return 0;
}

View File

@@ -0,0 +1,110 @@
#include <exception>
#include <iostream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
class Producent {
std::string nazwa;
std::string kraj;
public:
Producent(std::string nazwa, std::string kraj) : nazwa(nazwa), kraj(kraj) {}
friend std::ostream &operator<<(std::ostream &os, const Producent p) {
os << "Nazwa: " << p.nazwa << " pochodzi z kraju: " << p.kraj;
return os;
}
};
class Towar {
protected:
std::string nazwa;
double cena;
int sztuki;
Producent producent;
public:
Towar(std::string nazwa, double cena, int sztuki, Producent producent)
: nazwa(nazwa), cena(cena), sztuki(sztuki), producent(producent) {}
virtual ~Towar() = default;
double wartosc() const { return cena * sztuki; }
void zmienCene(double nowaCena) { cena = nowaCena; }
virtual std::string kategoria() = 0;
virtual void wypisz() const {
std::cout << "Nazwa: " << nazwa << " kosztuje " << cena
<< ". Aktualnie jest " << sztuki << " sztuk. Producent to "
<< producent << std::endl;
}
virtual double cenaKoncowa() const = 0;
int operator+(Towar &t) { return sztuki + t.sztuki; }
friend std::ostream &operator<<(std::ostream &os, Towar &t) {
os << "Nazwa: " << t.nazwa << " kosztuje " << t.cenaKoncowa()
<< ". Aktualnie jest " << t.sztuki << " sztuk. Producent to "
<< t.producent;
return os;
}
};
class TowarSpozywczy : public Towar {
std::string terminWaznosci;
public:
TowarSpozywczy(std::string nazwa, double cena, int sztuki,
Producent producent, std::string terminWaznosci)
: Towar(nazwa, cena, sztuki, producent), terminWaznosci(terminWaznosci) {}
std::string kategoria() override { return "spozywczy"; }
double cenaKoncowa() const override {
int rabat = 5;
return wartosc() - rabat;
}
void wypisz() const override {
wypisz();
std::cout << "Termin ważności jest do " << terminWaznosci << std::endl;
}
};
class TowarElektroniczny : public Towar {
int gwarancjaMiesiace;
public:
TowarElektroniczny(std::string nazwa, double cena, int sztuki,
Producent producent, int gwarancjaMiesiace)
: Towar(nazwa, cena, sztuki, producent),
gwarancjaMiesiace(gwarancjaMiesiace) {}
std::string kategoria() override { return "spozywczy"; }
double cenaKoncowa() const override {
int koszt_gwarancji = 10;
return wartosc() + koszt_gwarancji;
}
void wypisz() const override {
wypisz();
std::cout << "Gwarancja trwa" << gwarancjaMiesiace << " miesięcy."
<< std::endl;
}
};
class Sklep {
std::vector<std::unique_ptr<Towar>> towary;
int max;
int current;
static int liczba_sklepow;
public:
Sklep(int max) : max(max), current(0) { towary.reserve(max); }
};
int Sklep::liczba_sklepow = 0;

View File

@@ -3,7 +3,7 @@
template <typename T> T potroj(T x) { return x * 3; }
int main() {
std::cout << potroj(7) << '\n';
std::cout << potroj(2.5) << '\n';
std::cout << potroj('A') << '\n';
std::cout << potroj(7) << '\n'; // 21
std::cout << potroj(2.5) << '\n'; // 7.5
std::cout << potroj('A') << '\n'; // dziwny znak
}

View File

@@ -5,6 +5,7 @@ podwoj(2, 3); // funkcja przyjmuje jeden argument a jest wywołana z dwoma
// Fragment B
template <typename T> T iloczyn(T a, T b);
// definicja w innym pliku .cpp - kod się nie linkuje
// należy dodać #include "nazwa_pliku.cpp"
// Fragment C
template <typename T> T wiekszy(T a, T b) { return a > b ? a : b; }

Binary file not shown.

View File

@@ -43,14 +43,44 @@ Taki maksterm lub iloczyn makstermów, że funkcja przyjmuje wartość 0, gdy je
- Implicent prosty taki implicent, z którego usunięcie dowolnego literału powoduje, że suma przestaje być implicentem
- Implicent istotny jeśli maksterm funkcji zawarty jest tylko w jednym implicencie prostym
## Metody minimalizacji funkcji logicznych
### Prawami logicznymi
### Przekształcenie prawami logicznymi
1. Rysujemy 2 tablice prawdy.
2. Dopisujemy kolumnę z min/max termami. Mintermy to te z mnożeniem, a maxtermy z plusem.
3. Bierzemy pod uwagę wszystkie te maxtermy, gdzie wartość wychodzi 0 i mintermy, gdzie wartość wychodzi 1.
4. Zapisujemy to jako y = [min/maxtermy]. Oczywiście jeśli mam mintermy to grupy ze sobą dodajemy, a maxtermy to grupy ze sobą mnożymy.
5. Za pomocą zasad takich jak rozdzielność, rozłączność itp. możemy uprościć taki wzorek.
![](../../../media/Pasted%20image%2020260530180423.png)
W takiej sytuacji podstawiamy pod równanie odpowiednie wartości zmiennych i wyliczamy y.
### Tablica Karnaugh
Dwuwymiarowa tablica prawdy zgodna z kodem greya. Tzn, że w każdym kolejnym wierszu/kolumnie zmienia się maksymalnie 1 bit na raz. Należy zachować odpowiednią kolejność przy wypełnianiu tablicy. Nie będę się tu o tym rozpisywał, bo dużo było na labach.
## Hazard
Zjawisko hazardu może występować na skutek optymalizacji logicznej układu. **Hazard polega na krótkotrwałych, fałszywych stanach logicznych (tzw. szpilkach) na wyjściu układu kombinacyjnego, podczas procesów przejściowych.** Występuje, gdy co najmniej jeden sygnał jest przesyłany dwoma różnymi drogami prowadzącymi do jednej bramki. Np. mamy 2 różne sygnały, które idą do bramki AND, ale na drodze jednego z nich jest jeszcze odwracacz (inventer).
### Hazard statyczny
Hazard opisany powyżej.
### Hazard dynamiczny
Występuje w układach wielopoziomowych.
## Multi/demultiplexery
### $n$ zmiennych
Za pomocą multiplexerów można wykonać każdą funkcję kombinacyjną. Aby to uczynić należy uzupełnić w równaniu każdy implikant do $n$ literałów. Tak rozbudowane implikanty stają się adresami wejść informacyjnych układu. Realizacja sprzętowa polega na tym, że do wyznaczonych wejść informacyjnych multipleksera podłącza się fizycznie stały stan wysoki (Vcc, logikę „1”), natomiast wszystkie pozostałe, nieużywane wejścia zwiera się do masy (GND, logika „0”). Metodę tę można zrealizować także bezpośrednio na podstawie tablicy prawdy.
### $n - 1$ zmiennych
Jest to podejście o wiele bardziej optymalne sprzętowo, ponieważ pozwala zrealizować tę samą funkcję na o połowę mniejszym multiplekserze. Pozostała, jedna zmienna (np. $x_0$) nie trafia na wejścia adresowe, lecz jest wykorzystywana do sterowania wejściami informacyjnymi. Aby fizycznie zbudować taki układ, można postąpić na dwa sposoby:
- **Sposób 1 (na podstawie tablicy prawdy):** Przeprowadza się analizę tego, jak wyjście układu zachowuje się względem tej jednej wyizolowanej zmiennej (x0) przy poszczególnych stanach pozostałych wejść adresowych. W efekcie do konkretnych wejść informacyjnych multipleksera podłącza się: stałą „1”, stałe „0”, połączoną bezpośrednio zmienną x0, lub zmienną x0 przepuszczoną przez dodatkowy inwerter logiczny (bramkę NOT).
- **Sposób 2 (przez przekształcenie wyrażenia logicznego):** Równanie funkcji należy przekształcić matematycznie tak, aby każdy implikant zawierał literały wybrane jako zmienne dołączane do wejść adresowych multipleksera. Po takim pogrupowaniu zmiennych, jeśli implikant bazuje tylko na zmiennych adresowych, do odpowiadającego wejścia informacyjnego podłącza się stałą „1”. Jeżeli w implikancie zostaje "reszta" pod postacią wyizolowanej zmiennej x0 (w postaci prostej lub zanegowanej), to fizycznie doprowadza się ten sygnał wejściowy do danego wejścia. Ostatnim krokiem jest dołączenie logicznego „0” do wszystkich nieużytych wejść informacyjnych
# Technologie
## Układy scalone (Integrated Circuits IC)
### Bipolarne
TTL transistor-transistor logic
ECL Emitter-Coupled Logic
Rozwiązania zanikające
### Unipolarne
Np. MOS i CMOS.
Mniejsza moc strat i możliwość budowania układów o ogromnym stopniu scalenia, takich jak VLSI lub ULSI