Автор: Пользователь скрыл имя, 05 Марта 2013 в 09:10, контрольная работа
Задание.
Решить нелинейное уравнение х3 – х – 7 = 0 , используя программу QBASIC, следующими методами:
1) отделения корней;
2) бисекций;
3) хорд;
4) касательных;
5) комбинированный;
6) Симпсона (парабол).
Контрольная работа
по дисциплине: «Вычислительная математика»
Выполнил:
Проверил:
Задание.
Решить нелинейное уравнение х3 – х – 7 = 0 , используя программу QBASIC, следующими методами:
1) отделения корней;
2) бисекций;
3) хорд;
4) касательных;
5) комбинированный;
6) Симпсона (парабол).
1. Метод отделения корней
REM "Otdelenie korney"
DEF fnf (x) = x ^ 3 - x - 7
1 : INPUT "a,b ", a, b
2 : INPUT "h ", h
WHILE fnf(x) * fnf(x + h) > 0
x = x + h
WEND
PRINT "a= "; x, "b= "; x + h
PRINT "f(a)= "; fnf(x), "f(b) = "; fnf(x + h)
PRINT "izmenim h? "
3 : z$ = INKEY$
IF z$ = "y" THEN 2
IF z$ = "n" THEN 4 ELSE 3
4 : PRINT "izmenim a,b? "
5 : z$ = INKEY$
IF z$ = "y" THEN 1
IF z$ = "n" THEN 6 ELSE 5
6 : END
Результат выполнения программы представлен на рисунке 1.
Рисунок 1 Результат выполнения методом отделения корней
2. Метод бисекций
REM "method bisection"
DEF fnf (x) = x ^ 3 - x - 7
1 : INPUT "vvedite a,b", a, b
2 : INPUT "vvwedite e", e
k = 0
3 : c = (a + b) / 2
IF fnf(c) = 0 THEN 4
IF fnf(a) * fnf(c) > 0 THEN a = c ELSE b = c
k = k + 1
c = (a + b) / 2
IF (b - a) / 2 < e THEN 4
IF k < 100 THEN 3
4 : PRINT "x0 = "; c; ""
PRINT "f(x0)="; fnf(c)
PRINT "k="; k
PRINT "izmenim e?"
5 : z$ = INKEY$
IF z$ = "y" THEN 2
IF z$ = "n" THEN 6 ELSE 5
6 : PRINT "izmenim a,b?"
7 : z$ = INKEY$
IF z$ = "y" THEN 1
IF z$ = "n" THEN 8 ELSE 7
8 : END
Результат выполнения программы представлен на рисунке 2.
Рисунок 2 Результат выполнения методом бисекций
3. Метод хорд
REM "method hord"
DEF fnf (x) = x ^ 3 - x - 7
DEF fnw (x) = 6 * x
1 : INPUT "vvedite interval izol a,b ", a, b
IF fnf(a) * fnw(a) < 0 THEN 2
a = b1
b = a1
k = 0
2 : x1 = a - (b - a) / (fnf(b) - fnf(a)) * fnf(a)
k = k + 1
IF ABS(x1 - a) < .0000001 THEN 3
a = x1
IF k < 100 THEN 2
3 : PRINT "x0 = "; x1
PRINT "f(x0) = "; fnf(x1)
PRINT "k = "; k
PRINT "izmenim a,b? "
4 : z$ = INKEY$
IF z$ = "y" THEN 1
IF z$ = "n" THEN 5 ELSE 4
5 : END
Результат выполнения программы представлен на рисунке 3.
Рисунок 3 Результат выполнения методом хорд
4. Метод касательных
REM "method kasat"
DEF fnf (x) = x ^ 3 - x - 7
DEF fnv (x) = 3 * x ^ 2 - 1
DEF fnw (x) = 6 * x
1 : INPUT "vvedite a1,b1 ", a1, b1
2 : INPUT "vvedite e ", e
IF fnf(a1) * fnw(a1) > 0 THEN b = a1 ELSE b = b1
k = 0
3 : x1 = b - fnf(b) / fnv(b)
k = k + 1
IF ABS(x1 - b) < e THEN 4
b = x1
IF k < 100 THEN 3
4 : PRINT
PRINT "x0="; x1
PRINT "f(x0)="; fnf(x1)
PRINT "k="; k
PRINT "abs(x1-b)="; ABS(x1 - b)
PRINT "izmenim e? "
5 : z$ = INKEY$
IF z$ = "y" THEN 2
IF z$ = "n" THEN 6 ELSE 5
6 : PRINT "izmenim a,b? "
7 : z$ = INKEY$
IF z$ = "y" THEN 1
IF z$ = "n" THEN 8 ELSE 7
8 : END
Результат выполнения программы представлен на рисунке 4.
Рисунок 4 Результат выполнения методом касательных
5. Комбинированный метод
REM "kombi method"
DEF fnf (x) = x ^ 3 - x - 7
DEF fnv (x) = 3 * x ^ 2 - 1
DEF fnw (x) = 6 * x
INPUT "vvedite a,b ", a, b
IF fnf(a) * fnw(a) > 0 THEN a = b1 AND b = a1
k = 0
1 : x1 = a - (b - a) / (fnf(b) - fnf(a)) * fnf(a)
x2 = b - fnf(b) / fnv(b)
k = k + 1
IF ABS(x2 - x1) / 2 < .00001 THEN 2
a = x1: b = x2
IF k < 100 THEN 1
2 : PRINT "x0= "; (x1 + x2) / 2
PRINT "f(x0)= "; fnf((x1 + x2) / 2)
PRINT "k= "; k
END
Результат выполнения программы представлен на рисунке 5.
Рисунок 5 Результат выполнения комбинированным методом
6. Метод итераций
REM "method iteration"
DEF fnf (x) = x ^ 3 - x - 7
DEF fnz (x) = (x + 7) ^ (1 / 3)
INPUT "vvedite a,b ", a, b
1 : INPUT "vvedite x1 ", x1
k = 0
2 : x2 = fnz(x1)
k = k + 1
IF ABS(x2 - x1) < .000001 THEN 3
x1 = x2
IF k < 100 THEN 2
3 : y = (x1 + x2) / 2
PRINT "x0= "; y
PRINT "f(x0)= "; fnf(y)
PRINT "k= "; k
PRINT "izmenim x1? "
4 : z$ = INKEY$
IF z$ = "y" THEN 1
IF z$ = "n" THEN 5 ELSE 4
5 : END
Результат выполнения программы представлен на рисунке 6.
Рисунок 6 Результат выполнения методом итераций
7. Метод Симпсона (парабол)
REM "method Simpsona"
DEF fnf (x) = x ^ 3 - x - 7
DIM J(2)
INPUT "vvedite a,b ", a, b
1 : INPUT "vvedite n ", n
k = 1
2 : h = (b - a) / n: J(k) = 0
b1 = b - 2 * h
h1 = 2 * h
FOR x = a TO b1 STEP h1
J(k) = J(k) + fnf(x) + 4 * fnf(x + h) + fnf(x + 2 * h)
NEXT x
J(k) = J(k) * h / 3
n = 2 * n : k = k + 1
IF k = 2 THEN 2
e = ABS(J(2) - J(1)) / 15
S = J(2) + e
PRINT "integral = "; S
PRINT "n = "; n / 4
PRINT "e = "; e
PRINT "izmenim n? "
3 : y$ = INKEY$
IF y$ = "y" THEN 1
IF y$ = "n" THEN 4 ELSE 3
4 : END
Результат выполнения программы представлен на рисунке 7.
Рисунок 7 Результат выполнения методом Симпсона (парабол)
Задание.
а) Р(х) = 6х6 +5х5 + 4х4 + 3х3 + 2х2 + х +1
Р(х) = (((((6х + 5) × х + 4) × х + 3) × х + 2) × х + 1) × х + 1
REM "vicheslenie znachenia mnogochlena"
1 : INPUT "vvedite stepen n ", n
DIM a(10)
FOR k = n TO 0 STEP -1
PRINT "a("; k; ") = ";
INPUT a(k)
NEXT k
2 : INPUT "vvedite x ", x
p = a(n)
FOR k = n TO 1 STEP -1
p = p * x + a(k - 1)
NEXT k
PRINT "p("; x; ") = "; p
PRINT "izmenim x? "
3 : y$ = INKEY$
IF y$ = "y" THEN 2
IF y$ = "n" THEN 4 ELSE 3
4 : PRINT "izmenim mnogochlen? "
5 : y$ = INKEY$
IF y$ = "y" THEN 1
IF y$ = "n" THEN 6 ELSE 5
6 : END
Результат выполнения программы представлен на рисунке 8.
Рисунок 8 Результат выполнения программы
Для данного многочлена построим схему Горнера:
6 |
5 |
4 |
3 |
2 |
1 |
1 | |
6х + 5 = р |
рх + 4 |
рх + 3 |
рх + 2 |
рх + 1 |
рх + 1 | ||
х = 1 |
11 |
15 |
18 |
20 |
21 |
22 | |
х = 2 |
17 |
38 |
79 |
160 |
321 |
643 | |
х = 5 |
35 |
179 |
898 |
4492 |
22461 |
112306 | |
х = 10 |
65 |
654 |
6543 |
65432 |
654321 |
6543211 |
б) Р(х) = х5 + 2х4 + 3х3 + 4х2 + 5х – 6
Р(х) = ((((х + 2) × х + 3) × х + 4) × х + 5) × х - 6
Для данного многочлена результат показан на рисунке 9.
Рисунок 9 Результат программы
Построим схему Горнера:
1 |
2 |
3 |
4 |
5 |
-6 | |
х + 2 = р |
рх + 3 |
рх + 4 |
рх + 5 |
рх - 6 | ||
х = 1 |
3 |
6 |
10 |
15 |
9 | |
х = 2 |
4 |
11 |
26 |
57 |
108 | |
х = 3 |
5 |
18 |
58 |
179 |
531 | |
х = 4 |
6 |
27 |
112 |
453 |
1806 | |
х = 5 |
7 |
38 |
194 |
975 |
4869 |