- •Вычислительная математика лабораторный практикум
- •Содержание
- •Метод исключения Гаусса
- •Введение
- •Построение алгоритма исключения Гаусса
- •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 по формуле Стирлинга получим Эта вычислительная проблема, связанная с использованием метода Крамера, названа математиками «проклятием размерности». Алгоритм Гаусса требует всего порядка операций. Он прост, нагляден и является одним из лучших алгоритмов решения линейных систем.