Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ТЕМА 2. МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
Система линейных алгебраических уравнений (СЛАУ) имеет вид: Ее можно представить в матричном виде: A×X = B где A - матрица коэффициентов, столбец ХT=(x1, x2, … , xn) – столбец неизвестных переменных, ВT=(b1, b2,…, bn) - столбец правых частей системы. Для того, чтобы система могла иметь решение, нужно, чтобы ее определитель не был равен нулю, тогда матрица А — будет невырожденной, а сама система называется совместной.
Способы решения СЛАУ.
Он может быть реализован в аналитическом или алгоритмическом виде. Суть аналитического решения по методу Гаусса (МГ): 1) преобразовать СЛАУ к ступенчатому виду – прямой ход МГ; 2) восстановить значения неизвестных переменных с хn до х1 –обратный ход МГ. Алгоритм прямого хода МГимеет три шага: 1. Проверка aii=0. Если условие выполняется, то заменить элементы i-ой и (i+1)-ой строк. 2. Преобразовать элементы i-ой строки так, чтобы aii =1, то есть поделить элементы этой строки на aii. 3. Все строки с номерами i+1, i+2, …, n преобразовать так, чтобы ai+1,i , ai+2,i , … , an,i были равны нулю, то есть вычесть последовательно из каждой i+1, i+2, …, n-ой строки i-ую строку, умноженную на ai+1,i.
Пример 2.1: 3x+2y+z=5 (1стр):3 x+2/3y+1/3z=5/3 (2с)-(1с) x+y-z=0 ó x+y-z=0 ó 4x-y+5z=3 4x-y+5z=3 (3с)-(1с)*4 x+2/3y+1/3z=5/3 (2с)*3 x+2/3y+1/3z=5/3 (3с)-(2с)*(-11/3) 1/3y-4/3z=-5/3 ó y - 4z = -5 ó -11/3y +11/3z=-11/3 -11/3y +11/3z=-11/3
x+2/3y+1/3z=5/3 (3с):(-11) x+2/3y+1/3z=5/3 y - 4z = -5 ó y - 4z = -5 ó -11z=-22 z=2
x+2/3y+1/3z=5/3 x+2/3*3+1/3*2=5/3 x=-1 y-4*2=-5 ó y=3 ó y=3 z=2 z=2 z=2
Однако, следует указать недостаток МГ: Поскольку на каждой ступеньке приходится определять ведущий коэффициент аii, то при его значении значительно меньшем единицы, деление на него на шаге 2 приводит к увеличению значений коэффициентов, стоящих в i-ой строке. Причем, чем меньше аii, тем сильнее увеличение. Это сказывается на погрешностях расчетов и получаемые значения будут далеки от верных. Для преодоления недостатка между шагами 1 и 2 вводят дополнительный шаг, заключающийся в выборе максимального из элементов ai,i, ai+1,i , ai+2,i , … , an,i. После определения такого максимального элемента, находящегося в k-ой строке, строчки I и k просто меняют местами. Введение дополнительного шага не сказывается на значениях переменных. Пример 2.1 с устранением недостатка: 3x+2y+z=5 (1c)<->(3c) 4x-y+5z=3 (1c):4 x+y-z=0 ó x+y-z=0 ó 4x-y+5z=3 3x+2y+z=5
x-1/4y+5/4z=3/4 (2с)-(1с) x-1/4y+5/4z=3/4 (2)<->(3) x+y-z=0 ó 5/4y-9/4z=-3/4 ó 3x+2y+z=5 (3с)-(1с)*3 11/4y -11/4z=11/4
x-1/4y+5/4z=3/4 (2с):(11/4) x-1/4y+5/4z=3/4 (3с)-(2с)*(5/4) 11/4y -11/4z=11/4 ó y - z=1 ó 5/4y-9/4z=-3/4 5/4y-9/4z=-3/4
x-1/4y+5/4z=3/4 (3): (-1) x-1/4y+5/4z=3/4 x=-1 y - z=1 ó y-2=1 ó y=3 -z=-2 z=2 z=2 Как видно, решение в обоих случаях одинаковое. В случае составления программы алгоритм следующий:
Первые шесть шагов называются прямым ходом метода Гаусса, шаги 7-8- Обратным ходом Метода Гаусса. Устранение недостатка МГ означает добавление в алгоритм между шагами 1 и 2следующие строчки: Найти m>=k такое, чтобы |amk|=max{|aik|} при всех i>=k Если |amk|<eps, то остановить работу (однозначного решения нет), иначе поменять местами bk и bm, akj и amj при k<=j<=n
Программа, написанная на языке Pascal, имеет вид: Uses crt; Const n1=10; Var k,i,j,n:integer; sum:real; l,a,a1:array[1..n1,1..n1] of real; b,b1,x:array[1..n1] of real; BEGIN Write('n=');read(n);
{БЛОК ВЫВОДА МАТРИЦЫ A} For i:=1 to n do begin For j:=1 to n do begin writeln(‘введите a[',i,',',j,'] элемент'); readln(a[i,j]); end; writeln('введите b[',i,'] элемент'); readln(b[i]); end;
{БЛОК ПОКАЗА МАТРИЦЫ А НА ЭКРАНЕ} writeln(исходная матрица А'); for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end;
{ БЛОК НАХОЖДЕНИЯ МАТРИЦЫ А'=А1} For k:=1 to n-1 do For i:=k+1 to n do begin l[i,k]:=a[i,k]/a[k,k]; b[i]:=b[i]-l[i,k]*b[k]; for j:=k+1 to n do a[i,j]:=a[i,j]-l[i,k]*a[k,j]; end; For i:=1 to n do For j:=1 to n do begin a1[i,j]:=a[i,j]/a[i,i]; b1[i]:=b[i]/a[i,i]; end;
{БЛОК ПОКАЗА МАТРИЦЫ А1 НА ЭКРАНЕ} writeln('преобразованная матрица А'); For i:=1 to n do begin for j:=1 to n do write(a1[i,j],' '); writeln; end;
{БЛОК РАСЧЕТА МАТРИЦЫ X} For k:=n downto 1 do begin for j:=k+1 to n do sum:=sum+a1[k,j]*x[j]; x[k]:=b1[k]-sum; sum:=0; end;
{БЛОК ВЫВОДА ПЕРЕМЕННЫХ НА ЭКРАН} writeln('переменные равны:'); For i:=1 to n do writeln('x[',i,']=',x[i]); Readln; END.
|
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 389. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |