Добавил:
Помогу с учёбой на Прикладной информатике, пишите, найдёте сами Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
01.02.2023
Размер:
2 Кб
Скачать
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)