Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт_Гаусс_18 - копия22.docx
Скачиваний:
8
Добавлен:
22.09.2019
Размер:
1.18 Mб
Скачать

4.2. Схема алгоритма

i=r,n,1

да

ar-1,r-1<0.000001

q=ai,r-1 / ar-1,r-1

ai,j=ai,j-ar-1,j*q

bi=bi-br-1*q

нет

r = 2,n,1

j = r-1,n,1

Рис. 4.1 Схема алгоритма программы

xn=bn/an

xi=(bi-S)/aii

i =n-1,1,-1

S=0

S=S+aij*xj

i =i+1,n,1

Рис. 4.1 Схема алгоритма программы. Продолжение

p = 1,n,1

q = 1,n,1

да

ar-1,r-1<0.000001

нет

COLOR 10

COLOR 7

Рис. 4.1 Схема алгоритма процедуры Matr

4.3. Текст программы

REM Программа выполняет решение СЛАУ квадратного типа методом Гаусса

REM ввод данных

CLS

PRINT : PRINT : PRINT " Программа для решения СЛАУ методом Гаусса"

PRINT : PRINT

REM задание порядка системы

INPUT "Порядoк системы n - ", N

REM ввод данных

PRINT "Bвод данных (a)"

FOR i = 1 TO N STEP 1

FOR j = 1 TO N STEP 1

PRINT "a("; i; ","; j; ") - ";

INPUT a(i, j)

NEXT j

NEXT i

PRINT "Bвод данных (a)"

FOR i = 1 TO N STEP 1

PRINT "b("; i; ") - ";

INPUT b(i)

NEXT i

REM печать матрицы

PRINT : PRINT : PRINT "Исходная система:"

GOSUB MATR

REM ожидание нажатия любой клавиши

PRINT INPUT$(1)

CLS

REM ПРЯМОЙ ХОД (обнуление столбцов)

PRINT : PRINT "Обнуление столбцов"

FOR r = 2 TO N

FOR i = r TO N

REM **** проверка перед делением ******

IF ABS(a(r - 1, r - 1)) < .000001 THEN

PRINT r; i

PRINT " 0-ой элемент в "; r - 1; " строке"

END

END IF

REM **************************************

REM вычисление множителя q

q = a(i, r - 1) / a(r - 1, r - 1)

REM вычитание свободных членов

b(i) = b(i) - b(r - 1) * q

REM вычитание строк

FOR j = r - 1 TO N

a(i, j) = a(i, j) - a(r - 1, j) * q

NEXT j

NEXT i

REM печать промежуточной матрицы

GOSUB MATR

NEXT r

REM ОБРАТНЫЙ ХОД (вычисление корней)

PRINT

PRINT "Вычисление корней"

REM последний корень

x(N) = b(N) / a(N, N)

PRINT "x("; N; ")="; USING "##.##"; x(N)

REM обратный цикл

FOR i = N - 1 TO 1 STEP -1

REM вычислить S (подставить в уравнение уже известные х-ы)

S = 0

FOR j = i + 1 TO N

S = S + a(i, j) * x(j)

NEXT j

REM вычислить корень

x(i) = (b(i) - S) / a(i, i)

PRINT

PRINT "x("; i; ")="; USING "##.##"; x(i)

NEXT i

END

REM *******************

REM процедура печати матрицы

MATR:

PRINT

FOR p = 1 TO N STEP 1

FOR q = 1 TO N STEP 1

IF ABS(a(p, q)) < .000001 THEN

COLOR 10

ELSE COLOR 7

END IF

PRINT USING "###"; a(p, q);

NEXT q

PRINT USING "#####"; b(p);

PRINT

NEXT p

RETURN