Решение систем линейных алгебраических уравнений
Знакомство с особенностями реализации программного обеспечения для решения системы линейных алгебраических уравнений методом квадратных корней. Рассмотрение способов применения методов спуска для решения систем нелинейных алгебраических уравнений.
Рубрика | Математика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 02.10.2013 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Решение систем линейных алгебраических уравнений
линейный алгебраический уравнение программный
1. Метод квадратных корней решения СЛАУ с симметричной положительно определённой матрицей А
1.1 Постановка задачи
Реализовать программное обеспечение для решения системы линейных алгебраических уравнений методом квадратных корней.
1.2 Краткие теоретические сведения
Если матрица коэффициентов СЛАУ симметрична, то объём вычислений при сведении матрицы к треугольному виду можно сократить почти в два раза. Один из методов, использующих эту возможность, является методом квадратных корней.
Для применения метода квадратных корней необходимо выполнение следующих условий:
1) Матрица А - симметричная;
2) Матрица А положительно определена;
3) Матрица А является матрицей с диагональным преобладанием.
Исходную матрицу А представим в виде А=UT*U, где .
Если возможно получить матрицы U и UT, то решение системы Ax=b сводится к решению двух треугольных систем:
1) UTy=b;
2) Ux=y.
1.3 Алгоритм
} 1) i=1. Переход к шагу 2.
} 2) Если i>n, то идём к шагу 4. Иначе . j:=1. Пока j<i, u[i,i]:=u[i,i]-u[j,i]*u[j,i], j:=j+1. Если j=i, то переходим к шагу 3.
} 3) . j:=i+1. Пока j<=n, u[i,j]:=a[i,j]/u[i,i], k:=1, пока k<=n u[i,j]:=u[i,j]-(u[k,i]*u[k,j])/u[i,i], k:=k+1. j:=j+1. Если j=n+1, то i:=i+1, переход к шагу 2.
} 4) i=1. Переход к шагу 2.
} 5) Если i>n, то идём к шагу 6. Иначе y[i]:=b[i]/u[i,i];. k:=1. Пока k<i, y[i]:=y[i]-(u[k,i]*y[k])/u[i,i], k:=k+1. Если k=i, то i:=i+1, возвращаемся в начало шага 5.
} 6) i=n. x[n]:=y[n]/u[n,n]. Переход к шагу 7)
} 7) i:=i-1. x[i]:=y[i]/u[i,i]. Пока i>1, x[i]:=x[i]-(u[i,k]*x[k])/u[i,i]. Возвращаемся в начало шага 7. Если i=0, то конец алгоритма.
Схема
Схема
1.4 Код программы
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 u, a: array [1..100, 1..100] of Real;
y,b,x: array [1..100] of real;
zz:Real; //Промежуточная переменная
n: integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure ufind;
var i,j,k:Integer;
begin
//Ищем компоненты матрицы u
for i:=1 to n do begin
u[i,i]:=a[i,i];
for j:=1 to (i-1) do u[i,i]:=u[i,i]-u[j,i]*u[j,i];
u[i,i]:=sqrt(u[i,i]);
for j:=(i+1) to n do begin
u[i,j]:=a[i,j]/u[i,i];
for k:=1 to (i-1) do u[i,j]:=u[i,j]-(u[k,i]*u[k,j])/u[i,i];
end;
end;
end;
procedure yfind;
var i,k:Integer;
begin
//Ищем компоненты вектора у
for i:=1 to n do begin
y[i]:=b[i]/u[i,i];
for k:=1 to (i-1) do y[i]:=y[i]-(u[k,i]*y[k])/u[i,i];
end;
end;
procedure xfind;
var i,k:Integer;
begin
//Ищем компоненты вектора х
for i:=n downto 1 do begin
x[i]:=y[i]/u[i,i];
for k:=n downto (i+1) do x[i]:=x[i]-(u[i,k]*x[k])/u[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:='';
//Считывание элементов матрицы А и вектора b
for i:=1 to n do begin
for j:=1 to n do a[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);
b[i]:=StrToFloat(StringGrid2.Cells[0,i-1]);
end;
ufind;
yfind;
xfind;
for i:=1 to n do Edit2.Text:=Edit2.Text+'x'+IntTostr(i)+'='+FloatTostr(x[i])+'; ';
end;
end.
1.5 Тестовый пример и проверка результатов в Mathcad
Рис.
Рис.
2. Применение методов спуска (метод расходящегося ряда) для решения систем нелинейных алгебраических уравнений
2.1 Постановка задачи
Реализовать программное обеспечение для решения систем нелинейных алгебраических уравнений методом расходящегося ряда.
2.2 Краткие теоретические сведения
Пусть мы имеем систему нелинейных алгебраических уравнений . Нам нужно найти такой вектор , чтобы все уравнения при подстановке соответствующих значений вектора x* обращались в тождества.
Для решения задачи сведём её к следующему виду: . Полученную таким образом задачу решим с помощью градиентного метода (в данном случае - с помощью метода расходящегося ряда).
- критерий останова.
2.3 Алгоритм
0) Задаём х0 - вектор начального приближения, е - точность приближённых вычислений. Считаем grad(x0). Находим антиградиент ag0:=-grad(x0). б:=1, k:=1.
1) Если |grad(xi)|<е, то идём на конец алгоритма, x*=xi . Иначе - к шагу 2)
2) . agi:=-grad(xi). Идём к шагу 3)
3) Если z(xi)<z(xi-1) и б<е, то х*:=xi, идём на конец алгоритма. Иначе - к шагу 4)
4) Если z(xi)>z(xi-1), k:=k+1, то бi-1:= 1/(k). Переход к шагу 2.
Схема
Схема
Схема
2.4 Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;
type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
edt1: TEdit;
edt2: TEdit;
edt3: TEdit;
xpmnfst1: TXPManifest;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const eps=0.01;
alpha0=0.5; //Стартовое значение величины alpha
var x0,y0,x1,y1,alpha:Real; //alpha - текущее значение величины шага
grad: array [1..2] of Real; //Градиент функции
gradnorm: real; //Норма градиента
gradnorm0: Real; //Норма градиента для х0, у0
Form1: TForm1;
implementation
{$R *.dfm}
procedure gradv (x,y:real); //Вычисление градиента
begin
grad[1]:=4*x*y*(x*x*y-3*y*y+10)+2*y*(x*y-2);
grad[2]:=2*(x*x-6*y)*(x*x*y-3*y*y+10)+2*x*(x*y-2);
gradnorm:=Sqrt(Sqr(grad[1])+Sqr(grad[2]));
end;
function z(x,y:real):real;
begin
z:=(x*x*y-3*y*y+10)*(x*x*y-3*y*y+10)+(x*y-2)*(x*y-2);
end;
procedure TForm1.btn1Click(Sender: TObject);
var k:integer;
begin
x0:=StrToFloat(edt1.Text);
y0:=StrToFloat(edt2.Text);
gradv(x0, y0);
gradnorm0:=gradnorm;
alpha:=1;
x1:=x0-alpha*grad[1]/gradnorm;
y1:=y0-alpha*grad[2]/gradnorm;
k:=1;
while (gradnorm>eps) or (z(x1,y1)>z(x0,y0)) do begin
if z(x1,y1)<z(x0,y0) then begin
x0:=x1;
y0:=y1;
gradv(x1, y1);
gradnorm0:=gradnorm;
end;
k:=k+1;
alpha:=1/k;
x1:=x0-alpha*grad[1]/gradnorm;
y1:=y0-alpha*grad[2]/gradnorm;
end;
edt3.Text:='x='+floattostr(x1)+' y='+floattostr(y1);
end;
end.
2.5 Тестовый пример и проверка результатов в Mathcad
Рис.
Рис.
3. Применение квазиньютоновских методов (метод Пауэлла) для решения систем нелинейных алгебраических уравнений
3.1 Постановка задачи
Реализовать программное обеспечение для решения систем нелинейных алгебраических уравнений методом Пауэлла.
3.2 Краткие теоретические сведения
Пусть мы имеем систему нелинейных алгебраических уравнений . Нам нужно найти такой вектор , чтобы все уравнения при подстановке соответствующих значений вектора x* обращались в тождества.
Для решения задачи сведём её к следующему виду: . Полученную таким образом задачу решим с помощью квазиньютоновских методов (в данном случае - с помощью метода Пауэлла).
- критерий останова.
3.3 Алгоритм
0) Задаём начальное приближение , , n - частота обновления алгоритма (в шагах). k:=1. Переход к шагу 1;
1) бk=1/k, щk=-grad(f(хk-1)), pk=щkAk, xk=xk-1+бkpk, , . Если k=n,2n,3n,…, то . Иначе , . Переход к шагу 2;
2) Если , то конец алгоритма. Иначе k=k+1, переход к шагу 1.
Схема
Схема
Схема
Схема
3.4 Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;
type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
xpmnfst1: TXPManifest;
edt1: TEdit;
edt2: TEdit;
lbl1: TLabel;
edt3: TEdit;
lbl2: TLabel;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const eps=0.01;
var x0,y0,x1,y1,alpha,gradnorm1,gradnorm0,sp:Real; //alpha - текущее значение величины шага
grad0,grad1,delomega,delx,delxvoln,p: array [1..2] of Real;
a:array [1..2,1..2] of Real;
Form1: TForm1;
implementation
{$R *.dfm}
procedure gradv (x,y:real); //Вычисление градиента
begin
grad0[1]:=grad1[1];
grad0[2]:=grad1[2];
gradnorm0:=gradnorm1;
grad1[1]:=4*x*y*(x*x*y-3*y*y+10)+2*y*(x*y-2);
grad1[2]:=2*(x*x-6*y)*(x*x*y-3*y*y+10)+2*x*(x*y-2);
gradnorm1:=Sqrt(Sqr(grad1[1])+Sqr(grad1[2]));
end;
procedure scalar; //Скалярное произведение
var t:real;
i:integer;
begin
t:=0;
for i:=1 to 2 do t:=t+delxvoln[i]*delomega[i];
sp:=t;
end;
procedure newa;
var i,j:integer;
begin
scalar;
for i:=1 to 2 do
for j:=1 to 2 do begin
a[i,j]:=a[i,j]-delxvoln[i]*delxvoln[j]/sp;
end;
end;
procedure newp;
begin
p[1]:=-alpha*(a[1,1]*grad1[1]+a[1,2]*grad1[2])/gradnorm1;
p[2]:=-alpha*(a[2,1]*grad1[1]+a[2,2]*grad1[2])/gradnorm1;
end;
procedure deltax;
begin
delx[1]:=x1-x0;
delx[2]:=y1-y0;
end;
procedure newdelomega;
begin
delomega[1]:=grad0[1]-grad1[1];
delomega[2]:=grad0[2]-grad1[2];
end;
procedure delxvolnfind;
var temp:array [1..2] of real;
i,j:Integer;
begin
temp[1]:=0;
temp[2]:=0;
for i:=1 to 2 do
for j:=1 to 2 do
temp[i]:=temp[i]+a[i,j]*delx[i];
delxvoln[1]:=delx[1]+temp[1];
delxvoln[2]:=delx[2]+temp[2];
end;
procedure TForm1.btn1Click(Sender: TObject);
var k:Integer;
begin
x0:=StrToFloat(Edt1.Text);
y0:=StrToFloat(Edt2.Text);
k:=1;
alpha:=1;
grad1[1]:=4*x0*y0*(x0*x0*y0-3*y0*y0+10)+2*y0*(x0*y0-2);
grad1[2]:=2*(x0*x0-6*y0)*(x0*x0*y0-3*y0*y0+10)+2*x0*(x0*y0-2);
gradnorm1:=Sqrt(Sqr(grad1[1])+sqr(grad1[2]));
a[1,1]:=1; a[1,2]:=0; a[2,1]:=0; a[2,2]:=1;
newp;
x1:=x0+p[1];
y1:=y0+p[2];
while (gradnorm1>eps) do begin
x0:=x1;
y0:=y1;
gradv(x1, y1);
k:=k+1;
alpha:=1/k;
newp;
x1:=x0+p[1];
y1:=y0+p[2];
deltax;
newdelomega;
delxvolnfind;
if ((k-1) mod 4)=0 then begin
a[1,1]:=1;
a[1,2]:=0;
a[2,1]:=0;
a[2,2]:=1;
end
else newa;
end;
3.5 Тестовый пример и проверка результатов в Mathcad
Рис.
Рис.
Рис.
1. Размещено на Allbest.ru
...Подобные документы
Исследование метода квадратных корней для симметричной матрицы как одного из методов решения систем линейных алгебраических уравнений. Анализ различных параметров матрицы и их влияния на точность решения: мерность, обусловленность и разряженность.
курсовая работа [59,8 K], добавлен 27.03.2011Изучение основ линейных алгебраических уравнений. Нахождение решения систем данных уравнений методом Гаусса с выбором ведущего элемента в строке, в столбце и в матрице. Выведение исходной матрицы. Основные правила применения метода факторизации.
лабораторная работа [489,3 K], добавлен 28.10.2014Сущность и содержание метода Крамера как способа решения квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы. Содержание основных правил Крамера, сферы и особенности их практического применения в математике.
презентация [987,7 K], добавлен 22.11.2014Сущность итерационного метода решения задачи, оценка его главных преимуществ и недостатков. Разновидности итерационных методов решения систем линейных алгебраических уравнений: Якоби, Хорецкого и верхней релаксации, их отличия и возможности применения.
курсовая работа [39,2 K], добавлен 01.12.2009Изучение способов решения нелинейных уравнений: метод деления отрезка пополам, комбинированный метод хорд и касательных. Примеры решения систем линейных алгебраических уравнений. Особенности математической обработки результатов опыта, полином Лагранжа.
курсовая работа [181,1 K], добавлен 13.04.2010Рассмотрение систем линейных алгебраических уравнений общего вида. Сущность теорем и их доказательство. Особенность трапецеидальной матрицы. Решение однородных и неоднородных линейных алгебраических уравнений, их отличия и применение метода Гаусса.
реферат [66,4 K], добавлен 14.08.2009Понятие и специфические черты системы линейных алгебраических уравнений. Механизм и этапы решения системы линейных алгебраических уравнений. Сущность метода исключения Гаусса, примеры решения СЛАУ данным методом. Преимущества и недостатки метода Гаусса.
контрольная работа [397,2 K], добавлен 13.12.2010Структура и элементы, принципы формирования и правила разрешения систем линейных алгебраических уравнений. История развития различных методов решения: матричного, Крамера, с помощью функции Find. Особенности применения возможностей программы Mathcad.
контрольная работа [96,0 K], добавлен 09.03.2016Метод Зейделя как модификация метода простой итерации. Особенности решения систем линейных алгебраических уравнений. Анализ способов построения графика функций. Основное назначение формул Симпсона. Характеристика модифицированного метода Эйлера.
контрольная работа [191,3 K], добавлен 30.01.2014Характеристика и использование итерационных методов для решения систем алгебраических уравнений, способы формирования уравнений. Методы последовательных приближений, Гаусса-Зейделя, обращения и триангуляции матрицы, Халецкого, квадратного корня.
реферат [60,6 K], добавлен 15.08.2009Методы решения систем линейных алгебраических уравнений (СЛАУ): Гаусса и Холецкого, их применение к конкретной задаче. Код программы решения перечисленных методов на языке программирования Borland C++ Builder 6. Понятие точного метода решения СЛАУ.
реферат [58,5 K], добавлен 24.11.2009Характеристика способов решения систем линейных алгебраических уравнений (СЛАУ). Описание проведения вычислений на компьютере методом Гаусса, методом квадратного корня, LU–методом. Реализация метода вращений средствами системы программирования Delphi.
курсовая работа [118,4 K], добавлен 04.05.2014Задачи вычислительной линейной алгебры. Математическое моделирование разнообразных процессов. Решение систем линейных алгебраических уравнений большой размерности. Метод обратной матрицы и метод Гаусса. Критерии совместности и определенности системы.
курсовая работа [220,0 K], добавлен 21.10.2011Система линейных алгебраических уравнений. Основные формулы Крамера. Точные, приближенные методы решения линейных систем. Алгоритм реализации метода квадратных корней на языке программирования в среде Matlab 6.5. Влияние мерности, обусловленности матрицы.
контрольная работа [76,6 K], добавлен 27.04.2011Анализ метода простой итерации для решения систем линейных алгебраических уравнений и реализация его в виде двух программ, каждая из которых использует свой собственный способ перехода от системы одного вида к другому. Программные и технические средства.
курсовая работа [497,8 K], добавлен 27.03.2011Решение задач систем линейных алгебраических уравнений, матричных уравнений, методы Гаусса и Кремера. Нахождение длины и координат вектора и исчисление его скалярного произведения. Уравнение прямой и определение координат точек неравенства; пределы.
контрольная работа [220,9 K], добавлен 06.01.2011Основные действия над матрицами, операция их умножения. Элементарные преобразования матрицы, матричный метод решения систем линейных уравнений. Элементарные преобразования систем, методы решения произвольных систем линейных уравнений, свойства матриц.
реферат [111,8 K], добавлен 09.06.2011Геометрическая интерпретация методов Ньютона, итерации и спуска. Определение корня уравнения с заданной степенью точности. Решение систем нелинейных алгебраических уравнений. Нахождение эквивалентного преобразования для выполнения условия сходимости.
курсовая работа [371,6 K], добавлен 14.01.2015Решение системы линейных алгебраических уравнений большой размерности с разреженными матрицами методом простого итерационного процесса. Понятие нормы матрицы и вектора. Критерии прекращения итерационного процесса. Выбор эффективного итерационного метода.
лабораторная работа [21,8 K], добавлен 06.07.2009Матричный метод решения систем линейных алгебраических уравнений с ненулевым определителем. Примеры вычисления определителя матрицы. Блок-схема программы, описание объектов. Графический интерфейс, представляющий собой стандартный набор компонентов Delphi.
курсовая работа [1,4 M], добавлен 29.06.2014