Witam.
W linku zadanie które mam rozwiązać w języku Matlab. Ogólnie rozpisałem wszystko i program liczy (wynik wychodzi dobry), ale nie wiem jak uwzględnić błąd i liczbę iteracji, gdzie to wpisać jak to wpisać o co chodzi w ogóle. Pomocy.
function aluminium
clear all
format compact
diary on
A=[3,1,1,2;1,9,3,1;2,1,5,1;1,2,3,10]
B=[16;32;23;54]
X=[0;0;0;0];
x=metGaussaseidla(A,B,X)
%sprawdzenie
xr=AB
end
function x=metGaussaseidla(a,b,x)
n=length(a);
for k=1:11
for i=1:n
s1=0;
if(i>=2)
for j=1:i-1
s1=s1+a(i,j)*xn(j);
end
end
s2=0;
for j=i+1:n
s2=s2+a(i,j)*x(j);
end
x(i)=(-s1-s2+b(i))/a(i,i);
xn(i)=x(i);
end
end
end
Ostatnio zmieniony 25 kwie 2018, o 21:06 przez SlotaWoj, łącznie zmieniany 4 razy.
Powód:Nieregulaminowy zapis - obrazki zamiast zapisu w LaTeX-u. Brak tagów [code].
jak zapisać w matlabie to \(\displaystyle{ x_i^{k+1}}\) i co to znaczy ?
Ostatnio zmieniony 25 kwie 2018, o 16:30 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód:Nieczytelny zapis - brak LaTeX-a. Proszę zapoznaj się z instrukcją: http://matematyka.pl/latex.htm .
Tomku274
Proponuję bardziej dojrzały kod w Matlab numerycznej metody Gaussa-Seidla.
function seidel(A,b,x0,tol,itmax)
n=\length(b);
x=zeros(n,1);
fprintf('n\');
disp(' Macierzą jest=')
Augm=[A,b]
Y =zeros(n,1);
Y=x0;
for k=1:itmax+1
for i=1:n
S=0;
for j=1:i-1
S= S+A(i,j)*x(j);
end
for j=i+1:n
S = S +A(i,j)*x0(j);
end
if(A(i,i)==0)
break
end
x(i)=(-S +b(i))/(A(i,i);
end
err=abs(norm(x-x0));
rerr=err/(norm(x)+eps);
x0=x;
Y=[Y,x];
if(rerr< tol)
break
end
end
% Wyniki
if(A(i,i)==0)
disp(' dzielenie przez zero')
elseif(k== itmax +1)
disp(' Metoda rozbiezna')
else
fprintf('\n');
disp(' Wektorem rozwiązania jest:')
fprintf('\n');
disp('iter # 0 1 2 3 4 ...')
fprintf('\n')
for i=1:n
fprintf('x%1.0f= ',i)
fprintf('%10.6f',Y(i,[1:k+1]))
fprintf('\n');
end
fprintf('\n\');
disp(['Metoda zbieżna po ',num2str(k),' iteracjach do']);
x
end
Ostatnio zmieniony 25 kwie 2018, o 21:07 przez SlotaWoj, łącznie zmieniany 2 razy.
Powód:Brak tagów [code].