Прямые методы решения систем линейных уравнений
Характеристика способов решения систем линейных алгебраических уравнений (СЛАУ). Описание проведения вычислений на компьютере методом Гаусса, методом квадратного корня, LU–методом. Реализация метода вращений средствами системы программирования Delphi.
Рубрика | Математика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.05.2014 |
Размер файла | 118,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
алгебраический уравнение линейный решение
Решение систем линейных алгебраических уравнений (СЛАУ) имеет большое значение в практике вычислений. Это объясняется тем, что линейное приближение многих математических моделей реальных объектов приводит к системам линейных алгебраических уравнений. Задачи решения таких систем возникают при обработке экспериментальных данных, приближенном решении линейных интегральных и дифференциальных уравнений и в других областях. Практические способы решения зависят от структуры исходных данных, порядка матрицы коэффициентов, а также типа используемых вычислительных средств.
В настоящее время большое внимание уделяется пересмотру методов численного анализа и созданию новых алгоритмов, позволяющих наиболее эффективно использовать параллельные вычисления. В значительной мере это связано с развитием параллельных вычислительных систем с большим числом одновременно работающих процессоров [1].
При формальном подходе решение систем уравнений не встречает затруднений.
Если задана система
AX=B,
где A - квадратная матрица коэффициентов размером n х n, а B - вектор свободных членов размером n х 1, то решение сводится к нахождению вектора неизвестных X размером n х 1. В общем случае X = A-1B и при любом векторе B решение существует, если detA ? 0. Однако, этот метод практически непригоден при больших значениях n из-за чрезмерного объема вычислений. Общее число операций для формирования обратной матрицы равно n2 * n!-1.
Методы решения алгебраических задач разделяют на прямые и итерационные. Классы задач, для решения которых обычно применяют методы этих групп, можно соответственно назвать классами задач с малым и большим числом неизвестных. Изменение объема и структуры памяти компьютеров, увеличение их быстродействия и развитие численных методов приводят к смещению границ применения методов в сторону систем более высоких порядков. В настоящее время прямые методы обычно применяются длярешения систем до порядка 104, итерационные - до порядка 107.
Большинство прямых методов основано на переходе от заданной системы AX=B к новой системе CAX=CB такой, что система CAX=CB решается проще, чем исходная [2]. При решении системы методом Крамера важным является применение рациональных методов вычисления определителя. В общем случае нахождение определителя требует большого объема вычислений, но определитель треугольной матрицы вычисляется легко, он равен произведению диагональных элементов. Одним из методов, основанным на приведении матрицы системы к треугольному виду, является метод вращений.
В данной работе описываются прямые методы решения линейных систем. Работа состоит из 2 глав и приложения. В первой главе рассматриваются прямые методы решения линейных систем, такие как: метод Гаусса, LU метод, метод квадратного корня, метод правой прогонки. Во второй главе описан метод вращенийрешения линейных систем, который реализован в среде программирования Delphi. В приложении находится данная работа в электронном виде.
Целью настоящей работы является овладение численными методами решения линейных систем и реализация метода вращений в виде программы для BorlandDelphi.
Для достижения цели решались следующие задачи:
1. Составление обзора литературы по теме «Прямые методы решения линейных систем».
2. Реализация метода вращений средствами систем программирования Delphi.
Новизна и практическая значимость работы: составлена новая программа, которая может использоваться на практике.
Глава 1. Прямые методы решения систем линейных уравнений
1.1 Метод Гаусса
Запишем систему Ax=f, в развернутом виде [5]
Метод Гаусса состоит в последовательном исключении неизвестных из этой системы. Предположим, что . Последовательно умножая первое уравнение на и складывая с i-м уравнение, исключим из всех уравнений кроме первого. Получим систему
где
Аналогичным образом из полученной системы исключим . Последовательно, исключая все неизвестные, получим систему треугольного вида
Описанная процедура называется прямым ходом метода Гаусса. Заметим, что ее выполнение было возможно при условии, что все l=1,2…m-1 не равны нулю.
Выполняя последовательные подстановки в последней системе, (начиная с последнего уравнения) можно получить все значения неизвестных.
.
Эта процедура получила название обратный ход метода Гаусса.
Метод Гаусса может быть легко реализован на компьютере. При выполнении вычислений, как правило, не интересуют промежуточные значения матрицы А. Поэтому численная реализация метода сводится к преобразованию элементов массива размерности (m?(m+1)), где m+1 столбец содержит элементы правой части системы.
Для контроля ошибки реализации метода используются так называемые контрольные суммы. Схема контроля основывается на следующем очевидном положении. Увеличение значения всех неизвестных на единицу равносильно замене данной системы контрольной системой, в которой свободные члены равны суммам всех коэффициентов соответствующей строки. Создадим дополнительный столбец, хранящий сумму элементов матрицы по строкам. На каждом шаге реализации прямого хода метода Гаусса будем выполнять преобразования и над элементами этого столбца, и сравнивать их значение с суммой по строке преобразованной матрицы. В случае не совпадения значений счет прерывается.
Один из основных недостатков метода Гаусса связан с тем, что при его реализации накапливается вычислительная погрешность. В книге [8] показано, что для больших систем порядка m число действий умножений и делений близко к m3/3.
Для того, чтобы уменьшить рост вычислительной погрешности применяются различные модификации метода Гаусса. Например, метод Гаусса с выбором главного элемента по столбцам, в этом случае на каждом этапе прямого хода строки матрицы переставляются таким образом, чтобы диагональный угловой элемент был максимальным. При исключении соответствующего неизвестного из других строк деление будет производиться на наибольший из возможных коэффициентов и следовательно относительная погрешность будет наименьшей.
Существует метод Гаусса с выбором главного элемента по всей матрице. В этом случае переставляются не только строки, но и столбцы. Использование модификаций метода Гаусса приводит к усложнению алгоритма увеличению числа операций и соответственно к росту времени счета. Поэтому целесообразность выбора того или иного метода определяется непосредственно программистом.
Выполняемые в методе Гаусса преобразования прямого хода, приведшие матрицу А системы к треугольному виду позволяют вычислить определитель матрицы
.
Метод Гаусса позволяет найти обратную матрицу. Для этого необходимо решить матричное уравнение
,
Где Е единичная матрица. Его решение сводится к решению m систем
у вектора j -я компонента равна единице, а остальные компоненты равны нулю.
1.2 LU-метод
LU-метод основан на том, что если главные миноры матрицы А отличны от нуля, тогда матрицу А можно представить, причем единственным образом, в виде произведения
А=LU,
где L - нижняя треугольная матрица с ненулевыми диагональными элементами и U-верхняя треугольная матрица с единичной диагональю.[4]
Рассмотрим СЛАУ Ax=f.
Пусть матрица A(m?m) допускает LU - разложение
A=LU,
где
или
,
Окончательно запишем
Полагая получим следующие рекуррентные формулы для вычисления элементов матрицы L и U
Если найдены матрицы L и U, то решение исходной системы (1.1)ID_1 сводится к последовательному решению двух систем уравнений с треугольными матрицами
LU - метод позволяет вычислить определитель матрицы А
1.3 Метод квадратного корня
Метод квадратного корня по своему идейному содержанию близок к LU-методу. Основное отличие в том, что он дает упрощение для симметричных матриц [5]ID_1
Этот метод основан на разложении матрицы А в произведение
(1.2)
где S-верхняя треугольная матрица с положительными элементами на главной диагонали, ST- транспонированная к ней матрица
Пусть A(m?m) тогда
Из условия (2) получаются уравнения
(1.3)
Так как матрица А симметричная, не ограничивая общности, можно считать, что в системе (3) выполняется неравенство i?j. Тогда (3) можно переписать в виде
и замечая, что Таким образом, получается система уравнений.
В частности, при i=j получится
(1.4)
Далее, при i<j получим
(1.5)
По формулам (1.4) и (1.5) находятся рекуррентно все ненулевые элементы матрицы S.
Обратный ход метода квадратного корня состоит в последовательном решении двух систем уравнений с треугольными матрицами.
Решения этих систем находятся по рекуррентным формулам
Всего метод квадратного корня при факторизации A=SтS требует примерно операций умножения и деления и m операций извлечения квадратного корня.[8]
1.4 Метод правой прогонки
Метод правой прогонки применяется для решения систем с трёхдиагональными матрицами и представляет собой модификацию метода Гаусса [9]. Трехдиагональная матрица отличается тем, что ненулевые элементы могут стоять только на главной диагонали матрицы и двух соседних диагоналях. Все остальные элементы матрицы должны быть равны нулю. Приведем в качестве примера систему с трехдиагональной матрицей пятого порядка:
(1.6)
При обозначении элементов матрицы системы здесь применяется нестандартная система обозначений. Обозначения введены только для отличных от нуля коэффициентов, причем коэффициенты, стоящие на главной диагонали, обозначены буквой С со знаком минус, а коэффициенты, стоящие на двух соседних диагоналях, обозначены буквами А и В. Это позволяет существенно экономить память ЭВМ, не забивая ее огромным количеством никому не нужных нулей. Знаки минус, поставленные перед коэффициентами С и правыми частями F, появились из-за того, что мы будем использовать метод прогонки в дальнейшем при решении разных других задач, и нам будет удобнее, если матрица системы во всех случаях будет иметь одинаковый вид. Запишем произвольную систему с трехдиагональной матрицей (М-1)-го порядка в общем виде, используя описанную систему обозначений:
(1.7)
Система (1.6) эквивалентна системе (1.7) при М=6. Если применить к решению системы (1.7) процедуру прямого хода метода Гаусса, то в результате получится система, матрица которой будет иметь две диагоналями: главную и правую. Разделим каждое уравнение преобразованной системы на диагональный элемент, стоящий в этой строке. В результате получится система с двухдиагональной матрицей, на главной диагонали которой стоят единицы. Эта система будет иметь вид (при M=6)
(1.8)
Тогда рекуррентные формулы обратного хода метода Гаусса примут вид
, (1.9)
причём
. (1.10)
Для определения коэффициентов и заменим в равенстве (1.9) величину m на m-1:
(1.11)
и подставим в исходную систему (1.7):
После элементарных преобразований получим:
Сравнивая эти формулы с (1.9), получим:
,
(1.12)
Введём фиктивные величины,, , и . Положим
,, , (1.13)
тогда формулы неизвестных коэффициентов и при всех допустимых значениях m можно будет записать одинаково:
(1.14)
Рекуррентные формулы (1.8) - (1.9) позволяют вычислить все неизвестные коэффициенты и. Для получения решения системы (1.2) используем рекуррентную формулу (1.4), но для начала счёта по ней необходимо знать значение . Поскольку (так как ), значение можно выбрать любое, например,
. (1.15)
В результате получается следующий алгоритм решения системы (1.6) методом прогонки.
Вначале по рекуррентным формулам (1.14) с начальными условиями (1.13) получаются значения ,, , , … , , . Затем по рекуррентной формуле (1.9) с начальным условием (1.15) получается решение системы: .
В процессе вычисления величин и по формулам (1.14) происходит деление на величины , которые могут обращаться в ноль. В этом случае метод прогонки применять нельзя. Поэтому необходимо знать и предварительно проверять условия, при которых можно использовать метод прогонки. Достаточные условия применимости метода прогонки сформулируем в виде следующей теоремы [10].
Теорема:
Если
, ,
, ,
, , , ,
то для и метод прогонки можно применять.
Глава 2. Метод вращений решения линейных систем
2.1 Описание метода
Как и в методе Гаусса, цель прямого хода преобразований в этом методе-приведение системы к треугольному виду последовательным обнулением поддиагональных элементов сначала первого столбца, затем второго и т.д [6]
Умножим первое уравнение исходной системы (2.1) на с1 ,второе на s1 и сложим их; полученным уравнением заменим первое уравнение системы. Затем первое уравнение исходной системы умножаем на -s1 , второе на c1 и результатом их сложения заменим второе уравнение. Таким образом, первые два уравнения (2.1) заменяются уравнениями
На параметры с1 и s2наложим два условия:
1) - условие исключения х1 из второго уравнения;
2) - условие нормировки.
Отсюда . Эти числа можно интерпретировать как косинус и синус некоторого угла (отсюда название метод вращения, каждый шаг такого преобразования можно рассматривать как вращение расширенной матрицы системы в плоскости обнуляемого индекса).
В результате преобразований получим систему
где
Далее первое уравнение системы заменяется новым, полученным сложением результатов умножения первого и третьего уравнений соответственно на
а третье - уравнением, полученное при сложении результатов умножения тех же уравнений соответственно на -s2 и с2. Получим систему
где
Выполнив преобразование m-1 раз, придем к системе
Вид полученной системы такой же, как после первого этапа преобразований методом Гаусса. Эта система обладает следующим свойством: длина любого вектора-столбца (эвклидова норма) расширенной матрицы остается такой же, как у исходной матрицы. Следовательно, при выполнении преобразований не наблюдается рост элементов.
Далее по этому же алгоритму преобразуется матрица
и т.д.
В результате m-1 этапов прямого хода система будет приведена к треугольному виду.
Нахождение неизвестных не отличается от обратного хода метода Гаусса.
Всего метод вращения требует примерно операций умножения и деления [11].
Пример:
Дана СЛУ:
х1+2х2+3х3=8,
3х1+х2+х3=3, (2.2)
2х1+3х2+х3=5.
Умножим первое уравнение на с1, второе на s1, сложим их, а потом умножим первое на (-s1), а второе на с1и сложим. Результат: система (2.2) из 2 измененных уравнений и 1 оставшегося:
x1(c1+3s1)+x2(2c1+s1)+x3(3c1+s1)=8c1+3s1 ,
x1(3c1-s1)+x2(c1-2s1)+x3(c1-3s1)=3c1-8s1,
2x1+3x2+x3=5.
Найти c1 и s1
-s1+3c1=0,
Подставим эти значения в первые два уравнения системы (2.2), получим новую систему (2.3):
10x1+5x2+6x3=17,
-5x2-8x3=-21,
2x1+3x2=5.
Умножим уравнение 1 из системы (2.3) на с2, третье на s2, сложим их, а потом умножим первое на (-s2), а второе на с2 и сложим. Результат: система (2.4):
2x1(5c2+s2)+x2(5c2+3s2)+x3(6c2+s2)=17c2+5s2,
-5x2-8x3=-21,
2x1(c2-5s2)+x2(3c2-5s2)+x3(c2-5s2)=5c2-17s2.
Найти c2 и s2:
-10s2+2c2=0,
Подставим эти значения в уравнения 1 и 3 системы (2.4), получим систему (2.5):
52x1+28x2+31x3=90,
-5x2-8x3=-21,
-10x2-x3=-8,
Теперь, оставляя 1 уравнение без изменений, умножим второе на с3, третье на s3, сложим их, умножим второе на (-s3), третье на с3, сложим и их. Результат: система (2.6):
52x1+28x2+31x3=90,
5x2(-c3-2s3)+x3(-8c3-s3)=-21c3-8s3,
5x2(-2c3+s3)+x3(-c3+8s3)=-8c3+21s3.
Найдем c3 и s3:
10s3-5c3=0,
Подставим найденные значения во 2 и 3 уравнения системы (2.6) и найдем результирующую систему (2.7):
52x1+28x2+31x3=90,
35x2-10x3=15,
-15x3=-30.
Ответ: x1=0, x2=1, x3=2.
2.2 Описание программы, реализующей метод вращений
Назначение
Вычисление решения системы линейных алгебраических уравнений методом вращений. Решается система вида:
Матрица , столбец и m вводятся пользователем с клавиатуры. Определяется столбец . Если определитель матрицы равен нулю, то выводится сообщение о том, что матрица вырожденная и решение системы не производится. Найденное решение выводится на экран.
Инструкция по работе с программой
Сразу после запуска файла программы (vraschenie.exe) перед вами появиться рабочее окно программы.
Заполните пункты: «размерность» (поскольку система размера n на n нужно ввести только одно число), «Исходная система» (в текстовое поле «А» вводится матрица коэффициентов системы, в текстовое поле «В» вводится вектор свободных членов).
Нажмите кнопку «Решить систему». Решение будет выведено в текстовое поле «Х».
Нажав кнопку «Очистка» можно удалить исходную систему и приступить к решению следующей системы.
Алгоритм работы программы
Программа vraschenie предназначена для решения линейной системы Ax = b методом вращений. После заполнения пользователем поля «Размерность» программа обращается к процедуре Edit1Change, которая задает размерность полей предназначенных для ввода матрицы коэффициентов системы и вектора свободных членов. Матрица коэффициентов системы и вектор свободных членов вводятся пользователем с клавиатуры. При нажатии на кнопку «Решить систему» вызывается процедура BitBtn1Click, которая находит решение линейной системы и выводит его на экран. Кнопка «Очистка» вызывает процедуру Button1Click, которая выполняет очистку экрана.
Исходные данные:
Edit1Change:TStringGrid - размерность системы;
StringGrid1:TStringGrid - матрица коэффициентов системы;
StringGrid3: TStringGrid - вектор свободных членов.
Результат:
StringGrid2:TStringGrid - элементы столбца решения системы (они вычисляются и выводятся на экран).
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Buttons, ExtCtrls; //присоединение модулей
type
TForm1 = class(TForm) //основная форма программы
GroupBox1: TGroupBox;
TMatr = array [0..50,0..50] of real; //тип массива
lbl1: TLabel;
Label1: TLabel;
Label2: TLabel; // обозначение кнопок и полей на форме
lbl4: TLabel;
lbl5: TLabel;
StringGrid1: TStringGrid; // поле ввода матрицы коэффициентов системы
StringGrid2: TStringGrid; //поле вывода решения системы
StringGrid3: TStringGrid; //поле ввода вектора свободных членов
GroupBox2: TGroupBox;
Edit1: TLabeledEdit; //поле ввода размерности системы
BitBtn1: TBitBtn; //кнопка «решить систему»
Button1: TButton; //кнопка «Очистка»
procedure Edit1Change(Sender: TObject); //процедура задаёт размер поля ввода матрицы коэффициентов системы и вектора свободных членов,
procedure BitBtn1Click(Sender: TObject); //процедура решения системы
procedure Button1Click(Sender: TObject); //процедура очистки экрана
private
public
end;
var
Form1: TForm1;
Size,SizeClear:integer; //размерность системы
implementation
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject); // задание размерности системы
begin
if Edit1.text=' ' then Exit; //выход из процедуры, если поле не заполнено
Size:=strtoint(Edit1.text); //переменной Size присваивается значение введенное в поле «Размерность»
StringGrid1.RowCount:=Size; //значению количества строк матрицы коэффициентов системы присваивается значение переменной Size
StringGrid1.ColCount:=Size; // значению количества столбцов матрицы коэффициентов системы присваивается значение переменной Size
StringGrid2.RowCount:=Size;
StringGrid2.ColCount:=1;
StringGrid3.RowCount:=Size;
StringGrid3.ColCount:=1;
end;
procedure TForm1.BitBtn1Click(Sender:TObject);//процедура решения системы
var i,j,k: integer;
a,b,c,s,t,summ,x: real;
mass,MatrB,MatrA,MatrX: TMatr;
begin
Size:= StrToInt(Edit1.text); // переменной Size присваивается значение введенное в поле «Размерность»
for i:= 0 to size-1 do //начальная инициализация флага
for j:= 0 to size-1 do
MatrA[i,j]:=StrToFloat(Form1.StringGrid4.Cells[j,i]); //заполнение массива А матрицей системы
for i:= 0 to size-1 do // начальная инициализация флага
MatrB[i,0]:=StrToFloat(Form1.StringGrid6.Cells[0,i]);//замолнение массива В
for i:=0 to Size-1 do // начальная инициализация флага
for j:=0 to Size do
begin
mass[i,j]:=0;
if j=Size then
mass[i,j]:=MatrB[i,0]
else
mass[i,j]:=MatrA[i,j];
end;
//Прямой ход методом вращений
for i:=0 to Size-1 do //начальная инициализация флага
for j:=i+1 to Size-1 do
begin
b:=mass[j,i];
a:=mass[i,i];
c:=a/sqrt(a*a+b*b); //определение коэффициента с
s:=b/sqrt(a*a+b*b); ////определение коэффициента s
for k:=i to Size do // цикл шагов прямого хода
begin
t:=mass[i,k];
mass[i,k]:=c*mass[i,k]+s*mass[j,k];
mass[j,k]:=-s*t+c*mass[j,k];
end;
end; //конец прямого хода
//Обратный ход методом Гаусса
for i:=Size-1 down to 0 do начальная инициализация флага
begin
summ:=0;
for j:=i+1 to Size-1 do
summ:=summ+mass[i,j]*MatrX[j,0];
summ:=mass[i,size]-summ;
if mass[i,i]=0 then begin MessageDlg('Определитель равен 0',mtError,[mbOK],1); exit; // проверка невырожденности матрицы
end else
MatrX[i,0]:=summ/mass[i,i]; // вычисление решения системы
end;
for i:= 0 to size-1 do
begin
x:=MatrX[i,0];
Form1.StringGrid2.Cells[0,i]:=FloatToStr(x); //вывод решения на экран
end;
end; //конец обратного хода
procedure TForm1.Button1Click(Sender: TObject); //процедура очистки экрана
var ii,jj:integer;
begin
Edit1.Text:='';
for ii:= 0 to size-1 do
for jj:= 0 to size-1 do
Form1.StringGrid1.Cells[ii,jj]:='';
for ii:= 0 to size-1 do
Form1.StringGrid2.Cells[0,ii]:='';
for ii:= 0 to size-1 do
Form1.StringGrid3.Cells[0,ii]:='';
end;
end.
Тестирование программы
Для тестирования программы была взята СЛАУ решённая вручную в параграфе 2.1. Система
х1+2х2+3х3=8,
3х1+х2+х3=3,
2х1+3х2+х3=5.
Имеет решение: 0,1,2. Ответ программы совпадает с ручным просчетом.
Заключение
Основными результатами данной работы являются:
1. Обзор прямых численных методов решения линейных систем, приведенный в главе 1.
2. Реализация метода вращений средствами системы программирования Delphi, описанном в главе 2.
Приложение
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
TMatr = array [0..10,0..10] of real;
lbl1: TLabel;
Label1: TLabel;
Label2: TLabel;
lbl4: TLabel;
lbl5: TLabel;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
GroupBox2: TGroupBox;
Edit1: TLabeledEdit;
BitBtn1: TBitBtn;
Button1: TButton;
procedure Edit1Change(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
Size,SizeClear:integer;
Toch:real;
Rotat:Boolean;
implementation
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject); // задание размерности
begin
if Edit1.text='' then Exit;
Size:= strtoint(Edit1.text);
StringGrid4.RowCount:=Size;
StringGrid4.ColCount:=Size;
StringGrid5.RowCount:=Size;
StringGrid5.ColCount:=1;
StringGrid6.RowCount:=Size;
StringGrid6.ColCount:=1;
end;
procedure TForm1.BitBtn1Click(Sender: TObject); //процедура решения
var i,j,k: integer;
a,b,c,s,t,summ,x: real;
mass,MatrB,MatrA,MatrX: TMatr;
Result:boolean;
begin
Size:= StrToInt(Edit1.text);
for i:= 0 to size-1 do
for j:= 0 to size-1 do
MatrA[i,j]:= StrToFloat(Form1.StringGrid4.Cells[j,i]);
for i:= 0 to size-1 do
MatrB[i,0]:= StrToFloat(Form1.StringGrid6.Cells[0,i]);
for i:=0 to Size-1 do
for j:=0 to Size do
begin
mass[i,j]:=0;
if j=Size then
mass[i,j]:=MatrB[i,0]
else
mass[i,j]:=MatrA[i,j];
end;
// Прямой ход методом вращений
for i:=0 to Size-1 do
for j:=i+1 to Size-1 do
begin
b:=mass[j,i];
a:=mass[i,i];
c:=a/sqrt(a*a+b*b);
s:=b/sqrt(a*a+b*b);
for k:=i to Size do
begin
t:=mass[i,k];
mass[i,k]:=c*mass[i,k]+s*mass[j,k];
mass[j,k]:=-s*t+c*mass[j,k];
end;
end;
//Обратный ход методом Гаусса
for i:=Size-1 downto 0 do
begin
summ:=0;
for j:=i+1 to Size-1 do
summ:=summ+mass[i,j]*MatrX[j,0];
summ:=mass[i,size]-summ;
if mass[i,i]=0 then begin MessageDlg('Определитель равен 0',mtError,[mbOK],1); exit;
end else
MatrX[i,0]:=summ/mass[i,i];
end;
for i:= 0 to size-1 do
begin
x:=MatrX[i,0];
Form1.StringGrid2.Cells[0,i]:=FloatToStr(x);
end;
end;
procedure TForm1.Button1Click(Sender: TObject); //очистка
var ii,jj:integer;
begin
Edit1.Text:='';
for ii:= 0 to size-1 do
for jj:= 0 to size-1 do
Form1.StringGrid4.Cells[ii,jj]:='';
for ii:= 0 to size-1 do
Form1.StringGrid5.Cells[0,ii]:='';
for ii:= 0 to size-1 do
Form1.StringGrid6.Cells[0,ii]:='';
end;
end.
Размещено на Allbest.ru
Подобные документы
Понятие и специфические черты системы линейных алгебраических уравнений. Механизм и этапы решения системы линейных алгебраических уравнений. Сущность метода исключения Гаусса, примеры решения СЛАУ данным методом. Преимущества и недостатки метода Гаусса.
контрольная работа [397,2 K], добавлен 13.12.2010Методы решения систем линейных алгебраических уравнений (СЛАУ): Гаусса и Холецкого, их применение к конкретной задаче. Код программы решения перечисленных методов на языке программирования Borland C++ Builder 6. Понятие точного метода решения СЛАУ.
реферат [58,5 K], добавлен 24.11.2009Изучение основ линейных алгебраических уравнений. Нахождение решения систем данных уравнений методом Гаусса с выбором ведущего элемента в строке, в столбце и в матрице. Выведение исходной матрицы. Основные правила применения метода факторизации.
лабораторная работа [489,3 K], добавлен 28.10.2014Характеристика и использование итерационных методов для решения систем алгебраических уравнений, способы формирования уравнений. Методы последовательных приближений, Гаусса-Зейделя, обращения и триангуляции матрицы, Халецкого, квадратного корня.
реферат [60,6 K], добавлен 15.08.2009Способы решения системы уравнений с двумя переменными. Прямая как график линейного уравнения. Использование способов подстановки и сложения при решении систем линейных уравнений с двумя переменными. Решение системы линейных уравнений методом Гаусса.
реферат [532,7 K], добавлен 10.11.2009Метод Гаусса, LU-разложение. Прогонка для решения линейных систем с трехдиагональными матрицами коэффициентов. Метод квадратного корня для решения систем: краткая характеристика, теоретическая основа, реализация, тестирование и листинг программы.
курсовая работа [340,9 K], добавлен 15.01.2013Основные правила решения системы заданных уравнений методом Гаусса с минимизацией невязки и методом простых итераций. Понятие исходной матрицы; нахождение определителя для матрицы коэффициентов. Пример составления блок-схемы метода минимизации невязок.
лабораторная работа [264,1 K], добавлен 24.09.2014Матричный метод решения систем линейных алгебраических уравнений с ненулевым определителем. Примеры вычисления определителя матрицы. Блок-схема программы, описание объектов. Графический интерфейс, представляющий собой стандартный набор компонентов Delphi.
курсовая работа [1,4 M], добавлен 29.06.2014Решение систем линейных алгебраических уравнений методом простой итерации. Полиномиальная интерполяция функции методом Ньютона с разделенными разностями. Среднеквадратическое приближение функции. Численное интегрирование функций методом Гаусса.
курсовая работа [2,4 M], добавлен 14.04.2009Сущность и содержание метода Крамера как способа решения квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы. Содержание основных правил Крамера, сферы и особенности их практического применения в математике.
презентация [987,7 K], добавлен 22.11.2014