Решение системы линейных алгебраических уравнений методом вращений

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    114,84 Кб
  • Опубликовано:
    2013-10-02
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Решение системы линейных алгебраических уравнений методом вращений

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение

Высшего профессионального образования

"ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ"

Факультет экономики и управления

Кафедра математических методов и моделей в экономике





Лабораторная работа

по теме "Решение системы линейных алгебраических уравнений методом вращений"












Оренбург 2011

Содержание

1. Постановка задачи

. Краткие теоретические сведения

. Алгоритм

. Блок-схема

. Код программы

. Тестовый пример и проверка в MathCad

1. Постановка задачи


Найти корни системы линейных алгебраических уравнений, используя метод вращений.

2. Краткие теоретические сведения


Система линейных алгебраических уравнений (СЛАУ) имеет вид Ax=b, где

, ,

Приведение такой системы к треугольному виду прямым ходом метода Гаусса допускает рост элементов матрицы коэффициентов до 2n+1, где n - размерность матрицы. В связи с этим возникают большие погрешности.

Умножим первое уравнение исходной системы на с1, второе на s1 и сложим их. Полученным уравнением заменим первое уравнение системы. Затем первое уравнение исходной системы умножаем на -s1 , второе на c1 и результатом их сложения заменим второе уравнение. Таким образом, первые два уравнения системы заменяются уравнениями


На параметры с1 и s1 наложим два условия:

1)

)

Отсюда

.

В результате преобразований получим систему

где

Далее первое уравнение системы заменяется новым, полученным сложением результатов умножения первого и третьего уравнений соответственно на  а третье-уравнением, полученное при сложении результатов умножения тех же уравнений соответственно на -s2 и c2. Получим систему


Выполнив преобразование n-1 раз, придем к системе


Вид полученной системы такой же, как после первого этапа преобразований методом Гаусса. Эта система обладает следующим свойством: длина любого вектора-столбца (эвклидова норма) расширенной матрицы остается такой же, как у исходной матрицы. Следовательно, при выполнении преобразований не наблюдается рост элементов.

Далее аналогично преобразуется подматрица

линейный алгебраический уравнение вращение

.

В результате n-1 этапов прямого хода система будет приведена к треугольному виду.


Обратный ход метода вращений не отличается от обратного хода метода Гаусса.

3. Алгоритм

 

0) А, b, i:=1, j=2.

1) Считаем К шагу 2.

) Преобразуем i-тое и j-тое уравнения системы соответственно в

 ,


3) Если j<n, то j:=j+1, к шагу 1. Иначе - к шагу 4.

) Если i<(n-1), то i:=i+1; j:=i, к шагу 1. Иначе - к шагу 5.

) . i:=n-1. К шагу 6.

). Если i>1, то i:=i-1, в начало шага 6. Иначе - на конец алгоритма.

4. Блок-схема




5. Код программы

Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, XPMan, Grids, ComCtrls;= class(TForm): TEdit;: TLabel;: TUpDown;: TStringGrid;: TLabel;: TStringGrid;: TEdit;: TLabel;: TXPManifest;: TButton;Edit1Change(Sender: TObject);Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };a: array [0..4, 0..4] of real; //a1-промежуточный массив,xsolved: array [0..4] of real; //xsolved - вектор-решение СЛАУ

c,s:Real; //Промежуточная переменная,j,n,k: integer; //changed - номер столбца, который мы поменяли местами с первым.

{$R *.dfm}

//Сделать проверку на ненулевые главные миноры!1111

Procedure cscount(numn, num:integer);:=a[numn,numn]/sqrt(a[numn,numn]*a[numn,numn]+a[num,numn]*a[num,numn]);:=a[num,numn]/sqrt(a[numn,numn]*a[numn,numn]+a[num,numn]*a[num,numn]);;vrash(numn, num:integer); //numn - все уравнения до уравнения номер (numn+1) уже не трогаемj:integer;: array [0..4, 0..4] of Real;: array [0..4] of real;j:=numn to (n-1) do begin[numn,j]:=(c*a[numn,j]+s*a[num,j]);[num,j]:=(c*a[num,j]-s*a[numn,j]);;[numn]:=c*b[numn]+s*b[num];[num]:=c*b[num]-s*b[numn];j:=numn to (n-1) do begin[numn,j]:=a1[numn,j];[num,j]:=a1[num,j];[numn]:=b1[numn];[num]:=b1[num];;;solving;zz:Real;[n-1]:=b[n-1]/a[n-1, n-1];i:=(n-2) downto 0 do begin:=0;j:=i to (n-1) do:=zz+a[i,j]*xsolved[j];[i]:=(b[i]-zz)/a[i,i];;;TForm1.Edit1Change(Sender: TObject);:=StrToInt(Edit1.Text);.ColCount:=n;.RowCount:=n;

StringGrid2.RowCount:=n;;

procedure TForm1.Button1Click(Sender: TObject);i,j:integer;.Text:='';i:=0 to (n-1) do beginj:=0 to (n-1) do[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);[i]:=StrToFloat(StringGrid2.Cells[0,i]);;i:=0 to (n-2) doj:=(i+1) to (n-1) do begin(i,j);(i,j);;;i:=0 to (n-1) do Edit2.Text:=Edit2.Text+'x'+IntTostr(i+1)+'='+FloatTostr(xsolved[i])+'; ';

end;.

6. Тестовый пример и проверка в MathCad

Похожие работы на - Решение системы линейных алгебраических уравнений методом вращений

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!