Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программная реализация метода простой итерации для решения СЛАУ в пакете matlab.






Входные параметры: U – расширенная матрица коэффициентов, eps – требуемая точность решения.

Function res = Jakobi(U, eps);

%проверка 1

[n, m] = size(U);

if (n ~= m-1)

error ('Неверно задана система');

end;

 

%приведение системы к диагонально доминирующему виду

for j=1: m

for i=1: n

U1(i, j)=-U(i, j)/U(i, i);

end

end

U=U1;

%матрица А

A=U(1: n, 1: m-1);

for i=1: n

A(i, i)=0;

end

%матрица B

B=-U(1: n, m);

%====================================================

%проверка 2

if rank(A) ~= rank(U)

error('Система не совместна');

end;

%вывод матриц

A

B

%сумма по строкам

norm1=zeros(n, 1);

k=1;

for i=1: n

for j=1: m-1

norm1(k)=norm1(k)+abs(A(i, j));

end

if k< 4

k=k+1;

end;

end

%матрица сумм по строкам

norm1;

%первая норма по строкам

max_norm1=max(norm1);

 

%сумма по столбцам

k=1;

norm2=zeros(n, 1);

for j=1: m-1

for i=1: n

norm2(k)=norm2(k)+abs(A(i, j));

end

if k< 4

k=k+1;

end

end

%матрица сумм по строкам

norm2;

%вторая норма по строкам

max_norm2=max(norm2);

 

%нахождение третьей нормы

%нахождение суммы элементов матрицы А

sum=0;

for i=1: n

for j=1: m-1

sum=sum+A(i, j)*A(i, j);

end

end

 

% третья норма

max_norm3=sqrt(sum);

%вывод значений норм матрицы А

max_norm1

max_norm2

max_norm3

%===================================================

%проверка условия сходимости метода итераций

if ((max_norm1> 1) & & (max_norm2> 1) & & (max_norm3> 1))

error('Введенная матрица не является диагонально преобладающей')

end;

%====================================================

%итерационный процесс

k=0;

X0=zeros(n, 1);

X0=B;

X1=zeros(n, 1);

 

for i=[1: n]

%нахождение суммы для Х1(i)

sum=0;

for j=[1: m-1]

sum = sum + (A(i, j) * X0(j));

end

X1(i)=sum + B(i);

end

 

while (abs(X0(i) - X1(i)) > eps)

X0=X1;

for i=[1: n]

%нахождение суммы для Х1(i)

sum=0;

for j=[1: m-1]

sum = sum + (A(i, j) * X0(j));

end

X1(i)=sum + B(i);

end

 

k=k+1;

 

end

%====================================================

%вывод вектора решений

X1

%вывод числа итераций для выполненияусловия точности

k

%=====================================================

 

return


ВСТРОЕННЫЕ ФУНКЦИИ ПАКЕТОВ MATHCAD И MATLAB

ДЛЯ ПРИБЛИЖЕННОГО РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ

АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.