Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Программная реализация метода простой итерации для решения СЛАУ в пакете 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 ДЛЯ ПРИБЛИЖЕННОГО РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
|