СПЕКТРУМ В ШКОЛЕ
ИФК.: Пугачев Анд-рей Николаевич из г.Ковров, Владимирской области, предлагает на суд читателей ZX РЕВЮ свой материал, посвященный численным методам. КОРР: в ZX РЕВЮ 1993 года было напечатано несколько статей о численных методах. Но потом эта очень интересная тема была забыта. Чтобы как то вернуть справедливость, я специально для журнала написал три программы на бейсике по численным, методам. Это программа решения СЛАУ "метхюдом Зейдсля" (очень полезная вещь является модификацией метода простых итераций), и две программы по поиску минимума функций: метод золотого сечения и метод дихотомии.
МЕТОД ЗЕИДЕЛЯ РЕШЕНИЯ СЛАУ
Позволяет получить решение системы с заданной погрешностью за ограниченное количество итераций. Метод сходится при условии, что диагональные коэффициенты системы по абсолютной величине равны или больше любого другого коэффициента в своей строке.
All А12 А13
А21 А22 А23
А31 А32 АЗЗ
An J Ап2 АпЗ
Ann Вп
Программа на Бейсике: 5 REM Ввод
10 DIM А(30,30) DIM В(30) DIM Z(30) DIM D(30) DIM X(30)
20 INPUT "Количество уравнений (<=30)";KOLUR 40 INPUT "Погрешность метода"; EPS 50 FOR 1=1 TO KOLUR 60 FOR J=1 TO KOLUR 70 INPUT "Введите A[i,j]";A(l,J) 80 PRINT "A[";l;V';J;"]=";A(ltJ) 90 NEXT J
100 INPUT "Введите B[i]";B(l) 110 LET Z(I)=B(I)/A(I,I) 120 PRINT "B[";I;"]=";B(I) 130 NEXT I 135 REM Analiz 140 FOR 1=1 TO KOLUR 150 FOR J=1 NJ KOLUR 160 IF ABS (A(l.l)) < ABS (A(I,J)) THEN PRINT "Нет сходимости!": STOP 170 NEXT J 180 NEXT I 185 Solution
190 LET S=0 REM Счетчик итераций
200 LET K=0 REM Признак точности решения 210 FOR 1=1 TO KOLUR 220 LET D(l)=-B(l) 230 FOR J=1 TO KOLUR 240 LET D(I)=D(I)+A(I,J)*Z(J) REM Вычисление "невязок" 250 NEXT J
260 IF ABS (D(l)/A(l,l)) > EPS THEN LET K= 1: REM Точность не достигнута
270 LET X(I)=Z(I)-D(I)/A(I,I) REM Корректировка решения 280 LET Z(I)=X(I) REM Заполнение для использования на данной итерации
290 NEXT I 300 LET S=S+1
310 PRINT "Итерация номер ";S 320 FOR 1=1 TO KOLUR 330 PRINT "X[";I;"]=";X(I);" delta_X=";-D(l)/D(l,l) 340 NEXT I
350 PRINT "Для продолжения нажмите Enter" 355 PAUSE 0
360 IF KO0 THEN GO TO 200 REM Точность достигнута 365 REM Result 380 PRINT "Результаты: 390 PRINT "Количество итераций = "; S
400 FOR 1=1 TO KOLUR 410 PRINT "X[";I;"]=";X(I) 420 NEXT I
Метод "Золотого сечения" поиска минимума функции y=F(x)
10 LET С=0.618 LET D=0.382 13 INPUT "Начало отрезка = ";А INPUT "Конец отрезка = "; В IF А>=В THEN GOTO 13
15 INPUT "Допустимая погрешность = "; EPS GOSUB 58 GOSUB 70 21 IF Y1>Y2 THEN GO TO 36
26 LET B=X2 LET X2=X1 LET Y2=Y1
27 GOSUB 58 GO TO 43
36 LET A=X 1 LET X1 =X2 LET Y1=Y2
37 GOSUB 70
43 IF ABS (B-A) > EPS THEN GO TO 21 50 PRINT "Результат: 52 LET X=(A+B)/2 PRINT "X_min=";X STOP
58 LET X1=C*A+DWB LETX=X1 GOSUB 82 LET Y1=Y RETURN 70 LET X2=D*A+C*B LET X=X2 GOSUB 82 LET Y2=Y RETURN
82 LET Y=............... REM Здесь
вводится исследуемое уравнение
Поиск минимума одномерной
функции методом
"дихотомии"
10 DEF FN F(X)=................ REM
Здесь вводится функция 20 INPUT "Начало отрезка "; А 30 INPUT "Конец отрезка В 40 INPUT "Допустимая погрешность ; EPS
50 REM Metod 60 LET l=0 70 LET C=(A+B)/2 80 IF FN F(C-EPS/10) < FN F(C+EPS/10) THEN GO TO 100 90 LET A=C-EPS/10 GO TO 110 100 LET B=C+EPS/10 110 LET 1=1+1
120 PRINT "C=";C;"Итерация номер: I
130 IF (B-A) > EPS THEN GO TO 70 140 PRINT "Результат: " 150 PRINT "X__min=";C;" Количество итераций = "; I