
- •Вычислительная математика лабораторный практикум
- •Содержание
- •Метод исключения Гаусса
- •Введение
- •Построение алгоритма исключения Гаусса
- •3. Реализация алгоритма Гаусса в Excel
- •4. Реализация алгоритма Гаусса в пакете Mathcad
- •5. Реализация алгоритма Гаусса на языке Turbo Pascal
- •6. Вычисление определителя и обратной матрицы
- •7. Выбор ведущего элемента
- •8. Числа обусловленности
- •9. Задания для самостоятельной работы
- •Контрольные вопросы
- •1.Введение
- •Метод Якоби для решения слау
- •Метод Зейделя для решения слау
- •Задания для самостоятельной работы
- •5. Контрольные вопросы
- •Численные методы решения нелинейных уравнений
- •1. Введение
- •2. Отделение корней уравнения
- •3. Метод дихотомии для решения нелинейных уравнений
- •4. Метод Ньютона для решения нелинейных уравнений
- •5. Задания для самостоятельной работы
- •6. Контрольные вопросы
- •Полиномиальная интерполяция
- •1. Интерполяция данных каноническим полиномом
- •2. Интерполяционный полином Ньютона
- •3. Интерполяционный полином Лагранжа
- •4. Задания для самостоятельной работы
- •Контрольные вопросы
- •Метод наименьших квадратов
- •1. Введение
- •2. Линейная аппроксимация
- •3. Аппроксимация нелинейными функциями
- •4. Аппроксимация полиномом
- •Задания для самостоятельной работы
- •6. Контрольные вопросы
- •1. Введение
- •2. Постановка задачи
- •3. Численное дифференцирование с заданной точностью
- •Модификация алгоритма численного дифференцирования Использование центральной разности (6.3) для приближения производной позволяет проводить вычисления с точность порядка :
- •Результаты вычислений сведем в таблицу:
- •5. Действия над приближенными числами
- •6. Задания для самостоятельной работы
- •Контрольные вопросы
- •1. Введение
- •2. Метод прямоугольников
- •3. Метод трапеций
- •4. Метод парабол
- •5. Вычисление интегралов с заданной точностью
- •Метод Гаусса
- •7. Задания для самостоятельной работы
- •2. Провести расчеты знакомого уже нам интеграла ошибок
- •8. Контрольные вопросы
- •Список литературы
- •Учебное издание
4. Реализация алгоритма Гаусса в пакете Mathcad
Для реализации алгоритма Гаусса в пакете Mathcad необходимо знать некоторые функции определения матриц и операции с блоками матриц:
matrix(m,n,f)
– создает и заполняет матрицу размерности
,
элемент которой, расположенный в i-ой
строке, j-м столбце, равен значению
функции
;
diag(v) – создает диагональную матрицу, элементы главной диагонали которой хранятся в векторе v;
identity(n) – создает единичную матрицу порядка n;
augment(A,B) – формирует матрицу, в первых столбцах которой содержится матрица A, а в последних – матрица B (матрица A и Bдолжны иметь одинаковое число строк);
stak(A,B) – формирует матрицу, в первых строках которой содержится матрица A, а в последних – матрица B(матрица A и Bдолжны иметь одинаковое число столбцов);
submatrix(A,ir,jr,ic,jc) – формирует матрицу, которая является блоком матрицы А, расположенным в блоках с ir по jr и в столбцах с ic по jc, ir ≤ jr, ic ≤ jc.
Номер первой строки (столбца) матрицы или первой компоненты вектора хранится в Mathcad в переменной ORIGIN. По умолчанию в Mathcad координаты векторов, столбцы и строки матрицы нумеруются начиная с 0 (ORIGIN:=0). Поскольку в математической записи чаще используется нумерация с 1, здесь и в дальнейшем перед началом работы с матрицами будем определять значение переменной ORIGIN:=1.
Приведем пример решения системы методом Гаусса в Mathcad:
5. Реализация алгоритма Гаусса на языке Turbo Pascal
Введем двумерный массив
const n_max=20;
type dim2=array[1..n_max, 1..n_max] of real;
и запишем процедуру решения СЛАУ методом исключения Гаусса:
procedure Gauss_01( var a:dim2; n:integer);
var i,j,k,np,kp :integer; s:real;
begin
np:=n+1;
for k:=1 to n do { прямой ход}
begin kp:=k+1;
for j:=kp to np do { нормировка на единицу диагонального элемента }
a[k,j]:=a[k,j]/a[k,k];
for i:=kp to np do { последовательное исключение всех элементов в к-ом столбце}
for j:=kp to np do a[i,j]:=a[i,j]-a[i,k]*a[k,j];
end;
for i:=n-1 downto 1 do {обратный ход}
begin s:=a[i,n+1];
for j:=i+1 to n do s:=s+a[i,j]*a[j,np];
a[i,np];=s
end
end;
Обратите внимание, где размещены результаты вычислений. Прежде всего, необходимо отладить программу и произвести тестовые расчеты. Для тестирования можно рассмотреть различные способы формирования матрицы . Приведем, простую процедуру:
procedure Data (var a:dim2; var n:integer);
var i, j:integer;
begin n:=4;
for i:=1 to n do begin
for j:=1 to n do
if i=j
then a[i,j]:=4.0
else a[i,j]:=1.0;
a[i, n+1]:=i*1.0
end
end;
Таким образом, формируется исходная система уравнений:
,
(1.7)
результатом вычислений которой является вектор
Прямой ход метода Гаусса
строится на трех вложенных циклах (см.
листинг подпрограммы), следовательно
общее число арифметических операций,
требуемых для приведения матрицы к
верхнетреугольному виду, будет
пропорционально
Эту оценку принято записывать как
Обратный ход метода исключения Гаусса
требует на порядок меньше операций
Для сравнения отметим, что в методе
Крамера на вычисление только одного
определителя требуется порядка n!
операций. Так, при n=100
по формуле Стирлинга получим
Эта вычислительная проблема, связанная
с использованием метода Крамера, названа
математиками «проклятием размерности».
Алгоритм Гаусса требует всего порядка
операций. Он прост, нагляден и является
одним из лучших алгоритмов решения
линейных систем.