Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ChislMetody_Lab6

.docx
Скачиваний:
0
Добавлен:
27.05.2024
Размер:
224.29 Кб
Скачать

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

Задание 1.

N=5;

format long e;

A=round(rand(N)*10)

F=round(rand(N,1)*10)

if (det(A)==0)

error 'Вырожденная. Попробуй снова.'

end

tic

X1=inv(A)*F;

toc

tic

dA=det(A);

dI=zeros(length(F), 1);

for i=1:length(F)

dI(i)=det([A(:, 1:(i-1)), F, A(:, (i+1):length(F))]);

end

X2=dI./dA;

X3=A\F;

toc

max([A*X1-F A*X2-F A*X3-F])

Задание 2.

tic

X4=gauss(A, F);

toc

max(A*X4-F)

function X = gauss( A, B )

eps=10e-7;

Z=[A B];

N=length(B);

for j=1:N % Перебираем СТОЛБЦЫ

Z_1=abs(Z(:, j));

Z_2=(abs(sum(Z(:, 1:(j-1)), 2))<eps);

Z_=Z_1.*Z_2;

[a, i] = max(Z_); %Ищем строку с наиб. по модулю коэфф.

if (a==0)

Z

error 'Нет коэффициента !=0'

end

a=Z(i, j);

maxline=Z(i, :);

for i_=1:N

if (i_==i)

continue;

end

Z(i_, :)=Z(i_, :)-maxline*Z(i_, j)/a;

end

end

X=zeros(N, 1);

%Обратный ход

for iter=1:N

Z_=abs(Z(:,1:N))>eps;

lines=find(sum(Z_, 2)==1);

if (isempty(lines))

break

end

for line=lines.'

col=find(Z_(line, :),1);

K=Z(line, :)./Z(line, col);

X(col)=K(1, N+1);

for i=1:N

Z(i,:)=Z(i,:)-Z(i, col)*K;

end

end

end

end

Задание 3.

tic

AF=rref([A F]);

toc

X5=AF(:, N+1);

max(A*X5-F)

Задание 4.

N=20;

format long e;

if (det(A)==0)

error 'Вырожденная. Попробуй снова.'

end

tic

X1=inv(A)*F;

toc

tic

%Краммер

dA=det(A);

dI=zeros(length(F), 1);

for i=1:length(F)

dI(i)=det([A(:, 1:(i-1)), F, A(:, (i+1):length(F))]);

end

X2=dI./dA;

toc

tic

X3=A\F;

toc

%Рез.

max([A*X1-F A*X2-F A*X3-F])

%Гаусс

tic

X4=gauss(A, F);

toc

max(A*X4-F)

При малом числе переменных алгоритмы обеспечивают одинаковую точность и время выполнения, кроме Гаусса (интерпретируемый код выполняется медленнее нативного). rref даёт относительно низкую точность.

Соседние файлы в предмете Численные методы