;

Full width home advertisement

Tutoriales

Programación

Post Page Advertisement [Top]


Este método permite mejorar la convergencia usando relajación. La relajación representa una ligera modificación del método de Gauss-Seidel y ésta permite mejorar la convergencia en algunos casos. Después de que se calcula cada nuevo valor de x, ése valor se modifica mediante un promedio ponderado de los resultados de las iteraciones anterior y actual.


A continuación se muestra el código del método SOR en Matlab: 
function [x] = sor()
disp(‘==POR FAVOR,INGRESE LA MATRIZ QUE SE LE PIDA DE FORMA ORDENADA==’);
n=input(‘CUANTAS ECUACIONES:’);
A=input(‘INGRESE LA MATRIZ A:’);
b=input(‘INGReSE LA MATRIZ B:’);
maxiter=input(‘CUANTAS ITERACIONES DESEA HACER:’);
x0=input(‘INGRESE VECTOR APROXIMACION:’);
w=input(‘INGRESE ACELERADOR W:’);
tol= 0.00001;
[m n]= size(A);
if m~=n, error(‘Matriz del sistema no cuadrada’), end
if m~= length(b), error (‘sistema no coherente’),end
x=zeros(size(b));
x2=x;
if any(abs(diag(A))<eps)
error(‘Metodo no valido. Elemento diagonal nulo’)
end
for k=1:maxiter
for i=1:n
tem=(b(i)-sum(A(i,[1:i-1 i+1:n])*x0([1:i-1 i+1:n])’))/A(i,i);
x(i)=tem*w + (1-w)*x0(i);
x0(i)=x(i);
end
if norm(x-x2)< tol
fprintf(‘\n SOR CONVERGE en %d iteraciones\n’,k),
return
end
x2=x;
end
fprintf(‘\n SOR NO CONVERGE en %d iteraciones\n’,maxiter)
Un ejemplo de uso:


9 comentarios:

  1. para que nos sirve el w (acelerador)

    ResponderEliminar
    Respuestas
    1. cuando tu no tienes un w, se podria decir que el incremento es uno, pero cuando posees ese acelerador, hace que llegues mas facil a la respuesta, es decir con el menor numero de iteraciones.

      Eliminar
  2. genial, me sirvio muchisimo!! gracias

    ResponderEliminar
  3. ¿cual podría ser nuestro w mas optimo?

    ResponderEliminar
  4. ¿cual podría ser nuestro w mas optimo?

    ResponderEliminar
  5. quiero que expliquen detalladamente, no se entiende y no corre en matab estuve probando mas de 3hora

    ResponderEliminar
  6. Pero cómo se te ocurre poner un input en una función

    ResponderEliminar
  7. cuando i vale 1 entonces i-1 vale 0, y ese indice no existe en los arreglos de MATLAB, por lo que el codigo no corre correctamente

    ResponderEliminar

Bottom Ad [Post Page]

| Designed by Colorlib