- •Основы алгоритмизации и языки программирования Учебно-методическое пособие
- •Содержание
- •Лабораторная работа №1. Базовые языковые конструкции vfp и vba. Основы работы с данными
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №2. Определение корней уравнений Определение корня уравнения методом деления отрезка пополам (дихотомии)
- •Определение корня одномерного уравнения методами касательных и секущих
- •Определение корня одномерного уравнения методом простой итерации
- •Задания
- •Контрольные вопросы
- •Определение максимального и минимального значения функции двух переменных методом градиентного спуска (подъема)
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №4. Рекурсия. Рекурсивные алгоритмы Рекурсия. Рекурсивные алгоритмы
- •Графика и рекурсивные алгоритмы
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №5. Аппроксимация, интерполяция и экстраполяция Простейшие способы интерполяции и экстраполяции данных
- •Аппроксимация выборки случайных чисел методом наименьших квадратов
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №6. Решение систем линейных уравнений Решение систем линейных уравнений методом Гаусса
- •Решение систем линейных уравнений методом Гаусса с выбором максимального элемента
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №7. Итерационные методы решения систем линейных уравнений. Приложения численных методов решения систем линейных уравнений Метод Зейделя
- •Метод Гаусса-Зейделя
- •Обращение матрицы nхn с использованием метода Гаусса
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №8. Вычисление определенных интегралов Вычисление определенных интегралов методом прямоугольников
- •Вычисление определенных интегралов методом трапеций
- •Вычисление интеграла по методу Симпсона
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №9. Численное решение дифференциальных уравнений Методы численного решения дифференциальных уравнений первого порядка
- •Метод Эйлера
- •Метод Кранка-Николсона
- •Метод Рунге-Кутты четвертого порядка для решения уравнения первого порядка
- •Методы численного решения систем дифференциальных уравнений Гармонические колебания
- •Затухающие колебания
- •Периодический процесс с затуханием и с внешней силой
- •Решение системы дифференциальных уравнений методом Эйлера
- •Решение системы дифференциальных уравнений первого порядка методом Рунге-Кутты
- •Контрольные вопросы
- •Задания
- •Лабораторная работа №10. Генерация равномерных и неравномерных распределений случайных чисел Использование гистограмм для отображения характера распределения случайной величины
- •Генератор дискретно-распределенных значений
- •Генерация дискретных распределений с заданным характером распределения вероятностей
- •Генерация непрерывных распределений вещественных величин Псевдонормальное распределение
- •Генерация линейно возрастающего распределения
- •Контрольные вопросы
- •Задания
- •Список рекомендуемой литературы и источников
Лабораторная работа №6. Решение систем линейных уравнений Решение систем линейных уравнений методом Гаусса
Базовый метод Гаусса предназначен для решения систем линейных уравнений.
Пример системы линейных уравнений:
(*)
Систему линейных уравнений в общем виде можно записать в следующем виде (1).
(1)
Формулу (1) можно переписать в сокращенных обозначениях:
A
·X=B
Рассмотрим процесс получения коэффициентов матрицы A для системы линейных уравнений (*):
1 шаг
2 шаг
заполняем матрицу А
для первого уравнения системы (*)
5x1+x2+3x4=3
для второго уравнения (*) x2+x3-x1=2
Таким образом, вся система уравнений (*) может быть записана в виде равенства произведения матрицы коэффициентов A и столбеца неизвестных X столбцу правых частей B:
В матричном виде можно записать несколько систем линейных уравнений, если у них матрица А одна и та же, а вектора правых частей различные.
Пример
Формально решение системы линейных уравнений АХ=В можно получить, умножив обе части этого уравнения на обратную матрицу А-1. В левой части получится единичная матрица, умноженная на вектор Х, а в правой части – А-1В
Е Х=А-1В.
Е Х= Х, таким образом, решение системы линейных уравнений имеет вид:
Х=А-1В.
Определение обратной матрицы, если система линейных уравнений имеет большой порядок – трудоемкий процесс.
Существуют различные численные методы для решения систем линейных уравнений, из них часто используются – прямой метод Гаусса, итерационный метод Гаусса-Зейделя.
Метод Гаусса (базовый) состоит из двух этапов:
Приведение системы линейных уравнений к треугольному виду.
Треугольный вид
Определение вектора решения.
Последнее уравнение
имеет вид
.
Откуда легко найти значение хn:
теперь можно получить неизвестные xn-1
xn
в
уже известен, перенесем это слагаемое
в правую часть
………………………………………..
Рассмотрим строку с номером k.
обозначим уже
известные величины sk
=
,
где j=k+1,
k+2,…,n
n+1>n
Алгоритм определения хi
Цикл по i от n до 1 с шагом -1
Конец Цикла
Детализируем этот фрагмент
si=0
Цикл по j от i+1 до n c шагом 1
si=si+
∙xj
Конец Цикла
Здесь si можно обозначить как s
(**)
Цикл по i
от n
до 1 с шагом -1
s
=0
Цикл по j от i+1 до n с шагом 1
Конец Цикла……………………
Конец Цикла
Этот цикл при i=n будет выглядеть следующим образом
Цикл по j от n+1 до n с шагом 1
Конец Цикла
и не выполнится ни разу, так как начальное значение j больше конечного.
Для проверки фрагмента (**) можно создать специальную систему уравнений с треугольной матрицей и решить ее.
Рассмотрим процедуру получения (приведения) треугольной матрицы (приведения исходной системы линейных уравнений к треугольному виду).
(1) (2)
1-й шаг. Преобразуем все уравнения, кроме первого, таким образом, чтобы элементы первого столбца стали нулевыми.
Преобразованное первое уравнение имеет вид:
(1)′=((1)/a11)·a21
(2)′=(2)-(1)·a21/a11
(3)′=(3)-(1)·a31/a11
….
(n)′=( n)-(1)·an-1/a11
Здесь (1) – первое уравнение исходной системы линейных уравнений; (1)', (2)', (3)', …, (n)' – преобразованные (1), (2), (3), …, (n) уравнения первоначальной системы.
Базовая строка = строка (1)
Цикл по i от 2 до n
Новая строка (i)=Старая Строка (i)-Строка(1)·Первый Элемент Старой Строки (i)/ Первый Элемент Базовой Строки
Конец Цикла
или
k=1-номер базовой строки
Цикл по i от k+1 до n
С
трока
(i)=Старая
Строка (i)-Строка(k)·Старая
Строка (i)(k)/Строка(k)(k)
Конец Цикла
или
k=1
Цикл по i от k+1 до n
p=a(i,k)/a(k,k)
Цикл по j от k до n
a(i,j)= a(i,j)- a(k,j)∙p (***)
Конец Цикла
b(i)=b(i)-b(k)∙p
Конец Цикла
Процедуру (***) необходимо повторить для всех базовых строк, для всех k от 1 до n–1.
Цикл по k от 1 до n-1
Цикл по i от k+1 до n
p=a(i,k)/a(k,k)
Цикл по j от k до n
a(i,j)= a(i,j)- a(k,j)∙p
Конец Цикла
b(i)=b(i)-b(k)∙p
Конец Цикла
Конец Цикла
Это базовый алгоритм приведения системы линейных уравнений к треугольному виду. Базовый алгоритм будет работать в том случае, когда диагональные элементы матрицы ai,j не равны нулю.
Базовый алгоритм метода Гаусса в общем виде выглядит следующим образом:
n=… ← задание размерности матрицы
Объявление матрицы а(n,n)
Объявление вектора b(n)
Объявление вектора x(n)
Задаем матрицу а(n,n)
Задаем вектор b(n)
Ц
икл
по k
от 1 до n-1
c
шагом 1
Цикл по i от k+1 до n c шагом 1
p=a(i,k)/a(k,k)
Цикл по j от k до n c шагом 1 (****)
a(i,j)= a(i,j)- a(k,j)∙p
Конец Цикла
b(i)=b(i)-b(k)∙p
Конец Цикла
Конец Цикла
Цикл по i от n до 1 c шагом -1
s=0
Цикл по j от i+1 до n c шагом 1
s=s+a(i,j)∙x(j)
Конец Цикла
x(i)=(b(i)-s)/a(i,i)
Конец Цикла
Печать вектора x(i)
Ниже приведен пример головной программы решения системы линейных уравнений с помощью базового метода Гаусса на языке VFP. Матрица задается генератором случайных чисел.
n=20
DIMENSION a(n,n), a1(n,n), a2(n,n), b(n),b1(n),x1(n),x(n)
SET DECIMALS TO 5
With _screen
.Cls
.FontName = “Название шрифта”
.FontSize = Размер шрифта
Endwith
Получить_матрицу(@a,n,1,10)
Получить_вектор(@b,n,0,10)
печ_матр_гаусс(@a,@b,n)
гаусс(@a,@b,@x,n)
? "x="
печ_вект(@x,n)
умн_матр_вект(@a1,@x,@x1,n)
? "b1="
печ_вект(@b1,n)
? "x1="
печ_вект(@x1,n)
