část C01–C05
Empirická funkce je závislost mezi dvěma proměnnými – jednou nezávislou (x) a druhou závislou (y), která je popsána jen tabulkou dvojic x, y. Takové dvojice získáme zpravidla měřením a můžeme je zpracovat několika metodami:
Nejčastěji použijeme metodu nejmenších čtverců, která najde parametry aproximační funkce y = f(x) nalezením minima výrazu
Řešením této podmínky podle parametrů funkce f(x) dostaneme jejich hodnoty, jak ukážeme v dalších kapitolách. Součinitel korelace dovoluje vybrat aproximační funkci, která nejlépe koreluje s vloženými daty.
Má-li bodový diagram (korelační pole) závislosti y na x lineární trend, můžeme použít lineární aproximační funkci
Základní podmínkou metody nejmenších čtverců je
kde n je počet bodů nebo dvojic x, y. Algebraickými operacemi a parciální derivací podle a, b dostaneme charakteristické rovnice
Tuto soustavu rovnic můžeme řešit pomocí determinantů a následujícím programem, ke kterému jsou připojeny regresní výpočty.
DATA 50,5.61,60,6.46,70,7.3,80,8.13,90,9,100,9.86
a:
READ x, y: ON ERROR GOTO b
sx = sx + x: kx = kx + x * x
sy = sy + y: ky = ky + y * y
xy = xy + x * y: n = n + 1: GOTO a
b:
px = sx / n: py = sy / n
s1 = SQR((kx – sx * sx / n) / (n – 1))
s2 = SQR((ky – sy * sy / n) / (n – 1))
c = (xy – sx * sy / n) / (n – 1)
r = c / (s1 * s2)
b = c / (s1 * s1)
a = py – b * px
PRINT "px,sx="; px, s1
PRINT "py,sy="; py, s2
PRINT "a,b,r="; a, b, r
e:
INPUT "x="; x
y = a + b * x
PRINT "y="; y
INPUT "dalsi x? a/n"; d$
IF d$ = "a" THEN GOTO e
END
L(m) | t(s) |
---|---|
0 | 0,14 |
10 | 1,88 |
20 | 2,97 |
30 | 3,88 |
40 | 4,77 |
50 | 5,61 |
60 | 6,46 |
70 | 7,30 |
80 | 8,13 |
90 | 9,00 |
100 | 9,86 |
Naměříme-li nějakou lineární závislost pomocí dvojic dat x, y, můžeme potřebovat
DATA 100,110,120,107,140,115,160,125,180,132,200,138
DATA 220,147,240,152,260,154,280,159,300,165,320,167
DATA 340,173,360,175,380,179,400,182
CLS: INPUT "xmin,xmax="; x1, x2
INPUT "ymin,ymax="; y1, y2
CLS: SCREEN 10: KEY OFF
LINE (50, 10)-(50, 300): LINE -(640, 300)
FOR x = x1 TO x2 STEP (x2 – x1) / 10
v = 50 + (x – x1) / (x2 – x1) * 500
LINE (v, 300)-(v, 305)
LOCATE 23, v / 8 – 1: PRINT x;: NEXT x
FOR y = y1 TO y2 STEP (y2 – y1) / 10
s = 300 – (y – y1) / (y2 – y1) * 280
LINE (50, s)-(52, s)
LOCATE s / 14 + 1, 2: PRINT y: NEXT y
p:
READ x, y: ON ERROR GOTO q
CIRCLE (50 + (x – x1) / (x2 – x1) * 500, 300 – (y – y1) / (y2 – y1) * 280), 3
sx = sx + x: kx = kx + x * x: sy = sy + y: ky = ky + y * y
xy = xy + x * y: n = n + 1: GOTO p
q:
s1 = kx – sx * sx / n: s2 = ky – sy * sy / n
c = xy – sx * sy / n: b = c / s1: a = (sy – b * sx) / n
y3 = a + b * x1: y4 = a + b * x2
LINE (50, 300 – (y3 – y1) / (y2 – y1) * 280)-(550, 300 – (y4 – y1) / (y2 – y1) * 280)
LOCATE 20, 30: PRINT "a,b="; a; b
r = c / SQR(s1 * s2): LOCATE 21, 30: PRINT "r="; r
END
Máme-li empirická data o vztahu y = f(x), který je kvadratický, (např. odpor vody nebo vzduchu v závislosti na rychlosti), můžeme použít k aproximaci kvadratický polynom
Součinitele a, b, c lze určit metodou nejmenších čtverců, která vychází z podmínky minimalizace výrazu
n … počet párů dat (x, y)
Algebraickými operacemi a parciální derivací výrazu podle a, b, c dostaneme charakteristické rovnice
Tyto rovnice vyřešíme pomocí uvedených sumací metodou determinantů následujícím programem, který vypočítá i potřebné sumace.
DATA 1,68,2,59.6,3,56.9
s:
READ x, y: ON ERROR GOTO t
d = d + x: k = x * x
e = e + k: f = f + k * x
g = g + k * k: h = h + y
i = i + x * y: j = j + k * y
n = n + 1: GOTO s
t:
l = e – d * d / n
m = i – d * h / n
c = f – d * e / n
p = j – e * h / n
q = g – e * e / n
r = l * q – o * o
a = (p * l – m * o) / r
b = (m * q – p * o) / r
c = (h – b * d – a * e) / n
PRINT "a,b,c="; a; " "; b; " "; c
u:
INPUT "x="; x
y = (a * x + b) * x + c
PRINT "y="; y
INPUT "dalsi y? a/n"; z$
IF z$ = "a" THEN GOTO u
END
Má-li empirická funkce složitější průběh, nelze ji uspokojivě aproximovat jednoduchými dvouparametrovými funkcemi ani polynomem druhého stupně. Použijeme-li aproximaci polynomem vyššího stupně, vznikne problém s volbou tohoto stupně. Příliš vysoký stupeň polynomu vede k oscilacím regresních hodnot mezi vloženými body empirické funkce. Proto je nutné vyzkoušet několik stupňů a vybrat regresními výpočty nejlepší.
Při metodě nejmenších čtverců najdeme součinitele polynomu řešením charakteristických rovnic, obsahujících sumace až do x2n
Následující program provede všechny potřebné sumace, vyřeší charakteristické rovnice podle a, b, c, … maticovou metodou a nakonec umožní regresní výpočty podle výsledného polynomu.
DATA 40,4.79,60,6.48,80,8.18,100,9.92
INPUT "pocet dvojic,stupen polynomu="; m, n
DIM a(n + 1, n + 2), m(2 * n), p(n)
FOR i = 0 TO n: FOR j = 1 TO m
READ x, y: IF x = 0 THEN x =.000001
m(i) = m(i) + x ^ i: p(i) = p(i) + y * x ^ i: NEXT j
RESTORE: NEXT i: RESTORE
FOR i = n + 1 TO 2 * n: FOR j = 1 TO m
READ x, y: m(i) = m(i) + x ^ i: NEXT j: RESTORE: NEXT i
FOR r = 1 TO n + 1: FOR s = 1 TO n + 1
a(r, s) = m(r + s – 2): NEXT s: NEXT r
FOR r = 1 TO n + 1: a(r, n + 2) = p(r – 1): NEXT r
FOR s = 1 TO n + 1: FOR r = 1 TO n + 1
IF r = s OR a(r, s) = 0 THEN GOTO a
p = a(s, s) / a(r, s)
FOR t = 1 TO n + 2: a(r, t) = p * a(r, t) – a(s, t): NEXT t
a:
NEXT r: NEXT s
FOR r = 1 TO n + 1: a(r, n + 2) = a(r, n + 2) / a(r, r): NEXT r
FOR r = 0 TO n
PRINT "a"; r; "="; a(r + 1, n + 2): NEXT r
b:
INPUT "x="; x: p = a(n + 1, n + 2)
FOR i = n TO 1 STEP -1
p = p * x + a(i, n + 2): NEXT i
PRINT "p="; p
INPUT "dalsi x? a/n"; c$
IF c$ = "a" THEN GOTO b
END
Technické řešení této výukové pomůcky je spolufinancováno Evropským sociálním fondem a státním rozpočtem České republiky.