3. Параболическая регрессия:
Заданы значения:
X |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Y |
-8,5 |
-3,5 |
-1,9 |
-0,7 |
0,0 |
-0,3 |
-1,5 |
-2,7 |
-5,2 |
-11,7 |
Найти коэффициенты a, b и с выражения .
Коэффициенты данной аппроксимирующей функции a, b, c находят из условия минимума функции:
Условия минимума функции сводятся к системе уравнений:
После преобразований получаем систему трёх линейных уравнений с тремя неизвестными:
При решении системы находим коэффициенты a, b, c.
Находим суммы:
I |
X |
Y |
X^2 |
X^3 |
X^4 |
X*Y |
X^2*Y |
1 |
1 |
-8,5 |
1 |
1 |
1 |
-8,5 |
-8,5 |
2 |
2 |
-3,5 |
4 |
8 |
16 |
-7 |
-14 |
3 |
3 |
-1,9 |
9 |
27 |
81 |
-5,7 |
-17,1 |
4 |
4 |
-0,7 |
16 |
64 |
256 |
-2,8 |
-11,2 |
5 |
5 |
0 |
25 |
125 |
625 |
0 |
0 |
6 |
6 |
-0,3 |
36 |
216 |
1296 |
-1,8 |
-10,8 |
7 |
7 |
-1,5 |
49 |
343 |
2401 |
-10,5 |
-73,5 |
8 |
8 |
-2,7 |
64 |
512 |
4096 |
-21,6 |
-172,8 |
9 |
9 |
-5,2 |
81 |
729 |
6561 |
-46,8 |
-421,2 |
10 |
10 |
-11,7 |
100 |
1000 |
10000 |
-117 |
-1170 |
|
55 |
-36 |
385 |
3025 |
25333 |
-221,7 |
-1899,1 |
a |
b |
c |
d |
e |
f |
G |
dd = (e ∙ c ∙ n + d ∙ a ∙ c + d ∙ a ∙ c) - (c ∙ c ∙ c + d ∙ d ∙ n + a ∙ a ∙ e) = 435600
da = (g ∙ c ∙ n + d ∙ a ∙ b + f ∙ a ∙ c) - (b ∙ c ∙ c + f ∙ d ∙ n + a ∙ a ∙ g) = -208230
db = (e ∙ f ∙ n + g ∙ a ∙ c + d ∙ b ∙ c) - (c ∙ f ∙ c + d ∙ g ∙ n + b ∙ a ∙ e) = 2165394
dc = (e ∙ c ∙ b + d ∙ a ∙ g + d ∙ f ∙ c) - (c ∙ c ∙ g + d ∙ d ∙ b + a ∙ f ∙ e) = -5460973
Найденные коэффициенты a, b, c подставляем в уравнение и полученные значения заносим в таблицу
X |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Y |
-8,0436 |
-4,5067 |
-1,9258 |
-0,3009 |
0,3679 |
0,0806 |
-1,1627 |
-3,3621 |
-6,5176 |
-10,6291 |
Результаты вычислений можно представить графически:
Программа для вычислений коэффициентов a, b, с:
PRINT "Y=a*X^2+b*X+c"
CLS
n = 10
DIM x(n), y(n)
DATA 1,2,3,4,5,6,7,8,9,10
FOR i = 1 TO n
READ x(i)
NEXT i
DATA -8.5, -3.5, -1.9, -0.7, 0.0, -0.3, -1.5, -2.7, -5.2, -11.7
FOR i = 1 TO n
READ y(i)
NEXT i
FOR i = 1 TO n
PRINT "X="; x(i); "Y="; y(i)
NEXT i
FOR i = 1 TO n
a = a + x(i): a1 = x(i)
b = b + y(i): b1 = y(i)
c = c + x(i) ^ 2: c1 = x(i) ^ 2
d = d + x(i) ^ 3: d1 = x(i) ^ 3
e = e + x(i) ^ 4: e1 = x(i) ^ 4
f = f + x(i) * y(i): f1 = x(i) * y(i)
g = g + x(i) ^ 2 * y(i): g1 = x(i) ^ 2 * y(i)
PRINT "i="; i, "a="; a1; "b="; b1; "c="; c1; "d="; d1; "e="; e1; "f="; f1; "g="; g1
NEXT i
dd = (e * c * n + d * a * c + d * a * c) - (c * c * c + d * d * n + a * a * e)
da = (g * c * n + d * a * b + f * a * c) - (b * c * c + f * d * n + a * a * g)
db = (e * f * n + g * a * c + d * b * c) - (c * f * c + d * g * n + b * a * e)
dc = (e * c * b + d * a * g + d * f * c) - (c * c * g + d * d * b + a * f * e)
PRINT "dd="; dd, "da="; da, "db="; db, "dc="; dc
a = da / dd
b = db / dd
c = dc / dd
PRINT "a="; a, "b="; b, "c="; c
FOR i = 1 TO n
y1 = a * x(i) ^ 2 + b * x(i) + c
PRINT "i="; i, "y1="; y1
NEXT i
END
Решение линейных уравнений методом дихотомии
Дано уравнение:
Отделение корней уравнения
Составляем приблизительную схему:
x |
-∞ |
-3 |
-1 |
0 |
1 |
3 |
∞ |
знак f(x) |
+ |
+ |
+ |
+ |
+ |
- |
+ |
Следовательно, уравнение имеет два действительных корня, лежащих в интервалах:
[1, 3] и [3, ].
Уточнение приближенных корней
Уточнение приближенных корней выполним с помощью метода половинного деления (метода дихотомии)
В результате вычислений с помощью программы, приведенной ниже, получили следующие значения корней:
на отрезке [1, 3] : х1 = 2,848
на отрезке [3, ] : х2 = 25,494
Программа вычисления корней с помощью метода дихотомии
CLS
10
PRINT "Введите границы интервала в определении корня"
INPUT "(A, B)="; A, B
PRINT "погрешность в определении корня"
E1 = .001
x = B: GOSUB 40: F1 = F: IF F = 0 THEN 50
x = A: GOSUB 40: IF F = 0 THEN 50
IF SGN(F1) = SGN(F) THEN PRINT "Требуется изменить интервал (A,B)": GOTO 10
20
x = (A + B) / 2: GOSUB 40
IF SGN(F1) = SGN(F) THEN B = x: F1 = F: GOTO 30
A = x
30
IF ABS(A - B) > E1 THEN 20
x = (A + B) / 2: GOSUB 40: GOTO 50
40
F = x ^ 4 - 28 * x ^ 3 + 64 * x ^ 2 - 6 * x + 79: RETURN
50
PRINT "Корень x ="; x: PRINT "Функция F = "; F
END
Определенный интеграл
Вычислить интеграл с тремя десятичными знаками по формулам левых и правых прямоугольников, трапеций и Симпсона при n = 10, оценивая точность с помощью сравнения полученных результатов.
Заданы значения:
b0 |
b1 |
b2 |
b3 |
x1 |
x2 |
n |
9 |
-18 |
16 |
15 |
0,4 |
1,9 |
10 |
Метод прямоугольников
Приведем обобщенные формулы:
по левой стороне
по правой стороне
Программа для вычислений интегралов
CLS
PRINT " Вычисление определенного интеграла "
PRINT " методом прямоугольников "
PRINT "F = b0 + b1 * x + b2 * x ^ 2 + b3 * x ^ 3"
INPUT "Введите левую границу LG"; LG
INPUT "Введите правую границу PG"; PG
INPUT "Введите число интервалов N"; N
INPUT "Введите точность вычислений Toch"; Toch
H = (PG - LG) / N
PRINT "Расчет по левой стороне"
FOR j = 0 TO N - 1
x = LG + H * j
GOSUB 50
I = I + F
NEXT j
I = H * I
I1 = FIX(I) + CINT((I - FIX(I)) / Toch) * Toch
PRINT "Значение интеграла, вычисленного по левой стороне I="; I
PRINT "Округленное значение интеграла, Iокр="; I1
I = 0
PRINT "Расчет по правой стороне"
FOR j = 1 TO N
x = LG + H * j
GOSUB 50
I = I + F
NEXT j
I = H * I
I2 = FIX(I) + CINT((I - FIX(I)) / Toch) * Toch
PRINT "Значение интеграла, вычисленного по правой стороне I="; I
PRINT "Округленное значение интеграла, Iокр="; I2
END
50
'Подынтегральная функция
b0 = 9: b1 = -18: b2 = 16: b3 = 15
F = b0 + b1 * x + b2 * x ^ 2 + b3 * x ^ 3
RETURN
Метод трапеций
Программа для вычисления интеграла
CLS
PRINT " Вычисление определенного интеграла"
PRINT " методом трапеций"
PRINT "F = b0 + b1 * x + b2 * x ^ 2 + b3 * x ^ 3"
INPUT "Введите левую границу LG"; LG
INPUT "Введите правую границу PG"; PG
INPUT "Введите число интервалов N"; N
INPUT "Введите точность вычислений Toch"; Toch
H = (PG - LG) / N
x = LG
GOSUB 50
I = F / 2
x = PG
GOSUB 50
I = I + F / 2
FOR j = 0 TO N - 1
x = LG + H * j
GOSUB 50
I = I + F
NEXT j
I = H * I
I = FIX(I) + CINT((I - FIX(I)) / Toch) * Toch
PRINT "Значение интеграла I="; I
END
50
'Подынтегральная функция
b0 = 9: b1 = -18: b2 = 16: b3 = 15
F = b0 + b1 * x + b2 * x ^ 2 + b3 * x ^ 3
RETURN
Метод Симпсона
где
Программа для вычисления интеграла
CLS
PRINT " Вычисление определенного интеграла"
PRINT " методом Симпсона"
PRINT "F = b0 + b1 * x + b2 * x ^ 2 + b3 * x ^ 3"
INPUT "Введите левую границу LG"; LG
INPUT "Введите правую границу PG"; PG
INPUT "Введите число интервалов N"; N
INPUT "Введите точность вычислений Toch"; Toch
H = (PG - LG) / (2 * N)
x = LG
GOSUB 50
I = F
x = PG
GOSUB 50
I = I + F
FOR j = 1 TO 2 * N - 1 STEP 2
x = LG + H * j
GOSUB 50
I = I + 4 * F
NEXT j
FOR j = 2 TO 2 * N - 2 STEP 2
x = LG + H * j
GOSUB 50
I = I + 2 * F
NEXT j
I = H / 3 * I
I = FIX(I) + CINT((I - FIX(I)) / Toch) * Toch
PRINT "Значение интеграла I="; I
END
50
'Подынтегральная функция
b0 = 9: b1 = -18: b2 = 16: b3 = 15
F = b0 + b1 * x + b2 * x ^ 2 + b3 * x ^ 3
RETURN
Таблица полученных результатов.
Число интервалов |
прямоугольников |
трапеций |
Симпсона |
|
по левой стороне |
по правой стороне |
|||
10 |
58,086 |
77,605 |
68,643 |
67,464 |
100 |
66,492 |
68,444 |
67,548 |
67,464 |
Наиболее точные значения вычисления определенного интегралов, будут при большем числе разбиений отрезка интегрирования. При разбиении на N = 10 более точные результаты дает метод Симпсона.
Интерполирование
Дана таблица значений
-
X
Y
-3
-5
-1
-10
2
2
3
-10
Определить значения функции для х = -2, 0, 1 с точностью 0,01.
Таблица результатов:
-
X
Y
ф. Ньютона
ф. Лагранжа
-2
-12,33
-12,33
0
-3,30
-3,30
1
2,47
2,47
График функции:
Программа интерполяции по формуле Ньютона
CLS
PRINT "Интерполяционная формула Ньютона"
INPUT "Введите количество точек N="; N
INPUT "Аргумент X = "; X
NPUT "Точность Toch = "; Toch
FOR I = 0 TO N
PRINT "X ("; I; "), Y ("; I; : INPUT ") ="; X(I), Y(I)
NEXT I
L = Y(0): S = 1
FOR I = N TO 1 STEP -1
I1 = N - I
FOR K = 0 TO I - 1
Y(K) = (Y(K + 1) - Y(K)) / (X(K + 1 + I1) - X(K))
NEXT K
S = S * (X - X(I1)): L1 = L
L = L + Y(0) * S
NEXT I
L = FIX(L) + CINT((L - FIX(L)) / Toch) * Toch
PRINT "L ("; X; ") ="; L
END
Программа интерполяции по формуле Лагранжа
CLS
PRINT "Интерполяционная формула Лагранжа"
INPUT "Введите число точек N="; N
DIM X(N), F(N)
FOR I = 0 TO N
PRINT "[X("; I; "), F ("; I; : INPUT ")]="; X(I), F(I)
NEXT I
SCREEN 9
'границы экрана
LG = -20 'левая
PG = 20 'правая
NG = -20 'нижняя
VG = 20 'веохняя
WINDOW (LG, NG)-(PG, VG)
FOR I = 0 TO N
PSET (X(I), F(I))
CIRCLE (X(I), F(I)), .1, 12
NEXT I
‘оси координат
LINE (0, -10)-(0, 10)
LINE (-10, 0)-(10, 0)
INPUT "вычислить значение функции для X = "; X
INPUT "с точностью Toch = "; Toch
FOR J = 0 TO N - 1
FOR I = J + 1 TO N
F(I) = ((X - X(J)) * F(I) - (X - X(I)) * F(J)) / (X(I) - X(J))
NEXT I
NEXT J
PSET (X, F(N - 1))
CIRCLE (X, F(N - 1)), .1
F1 = F(N)
F1 = FIX(F1) + CINT((F1 - FIX(F1)) / Toch) * Toch
IF F1 > VG THEN LOCATE 3, 5: PRINT "Выход за верхнюю границу": GOTO 50
IF F1 < NG THEN LOCATE 3, 5: PRINT "Выход за нижнюю границу"
50
LOCATE 4, 5: PRINT "F"; "("; X; ") ="; F1
END
Решение систем линейных уравнений
Метод Гаусса.
Это метод решения системы линейных уравнений, состоящий в том, что последовательным исключением неизвестных систему
приводят к эквивалентной системе с треугольной матрицей:
Решение матрицы находят по рекуррентным формулам:
Дана система:
Построим определители
Результаты вычислений:
x 1 = 25,515 x 2 = 31,070 x 3 = 38,665 x 4 = -5,160
Программа решения системы линейных уравнений по методу Гаусса
CLS
PRINT "Решение системы линейных уравнений по методу Гаусса"
INPUT "Количество уравнений N = "; N
DIM A(N, N + 1), X(N)
PRINT "Ввод коэффициентов уравнений:"
FOR I = 1 TO N
FOR K = 1 TO N + 1
IF K = N + 1 THEN PRINT "правая часть:"
PRINT "A ("; I; ","; K; : INPUT ")="; A(I, K)
NEXT K
NEXT I
INPUT "точность Toch = "; Toch
FOR I = 1 TO N
FOR K = 1 TO N + 1
IF K = N + 1 THEN PRINT "правая часть:"
PRINT "A ("; I; ","; K; ")="; A(I, K)
NEXT K
NEXT I
U = 0
10
U = U + 1: K = U
20
IF A(K, U) <> 0 THEN 30
K = K + 1: IF K <= N THEN 20
PRINT "система не определена"
END
30
IF K = U THEN 40
FOR M = U TO N + l
T = A(U, M)
A(U, M) = A(K, M)
A(K, M) = T
NEXT M
40
FOR J = N + 1 TO U STEP -1
A(U, J) = A(U, J) / A(U, U)
NEXT J
M = N + 1
IF K + 1 > N THEN 50
FOR I = K + 1 TO N
FOR J = U + 1 TO M
A(I, J) = A(I, J) - A(I, U) * A(U, J)
NEXT J
NEXT I
50
IF U <> N THEN 10
FOR I = N TO 1 STEP -1
X(I) = A(I, M)
IF I = 1 THEN 60
FOR K = I - 1 TO 1 STEP -1
A(K, M) = A(K, M) - A(K, I) * X(I)
NEXT K
60
NEXT I
PRINT "Решение системы равно:"
FOR I = 1 TO N
X(I) = FIX(X(I)) + CINT((X(I) - FIX(X(I))) / Toch) * Toch
PRINT "X ("; I; ")="; X(I)
NEXT I
Оптимизация. Методы поиска для функции одной переменной
Дана целевая функция:
Вычислим функцию следующими методами:
Метод деления пополам
Ответ:
Х = 9,682417Е-02
F = 2,351603Е-05
CLS
10 PRINT "ВВЕДИТЕ ИНТЕРВАЛ"
'NPUT "(A, B)="; A, B
‘A = 0: B = 1
E1 = .00001
X = B: GOSUB 40: F1 = F: IF F = 0 THEN 50
X = A: GOSUB 40: IF F = 0 THEN 50
IF SGN(F1) = SGN(F) THEN GOTO 10
20 X = (A + B) / 2: GOSUB 40
IF SGN(F1) = SGN(F) THEN B = X: F1 = F: GOTO 30
A = X
30 IF ABS(A - B) > E1 THEN 20
X = (A + B) / 2: GOSUB 40: GOTO 50
40 F = -6 + 61 * X + 10 * X ^ 2: RETURN
50 PRINT "X ="; X: PRINT "F = "; F
END
Метод простой итерации
CLS
'INPUT "X ="; X
‘X = -1
E1 = .0000000001#
N = 100
FOR i = 1 TO N
GOSUB 500
IF (F - X) < X * E1 THEN 1000
X = F
NEXT i
PRINT " нет точности"
STOP
500
F = -6 + 61 * X + 10 * X ^ 2
RETURN
1000 PRINT " X ="; X: END
Х = 9,682421Е-02
Метод хорд
INPUT "НАЧАЛЬНОЕ ПРИБЛИЖЕНИЕ X1=";X1
Е1=1Е—8
Н=1E—4
100
Х = Х1: GOSUB 500: Y = F
Х = Х1+Н: GOSUB 500
Y = Y * Н / (F —Y)
Х1 =Х1 — Y
IF ABS (Y)>E1 THEN 100
Х = Х1: GOSUB 500
GOTO 1000
F = -6 + 61 * X + 10 * X ^ 2
RETURN
1000
PRINT "КОРЕНЬ. X="; X1
END
Х = 9,682424Е-02