Добавил:
Помогу с учёбой на Прикладной информатике, пишите, найдёте сами Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
01.02.2023
Размер:
2.29 Кб
Скачать
n1=input('Введите номер группы: ');
n2=input('Введите ваш номер в списке группы: ');
n=n1+n2;
rand('seed',n);
A=rand(7);
b=10*rand(7,1);
Au=triu(A);
Al=tril(A);
Ad=diag(diag(A));
su=sum(sum(abs(Au)));
sl=sum(sum(abs(Al)));
Su=sum(abs(Au));
Sl=sum(abs(Al));
sigma=5;
O=ones(7);
Ou=triu(O);
S6=diag(sigma*(Su./Sl));
At=sigma*((Al+Ou)./(Au'+Ou));
neo=rem(n2,2);
mode=rem(n2,3);
if (mode==0) Al=(sigma*su/sl)*Al; end
if (mode==1) Al=S6*Al; end
if (mode==2) Al=At.*Al; end
A=Al+Ad+Au;
ma=max(max(abs(A)));
if (ma>1000) A=0.08*A;
end
#-----
count=0;
for i=1:7
s=0;
for j=1:7
if i~=j
s=s+abs(A(i,j));
else s=s+0;
endif
endfor
if abs(A(i,i))<s
count=count+1;
A(i,i)=s+1;
endif
endfor
if count>0
disp('Не было выполнено условие сходимости, матрица изменена')
A
else
disp('Условие сходимости выполнено')
endif
count
#-----
B=[];
C=[];
for i=1:7
for j=1:7
if i~=j
B(i,j)=-A(i,j)/A(i,i);
else
B(i,j)=0;
endif
endfor
C(i)=b(i)/A(i,i);
end;
C=C'
B
xi=[1;1;1;1;1;1;1];
xii=xi;
for cl=1:20
xi=B*xi+C;
xii=[xii xi];
end
n=[0:20];
hold on
for i=1:7
plot(n,xii(i,:))
end
disp('Решение простыми итерациями');
xi
disp('Невязка');
nev=A*xi-b
disp('Норма невязки');
nevN=norm(nev)
#-----
Bl=tril(B);
Bu=triu(B);
xz=[1;1;1;1;1;1;1];
xzz=xz;
E=eye(size(A));
M=(E-Bl)^-1;
for i=1:20
xz=M*(Bu*xz+C);
xzz=[xzz xz];
end
figure
hold on
for i=1:7
plot(n,xzz(i,:))
end
disp('Решение методом Зейделя');
xz
disp('Невязка');
nevz=A*xz-b
disp('Норма невязки');
nevNz=norm(nevz)
#-----
x=inv(A)*b
disp('Погрешность итерационного метода');
pi=x-xi
disp('Норма погрешности итерационного метода');
ni=norm(pi)
disp('Погрешность метода Зейделя');
pz=x-xz
disp('Норма погрешности метода Зейделя');
nz=norm(pz)
#-----
db=-b*0.1
Ap=A;
for i=1:7
for j=1:7
if i=j
Ap(i,j)=Ap(i,j)*1.1;
endif
endfor
end
dA=Ap-A
disp('Относительная погрешность');
op=cond(A)/(1-cond(A)*norm(dA)/norm(A))*(norm(dA)/norm(A)+norm(db)/norm(b))
disp('Относительная погрешность итерационного метода');
opi=norm(xi-x)/norm(x)
disp('Относительная погрешность метода Зейделя');
opz=norm(xz-x)/norm(x)