Главная

Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Лабораторная работа 2. Решение систем линейных


Алгебраических уравнений методом Гаусса

Работа выполняется с использованием палитры программирования системы автоматизации математических вычислений Mathcad.

 

Задания:

1. Разработать программу для решения системы линейных алгебраических уравнений методом Гаусса с выбором главного элемента по столбцам.

2. Решить систему уравнений, определенную вариантом задания.

3. Произвести проверку решения.

4. Изменить матрицу коэффициентов А, сделав систему уравнений линейно зависимой, и проверить работоспособность программы в этом случае.

 

Варианты заданий (система уравненийв матричной записи имеет видAx=b):

1. A= ; b= . 2. A= ; b= .

 

3. A= ; b= . 4. A= ; b= .

 

5. A= ; b= . 6.A= ; b= .

7. A= ; b= . 8.A= ; b= .

9.A= ; b= . 10.A= ; b= .

 

11.A= ; b= . 12.A= ; b= .

 

13.A= ; b = . 14.A= ; b= .

 

15.A= ; b = . 16.A= ; b= .

 

17.A= ; b = . 18.A= ; b= .

 

19.A= ; b = . 20.A= ; b= .

 

21.A= ; b = .

 

Требования к оформлению отчета:

1) название и цель работы;

2) задание на работу;

3) текст программы на Mathcadе;

4) результаты работы программы;

5) проверку решения.

 

Вспомогательные материалы

Пример разработки программы для решения системы линейных алгебраических уравнений в системе Mathcad (рис. 2.3 – рис. 2.8).

Объявление переменных.

Определим переменные и зададим матрицу системы линейных уравнений:

Создадим новый лист в MathCAD и для начала напишем оператор ORIGIN:=1.Это нужно для того, чтобы MathCAD начинал нумерацию в матрицах с единицы, а не с нуля.

Теперь определим матрицу А.

Обратите внимание, что в MathCAD строчные и прописные буквы различны, следите за регистром переменных.


Наберите A:=нажмите меню Insert è Matrixзадайте размер-ность матрицы 3 на 3 и нажмите OK. Заполните матрицу так, как показано на рис. 2.3. Тем же способом задайте матрицу-столбец B.

Объединим все в одну расши-ренную матрицу matr с помощью оператора augment.

Присвоим переменной nзначе-ние 3. Она будет определять коли-чество корней системы.

Чтобы посмотреть значение любой переменной, достаточно написать ее имя и поставить знак равенства. Выведем значение перемен-ной matr.

Рис. 2.3  
Еще одной важной особен-ностью MathCAD является последовательность операторов.Например, если мы попробуем написатьвыражениеmatr:=augment(A,B) перед опре-делением матриц A и B, то MathCAD выдаст ошибку.

Переменные определены, теперь перейдем к написанию функции проверки матрицы на линейно-зависимые строки.

Проверка на линейно-зависимые строки

На языке Pascal эта процедура будет выглядеть так:

Function Proverka(): boolean;

var d1: single;

da: word;

lin: boolean;

Begin

d1:=0;

da:=0;

lin:=False;

For i:=0 to n-2 do

Forj:=i+1 to n-1 do

Begin

For k:=0 to n-1 do

If matr[j,k]<>0 then d1:=d1+matr[i,k]/matr[j,k];

d1:=d1/n;

For k:=0 to n-1 do

If matr[j,k]<>0 then If d1=matr[i,k]/matr[j,k] then da:=da+1;

If da=n then lin:=True;

d1:=0;

da:=0;

end;

Iflin then Proverka:=True Else Proverka:=False;

End.

Проверка на линейно-зависимые строки в Mathcadе. Откройте панель, изображенную на рис. 2.4. С помощью меню view è Math Palette, щелкните на третьей строке во втором столбике иконки и перед вами откроется еще одна панель инструментов (см. рис. 2.5), отвечающая за встроенный язык программирования. Так же в процессе решения нам понадобятся еще некоторые панели инструментов (см. рис. 2.6, 2.7). Найдите их на панели Math Palette (см. рис. 2.4).

Оператор Add Line обозначает в MathCAD программный модуль: вертикальную черту, справа от которой последовательно записываются операторы. Оператор ç означает присваивание: F ç 2+B.

Otherwise – это оператор аналогичный Else в Pascal. С остальными операторами вы знакомы.

Напишем имя функции, оператор присваивания и вставим программный модуль, несколько раз нажав кнопку Add Line на панели программирования (см. рис. 2.8).

Определим локальные переменные:

 

Еще одной особенностью языка MathCAD является то, что он сам определяет тип переменных:

d1 –хранит результат деления строк матрицы;

da –хранит количество совпавших элементов деления;

s1 – для хранения сообщения и результата проверки (в Pascal эта перемен-ная lin).

Теперь нужно разделить все строки между собой друг на друга и определить общее частное. Легче всего это сделать, разделив поочередно сначала первую строчку на все другие, затем вторую на оставшиеся и т.д.

Запишем это так:

 

i будет обозначать делимое, а j делитель.

Важно!Чтобы вставить последовательность 1..n-1, нажмите на панели инструментов.

Внимание!Не вводите с клавиатуры имена программных операторов. Для их вставки с клавиатуры можно применять лишь сочетания клавиш, которые приведены в тексте всплывающей подсказки

Рис 3.
.

 

 

В тело цикла вставив Add Line, получим еще один цикл, для того чтобы найти сумму всех частных. Следует учитывать ситуацию деле-ния на ноль, поэтому ограничим действия с помощью условного оператора if.

Обратите внимание! Что в MathCAD оператор if записывается в отличие от записи в Pascal следующим образом: сначала действие, которое произойдет, если выполнится условие.

Следующим шагом найдем среднее от частного, разделив на число слагаемых n и присвоив это значение d1.

 

 


Теперь проверим, сколько слагаемых равны d1. Переменную da будем

увеличивать на единицу, если условие верно.

 
 

Так же, как и в предыдущем случае не стоит допускать деления на ноль, поэтому здесь используется вложенный оператор if.

После выполнения цикла, проверим, равно ли da = n. Если так, то эти строки линейно зависимые.

Пример:

Допустим, матрица выглядит так: .

d1 будет равно = 1/2+2/4+3/6= 1,5

d1 =1,5 / n = 1,5 / 3 = 0,5

d1 = 1/2 = 2 /4 = 3/6 = 0,5 , то da= 3 и равно n, значит, строки линейно-зависимые.

Далее установим значение переменных da и dl на ноль, чтобы гарантировать нормальную работу алгоритма при нижеследующих итерациях.


Возвратим результат функции. Если значение строковой переменной s1 так и не изменилось, то возвратим матрицу matr, в противном случае выведем сообщение о наличии линейной зависимости.

 

3. Нахождение максимального элемента в столбце.

Для реализации модифицированного метода Гаусса нам понадобится функция нахождения максимального элемента в столбце и возвращение номера строки этого элемента.

 
 

Алгоритм этой функции достаточно прост и не требует подробных объяснений.

 

4. Перестановка строк в матрице.

После того как найдена строка с максимальным элементом в столбце, возможно, нам понадобиться поменять эти строки местами. Для этого создадим функцию:

 
 

Определим переменные: i1будет использоваться в цикле, а temp для временного хранения элементов матрицы. Далее цикл и стандартный алгоритм замены переменных.

Возвратим матрицу matr.

 

5. Прямой ход.

Все дополнительные функции определены, теперь можно перейти непосредственно к поиску решения. Выполним прямой ход в методе Гаусса:


Определим некоторые переменные: i1будет использоваться в цикле, а s1 для хранения сообщения о том, что система не имеет единственного решения. Создадим главный цикл.

Первым делом найдем строку с максимальным элементом через ранее объявленную функцию maxcol и присвоим это значение переменной max. Чтобы застраховать себя от частного случая, проверим, не является ли максимальный элемент равным нулю. Если это так, то система не имеет единственного решения,и выйдем из цикла, используя команду break. В Pascal сразу произведем замену Zamena (i1,MaxCol(i1)) и реализуем алгоритм проверки в теле функции maxcol:


В MathCAD:

Если все в порядке, то поменяем строки местами.

Получим разрешающее уравнение, разделив каждый элемент на первый в строке i1:

 

Присвоим единицу коэффициенту при xi1 .

Умножим разрешающее уравнение i1 на первый коэффициент уравнения j и вычтем его из уравнения j.

 

 

Присвоим ноль коэффициенту при хj,i1 .

После выполнения всех итераций матрица примет треугольный вид, теперь несложно найти корни системы.

 

Не забудьте возвратить преобразованную матрицу, если система не имеет единственного решения, соответствующее сообщение.

 

6. Обратный ход

Теперь не составит труда найти корни уравнения, выполнив обратный ход. Напишем еще одну функцию oh:

Выполним обратный цикл, задав диапазон значений от n до2, где n >= 2.

Тем самым пройдем по строкам в обратном порядке.

Затем еще один цикл, чтобы пройти по всем элементам строки, от последнего до первого. Последовательно исключив неизвестные переменные, получим в последнем столбце матрицы корни уравнения.

Задача решена, осталось только вывести результаты.

7. Вывод ответа

Создадим матрицу-столбец a из последнего столбца матрицы matr, затем возвратим ее.

 


Соберем все воедино в функции otvet:

1. Выполним:

1) проверку на линейную зависимость;

2) прямой ход, если значение matr удовлетворяет условию;

3) обратный ход с аналогичной проверкой;

2. Присвоим matr полученный результат;

3. Вернем значение функции (им может быть или матрица-столбец с корнями системы или одно из двух сообщений).

В заключении выведем ответ, набрав otvet =.Ответ может быть трех типов:


Пример программы в MathCAD


 

 



Контрольные вопросы:

 

1. Какой вид имеет матрица коэффициентов после окончания прямого хода в методе Гаусса ?

2. Назовите операции, которые выполняются при обратном ходе?

3. Какие преимущества имеет модифицированный метод Гаусса по сравнению с обычным методом?

 



Последнее изменение этой страницы: 2016-06-10

headinsider.info. Все права принадлежат авторам данных материалов.