Решение системы линейных алгебраических уравнений методом вращений
Приведение системы линейных алгебраических уравнений к треугольному виду прямым ходом метода Гаусса. Применение обратного хода метода вращений. Создание алгоритма, блок-схемы и кода программы. Тестовый пример решения уравнения и его проверка в MathCad.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 02.10.2013 |
Размер файла | 164,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение
Высшего профессионального образования
"ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ"
Факультет экономики и управления
Кафедра математических методов и моделей в экономике
Лабораторная работа
по теме "Решение системы линейных алгебраических уравнений методом вращений"
Оренбург 2011
Содержание
- 1. Постановка задачи
- 2. Краткие теоретические сведения
- 3. Алгоритм
- 4. Блок-схема
- 5. Код программы
- 6. Тестовый пример и проверка в MathCad
1. Постановка задачи
Найти корни системы линейных алгебраических уравнений, используя метод вращений.
2. Краткие теоретические сведения
Система линейных алгебраических уравнений (СЛАУ) имеет вид Ax=b, где
, ,
Приведение такой системы к треугольному виду прямым ходом метода Гаусса допускает рост элементов матрицы коэффициентов до 2n+1, где n - размерность матрицы. В связи с этим возникают большие погрешности.
Более устойчивым является метод вращения. Он не допускает большого роста элементов в процессе преобразований.
Умножим первое уравнение исходной системы на с1, второе на s1 и сложим их. Полученным уравнением заменим первое уравнение системы. Затем первое уравнение исходной системы умножаем на -s1 , второе на c1 и результатом их сложения заменим второе уравнение. Таким образом, первые два уравнения системы заменяются уравнениями
На параметры с1 и s1 наложим два условия:
1)
2)
Отсюда
.
В результате преобразований получим систему
где
Далее первое уравнение системы заменяется новым, полученным сложением результатов умножения первого и третьего уравнений соответственно на а третье-уравнением, полученное при сложении результатов умножения тех же уравнений соответственно на -s2 и c2. Получим систему
Выполнив преобразование n-1 раз, придем к системе
Вид полученной системы такой же, как после первого этапа преобразований методом Гаусса. Эта система обладает следующим свойством: длина любого вектора-столбца (эвклидова норма) расширенной матрицы остается такой же, как у исходной матрицы. Следовательно, при выполнении преобразований не наблюдается рост элементов.
Далее аналогично преобразуется подматрица
линейный алгебраический уравнение вращение
.
В результате n-1 этапов прямого хода система будет приведена к треугольному виду.
Обратный ход метода вращений не отличается от обратного хода метода Гаусса.
3. Алгоритм
0) А, b, i:=1, j=2.
1) Считаем К шагу 2.
2) Преобразуем i-тое и j-тое уравнения системы соответственно в
,
3) Если j<n, то j:=j+1, к шагу 1. Иначе - к шагу 4.
4) Если i<(n-1), то i:=i+1; j:=i, к шагу 1. Иначе - к шагу 5.
5) . i:=n-1. К шагу 6.
6). Если i>1, то i:=i-1, в начало шага 6. Иначе - на конец алгоритма.
4. Блок-схема
5. Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, Grids, ComCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
UpDown1: TUpDown;
StringGrid1: TStringGrid;
Label2: TLabel;
StringGrid2: TStringGrid;
Edit2: TEdit;
Label3: TLabel;
XPManifest1: TXPManifest;
Button1: TButton;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var a: array [0..4, 0..4] of real; //a1-промежуточный массив
b,xsolved: array [0..4] of real; //xsolved - вектор-решение СЛАУ
c,s:Real; //Промежуточная переменная
i,j,n,k: integer; //changed - номер столбца, который мы поменяли местами с первым.
Form1: TForm1;
implementation
{$R *.dfm}
//Сделать проверку на ненулевые главные миноры!1111
Procedure cscount(numn, num:integer);
begin
c:=a[numn,numn]/sqrt(a[numn,numn]*a[numn,numn]+a[num,numn]*a[num,numn]);
s:=a[num,numn]/sqrt(a[numn,numn]*a[numn,numn]+a[num,numn]*a[num,numn]);
end;
procedure vrash(numn, num:integer); //numn - все уравнения до уравнения номер (numn+1) уже не трогаем
var j:integer;
a1: array [0..4, 0..4] of Real;
b1: array [0..4] of real;
begin
for j:=numn to (n-1) do begin
a1[numn,j]:=(c*a[numn,j]+s*a[num,j]);
a1[num,j]:=(c*a[num,j]-s*a[numn,j]);
end;
b1[numn]:=c*b[numn]+s*b[num];
b1[num]:=c*b[num]-s*b[numn];
for j:=numn to (n-1) do begin
a[numn,j]:=a1[numn,j];
a[num,j]:=a1[num,j];
b[numn]:=b1[numn];
b[num]:=b1[num];
end;
end;
procedure solving;
var zz:Real;
begin
xsolved[n-1]:=b[n-1]/a[n-1, n-1];
for i:=(n-2) downto 0 do begin
zz:=0;
for j:=i to (n-1) do
zz:=zz+a[i,j]*xsolved[j];
xsolved[i]:=(b[i]-zz)/a[i,i];
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
StringGrid1.ColCount:=n;
StringGrid1.RowCount:=n;
StringGrid2.RowCount:=n;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
Edit2.Text:='';
for i:=0 to (n-1) do begin
for j:=0 to (n-1) do
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
b[i]:=StrToFloat(StringGrid2.Cells[0,i]);
end;
for i:=0 to (n-2) do
for j:=(i+1) to (n-1) do begin
cscount(i,j);
vrash(i,j);
end;
solving;
for i:=0 to (n-1) do Edit2.Text:=Edit2.Text+'x'+IntTostr(i+1)+'='+FloatTostr(xsolved[i])+'; ';
end;
end.
6. Тестовый пример и проверка в MathCad
Размещено на Allbest.ru
Подобные документы
Использование метода Зейделя для нахождения корней системы линейных алгебраических уравнений. Суть метода простых итераций. Оценка погрешности нормальной системы. Составление алгоритма, блок-схемы и кода программы. Тестовый пример и проверка в MathCad.
лабораторная работа [174,8 K], добавлен 02.10.2013Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.
курсовая работа [581,0 K], добавлен 15.06.2013Метод Гаусса-Зейделя как модификация метода Якоби, его сущность и применение. Разработка программы решения системы линейных алгебраических уравнений на языке VB, проверка правильности работы программы в MS Excel и математических пакетах MathCad и MatLab.
курсовая работа [325,5 K], добавлен 27.10.2013Решение системы линейных уравнений с матричными элементами и свободными членами с использованием метода Гаусса с выбором главного элемента, основанного на приведении матрицы системы к треугольному виду с помощью нахождения элементов главной диагонали.
лабораторная работа [71,1 K], добавлен 10.12.2014Применение итерационных методов численного решения системы линейных алгебраических уравнений при вычислении на ЭВМ. Математические и алгоритмические основы решения задачи, метод Гаусса. Функциональные модели и блок-схемы, программная реализация решения.
курсовая работа [527,5 K], добавлен 25.01.2010Преобразование матрицы системы линейных алгебраических уравнений (СЛАУ) с помощью алгоритма Гаусса. Решение задачи методом простой итерации. Создание блок-схемы и текста программы для решения СЛАУ, реализованной на языке программирования Turbo Pascal.
курсовая работа [1,2 M], добавлен 15.06.2013Алгоритм решения систем линейных уравнений методом Гаусса, его этапы. Система уравнений для определения коэффициентов сплайна, представляющая собой частный случай систем линейных алгебраических уравнений. Программная реализация, тестовый пример.
курсовая работа [431,8 K], добавлен 15.06.2013Возможности математического пакета MathCad в среде Windows 98 для использования матричной алгебры и решения системы линейных алгебраических уравнений. Методы решения систем линейных алгебраических уравнений. Сравнение метода Гаусса с методом MathCad.
практическая работа [62,6 K], добавлен 05.12.2009Системы линейных алгебраических уравнений. Код программы для решения систем линейных алгебраических уравнений. Математические и алгоритмические основы решения задачи методом Гаусса. Программная реализация решения. Алгоритмы запоминания коэффициентов.
лабораторная работа [23,5 K], добавлен 23.09.2014Сферы использования компьютеров, сущность и языки программирования. Применение модифицированного метода Гаусса и расширенной матрицы для решения системы линейных алгебраических уравнений (СЛАУ). Разработка программы, системные требования для ее работы.
курсовая работа [657,1 K], добавлен 09.01.2014