;
Matlab

Funcion que ejecuta el metodo SOR en MatLab

Full width home advertisement

728+3

Tutoriales

Programación

Post Page Advertisement [Top]

728+3

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:
tumblr_m3qgzd1Rzq1qhli7vo1_500

728+3

9 comentarios:

  1. blogger_logo_round_35

    para que nos sirve el w (acelerador)

    ResponderEliminar
    Respuestas
    1. blogger_logo_round_35

      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. blogger_logo_round_35

    genial, me sirvio muchisimo!! gracias

    ResponderEliminar
  3. blogger_logo_round_35

    ¿cual podría ser nuestro w mas optimo?

    ResponderEliminar
  4. blogger_logo_round_35

    ¿cual podría ser nuestro w mas optimo?

    ResponderEliminar
  5. blogger_logo_round_35
  6. blogger_logo_round_35

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

    ResponderEliminar
  7. blank

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

    ResponderEliminar
  8. blogger_logo_round_35

    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