3) Написать программу для построения трехмерной поверхности функции z=f(x, y) следующего вида z = f(x).*sin(y)./y, где f(x) берется из табл. 1 (см. приложение А). Задать цветовую шкалу для значений z, используя команды COLORMAP и COLORBAR.
4) Написать программу для проверки генератора случайных чисел. На одном графическом экране построить гистограммы нормального и равномерного законов распределений (использовать операторы RAND, RANDN, SUBPLOT и HIST).
Отчет по данной работе представляет собой программу (один или несколько m-файлов) на языке MATLAB. Листинг программы в письменном виде или саму программу в виде m-файла следует прислать для проверки в ТМЦ ДО ТУСУР. Программа должна содержать все необходимые комментарии, объясняющие работу отдельных фрагментов и основных операторов. Также в заголовке программы в комментариях студент должен указать свои ФИО, идентификатор, пароль и номер варианта.
4.3 Лабораторная работа № 2. Решение систем линейных алгебраических уравнений методом Гаусса
Целью данной лабораторной работы является изучение одного из основных методов решения систем линейных алгебраических уравнений – метода Гаусса, а также закрепление навыков программирования в среде системы для инженерных расчетов MATLAB.
Система алгебраических линейных уравнений (СЛАУ) имеет вид:
Также СЛАУ можно записать в матричной форме
Ax=b,
где x=[x1,x2,…,xn]T – вектор-столбец неизвестных; b = [b1,b2,…,bn]T – вектор-столбец коэффициентов правой части системы (вектор свободных членов); А – матрица nxn коэффициентов левой части СЛАУ. Значок Т означает транспонирование матрицы (вектора), т.е. замену строки соответствующим столбцом.
В общем случае система (1) будет иметь единственное решение, если выполняются следующие условия:
1) число неизвестных xi (
2) определитель матрицы коэффициентов A не равен нулю, т.е. detA¹0.
Если detA=0, то в системе (1) есть линейно зависимые уравнения и СЛАУ в общем случае не имеет единственного решения. Система уравнений, у которой определитель матрицы коэффициентов равен нулю (detA=0), называется вырожденной.
Для решения СЛАУ используются два класса методов: прямые и итерационные. Прямые методы являются универсальными и используются для решения СЛАУ сравнительно невысокого порядка (n £ 100…200). Прямые методы – это методы, которые теоретически позволяют получить точное решение системы уравнений за конечное число действий. Они используют аналитические выражения, которые дают точный результат, если не делать округления чисел в процессе расчетов. К прямым методам относятся, в частности, методы Гаусса обратной матрицы, Крамера и др.
На практике при выполнении вычислений на ЭВМ неизбежны ошибки округления. Поэтому решение СЛАУ на ЭВМ с использованием прямых методов осуществляется с определенной погрешностью, которая возрастает с увеличением порядка системы уравнений.
В данной лабораторной работе студентам предлагается реализовать наиболее распространенный метод решения СЛАУ – метод Гаусса. Этот метод при реализации в виде программы требует гораздо меньшего числа вычислений, чем методы обратной матрицы и Крамера. Метод Гаусса применим только к СЛАУ с невырожденной матрицей коэффициентов (detA¹0).
Метод Гаусса основан на приведении матрицы к треугольному виду. Это достигается последовательным исключением неизвестных из уравнений системы. Сначала при использовании первого уравнения в качестве ведущего исключается x1 из всех последующих уравнений СЛАУ. Затем с помощью второго уравнения исключается x2 из третьего и всех последующих уравнений и т.д. Этот процесс называется прямым ходом. Он продолжается до тех пор, пока в левой части последнего (n-го) уравнения не останется лишь один член с неизвестным xn, т.е. пока матрица коэффициентов А системы не будет приведена к треугольному виду.
На произвольном k-м шаге прямого хода формулы для пересчета коэффициентов имеют следующий вид:
Это основные формулы для прямого хода метода Гаусса.
Обратный ход метода Гаусса состоит в последовательном вычислении искомых неизвестных: решая последнее уравнение приведенной системы, находим неизвестное xn. Далее, используя это значение, из предыдущего (n–1)-го уравнения вычисляем xn–1, и т.д. Последним найдем x1 из первого уравнения.
Общая формула расчета переменных xk (
В процессе исключения неизвестных приходится выполнять деление неизвестных на коэффициенты a11, a22, … и т.д. Поэтому они должны быть отличными от нуля, в противном случае необходимо соответственным образом переставить уравнения СЛАУ. Перестановка уравнений должна быть предусмотрена в вычислительном алгоритме при его реализации на ЭВМ.
Недостаток стандартного метода Гаусса (метода единственного деления). При малой величине главного элемента
Вся система MATLAB ориентирована на работу с матрицами, поэтому все функции линейной алгебры полностью реализованы в виде стандартных подпрограмм или встроенных процедур. Рассмотрим наиболее часто употребляемые.
norm – вычисление нормы векторов и матриц
Синтаксис: n=norm(A,p)
Функция n=norm(A,p) вычисляет p-норму матрицы А. В качестве параметра p можно использовать значения 1, 2 или inf. Матрица А имеет размер nxm.
n=norm(A,1) – вычисляет 1-норму матрицы А:
n=norm(A,inf) – вычисляет max-норму (¥-норма) матрицы А:
n=norm(A,2) – вычисляет 2-норму (евклидову норму) матрицы А:
cond – вычисление числа обусловленности матрицы
Синтаксис: k=cond(A)
Функция k=cond(A) возвращает число обусловленности матрицы А. Число обусловленности k – есть мера относительной погрешности при операциях обращения матрицы. Оно характеризует близость матрицы к вырождению. Матрицы с большим по величине числом обусловленности (близкие к вырожденной) дают большие ошибки при решении СЛАУ или обращении матрицы.
rcond – оценка числа обусловленности матрицы
Синтаксис: k=rcond(A)
Функция k=rcond(A) возвращает величину, обратную значению числа обусловленности матрицы А относительно 1-нормы. Если матрица А хорошо обусловлена, то значение k близко к единице, если матрица А плохо обусловлена, то значение k близко к нулю.
det – определитель матрицы
Синтаксис: d=det(A)
Функция d=det(A) вычисляет определитель квадратной матрицы.
inv – вычисление обратной матрицы
Синтаксис: Y=inv(A)
Функция Y=inv(A) вычисляет матрицу, обратную квадратной матрице А. В случае, когда матрица А плохо масштабирована или близка к вырожденной выдается соответствующее предупреждение.
На практике вычисление явной обратной матрицы требуется не часто. Если необходимо искать решение СЛАУ, то в среде MATLAB рекомендуется использовать решатели систем, т.е. операторы вида x=A\b или x=A/b, а не операцию x=inv(A)*b. Расчеты с помощью решателя систем выполняются быстрее и с большей точностью.
/ \ – решатели систем линейных уравнений
Синтаксис: X=B\A
X=B/A
Функция X=B\A находит решение системы уравнений вида AX=B, где А – прямоугольная матрица размера m x n и В – матрица размера n x k.
Функция X=B/A находит решение системы уравнений вида XA=B, где А – прямоугольная матрица размера n x m и В – матрица размера m x k.
lu – треугольное LU разложение матрицы
Синтаксис: [L,U,P]=lu(A)
Функция [L,U,P]=lu(A) находит разложение для квадратной матрицы А в виде трех составляющих – нижней треугольной матрицы L, верхней треугольной матрицы U и матрицы перестановок P, так что PA=LU.
Алгоритм LU-разложения основан на методе исключения Гаусса. LU-разложение широко используется при вычислении определителей, нахождении обратных матриц и при решении СЛАУ.
Для получения информации по другим функциям системы MATLAB для работы с линейной алгеброй см. дополнительную литературу или встроенный HELP среды.