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’), endif m~= length(b), error (‘sistema no coherente’),endx=zeros(size(b));x2=x;if any(abs(diag(A))<eps)error(‘Metodo no valido. Elemento diagonal nulo’)endfor k=1:maxiterfor i=1:ntem=(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);endif norm(x-x2)< tolfprintf(‘\n SOR CONVERGE en %d iteraciones\n’,k),returnendx2=x;endfprintf(‘\n SOR NO CONVERGE en %d iteraciones\n’,maxiter)
Un ejemplo de uso:
para que nos sirve el w (acelerador)
ResponderEliminarcuando 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.
Eliminargenial, me sirvio muchisimo!! gracias
ResponderEliminar¿cual podría ser nuestro w mas optimo?
ResponderEliminar¿cual podría ser nuestro w mas optimo?
ResponderEliminarCon cual mathlab lo usas=
ResponderEliminarquiero que expliquen detalladamente, no se entiende y no corre en matab estuve probando mas de 3hora
ResponderEliminarPero cómo se te ocurre poner un input en una función
ResponderEliminarcuando 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