53 lines
1.3 KiB
Lua
53 lines
1.3 KiB
Lua
function eval(a,b,c,x)
|
|
return a + (b + c * x) * x
|
|
end
|
|
|
|
function regression(xa,ya)
|
|
local n = #xa
|
|
|
|
local xm = 0.0
|
|
local ym = 0.0
|
|
local x2m = 0.0
|
|
local x3m = 0.0
|
|
local x4m = 0.0
|
|
local xym = 0.0
|
|
local x2ym = 0.0
|
|
|
|
for i=1,n do
|
|
xm = xm + xa[i]
|
|
ym = ym + ya[i]
|
|
x2m = x2m + xa[i] * xa[i]
|
|
x3m = x3m + xa[i] * xa[i] * xa[i]
|
|
x4m = x4m + xa[i] * xa[i] * xa[i] * xa[i]
|
|
xym = xym + xa[i] * ya[i]
|
|
x2ym = x2ym + xa[i] * xa[i] * ya[i]
|
|
end
|
|
xm = xm / n
|
|
ym = ym / n
|
|
x2m = x2m / n
|
|
x3m = x3m / n
|
|
x4m = x4m / n
|
|
xym = xym / n
|
|
x2ym = x2ym / n
|
|
|
|
local sxx = x2m - xm * xm
|
|
local sxy = xym - xm * ym
|
|
local sxx2 = x3m - xm * x2m
|
|
local sx2x2 = x4m - x2m * x2m
|
|
local sx2y = x2ym - x2m * ym
|
|
|
|
local b = (sxy * sx2x2 - sx2y * sxx2) / (sxx * sx2x2 - sxx2 * sxx2)
|
|
local c = (sx2y * sxx - sxy * sxx2) / (sxx * sx2x2 - sxx2 * sxx2)
|
|
local a = ym - b * xm - c * x2m
|
|
|
|
print("y = "..a.." + "..b.."x + "..c.."x^2")
|
|
|
|
for i=1,n do
|
|
print(string.format("%2d %3d %3d", xa[i], ya[i], eval(a, b, c, xa[i])))
|
|
end
|
|
end
|
|
|
|
local xa = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
|
local ya = {1, 6, 17, 34, 57, 86, 121, 162, 209, 262, 321}
|
|
regression(xa, ya)
|