Eliminación Gaussiana sin pivote

7
ALGORITMO PARA EL DESARROLLO DE ECUACIONES POR ELIMINACIÓN GAUSSIANA UNTECS UNTECS OBED GOMERO HUERTA

Transcript of Eliminación Gaussiana sin pivote

Page 1: Eliminación Gaussiana sin pivote

UNTECS

UNTECS

OBED GOMERO HUERTA

Page 2: Eliminación Gaussiana sin pivote

ELIMINACIÓN GAUSSIANA SIN PIVOTE

{int x=1,y=3,n;int A[50][50],B[50];cout<<"Ingrese el orden de la Matriz nxn :";cin>>n;cout<<"Ingrese los numeros: ";for(int q=0;q<=n;q++){ for (int w=0;w<=n;w++){ gotoxy(x,y);cin>>A[q][w]; x=x+5;} y=y+1;}

y=4+n; x=1;gotoxy(x,y); cout<<"Ingrese la Matriz B["<<n<<"]"; y=5+n;for (int i=0;i<=n;i++){ cin>>B[i]; y=++;}for (int k=0;k<=n;k++){ for (i=1;i<=;i++){ m=A[k][1]/A[k][k];} B[i]=B[i]-(m*B[k]);}}

Eliminación Gaussiana Con pivote parcial

P=k Big = A (k,k)DO ii=k+1 dummy = A( ii,k ) IF (dummy>big) big = dummy p = ii END IF END DO IF (p≠k) DO jj = k, n dummy = A( p,jj) A(p,jj) = A(k,jj) A(k,jj )= dummy END DO dummy = bp bp = bk bk = dummy END IF

Page 3: Eliminación Gaussiana sin pivote

Factorización LU sin pivote

for k = 1:nif abs(A(k, k)) < sqrt(eps)disp([’Pivote muy pequeno encontrado en columna’ int2str(k) ’.’])endL(k, k) = 1;for i = k+1:nL(i,k) = A(i, k) / A(k, k);for j = k+1:nA(i, j) = A(i, j) - L(i, k)*A(k, j);endendfor j = k:nU(k, j) = A(k, j);endend

Factorización LU con pivote

//Obtener el tamanio de A y comprobar las dimensiones[m,n] = size(A);if ( m ~= n )iflag = 1;returnend//Empieza la factorizacion LU con descomposicionfor k = 1:n-1//Buscar en pivote indice[amax, l ] = max(abs(A(k:n,k)));l = l + k - 1;ipivt(k) = l;// Intercambiar columnas si es necesarioif( k ~= l )tmp = A(k,k:n);A(k,k:n) = A(l,k:n);A(l,k:n) = tmp;endif( amax > 0 ) % Si amax == 0 subcolumna A(k:n,k) es cerofor i = k+1:n// Computa multiplicadoresA(i,k) = -A(i,k)/A(k,k);// Realiza la eliminacion por filasA(i,k+1:n) = A(i,k+1:n) + A(i,k) * A(k,k+1:n);End endEnd

Factorizacion Cholesky

Page 4: Eliminación Gaussiana sin pivote

n = length(A); for k=1:n A(k, k) = sqrt(A(k, k) - sum(A(k, 1:k-1).^2)); for i = k+1:n A(i, k) = (A(i, k) - sum(A(i, 1:k-1) .* A(k, 1:k-1))) / A(k, k); end end

ELIMINACIÓN GAUSSIANA SINPIVOTE

{ int x=1,y=3,n,m,i; int A[30][30],B[30],X[30]; cout<<"Ingrese el orden de la Matriz nxn :";cin>>n; cout<<"Ingrese los numeros: ";for(int q=0;q<n;q++){ for(int e=0;e<n;e++){ gotoxy(x,y);cin>>A[q][e];x+= 5;}y+=2;x=1;}y=4+n; x=1;gotoxy(x,y); cout<<"Ingrese la Matriz B["<<n<<"]";y=5+n;for(i=0;i<n;i++){ cin>>B[i]; y++;}for(int k=0;k<n;k++)

{ for(i=1;i<n;i++) { m=A[i][k]/A[k][k];

{for(int j=k+1;j<n;j++) A[i][j]= A[i][j]-m* A[k][j]; } B[i]=B[i]-m*B[k];}

}X[n]=B[n]/A[n][n];for(i=n-1;i>=1;i--)

{X[i]=B[i]; {for(j=i+1;j<=n;j++){X[i]=X[i]-A[i][j]*X[j];}} X[i]=X[i]/A[i][i];}

cout<<X[i]<<" ";}

Page 5: Eliminación Gaussiana sin pivote

Eliminación Gaussiana Con pivote parcial

P=k Big = A(k,k)DO ii=k+1 dummy = A(ii,k)IF (dummy>big) big = dummyp = ii END IF END DO IF (p≠k)DO jj = k, n dummy = A(p,jj)

A(p,jj)= A(k,jj)A(k,jj)= dummyEND DO dummy = bpbp = bkbk = dummyEND IF

Factorización LU sin pivotefor k = 1:nifabs(A(k, k)) <sqrt(eps)disp([’Pivote muy pequeno encontrado en columna’ int2str(k) ’.’])endL(k, k) = 1;for i = k+1:nL(i,k) = A(i, k) / A(k, k);for j = k+1:nA(i, j) = A(i, j) - L(i, k)*A(k, j);endendfor j = k:nU(k, j) = A(k, j);endend

Factorización LU con pivotedimensiones[m,n] = size(A);

Page 6: Eliminación Gaussiana sin pivote

if ( m ~= n )iflag = 1;returnend//Empieza la factorizacion LU con descomposicionfor k = 1:n-1//Buscar en pivote indice[amax, l ] = max(abs(A(k:n,k)));l = l + k - 1;ipivt(k) = l;// Intercambiar columnas si es necesarioif( k ~= l )tmp = A(k,k:n);A(k,k:n) = A(l,k:n);A(l,k:n) = tmp;endif( amax> 0 ) % Si amax == 0 subcolumna A(k:n,k) es cerofor i = k+1:n// Computa multiplicadoresA(i,k) = -A(i,k)/A(k,k);// Realiza la eliminacion por filasA(i,k+1:n) = A(i,k+1:n) + A(i,k) * A(k,k+1:n);EndendEnd

FactorizacionCholesky

n = length(A);for k=1:n A(k, k) = sqrt(A(k, k) - sum(A(k, 1:k-1).^2)); for i = k+1:n A(i, k) = (A(i, k) - sum(A(i, 1:k-1) .* A(k, 1:k-1))) / A(k, k); endend