MÉTODOS NUMERICOS

8
UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD DE INGENIERÍA MÉTODOS NUMÉRICOS / I - 2014 / Marzo Laboratorio Módulo 2 / Sistema de Ecuaciones Lineales Usando la herramienta SCILAB resuelva el sistema de ecuaciones lineales dado en el taller dos, utilizando hasta tres (3) alternativas diferentes. Cada alternativa debe quedar codificada en un programa SCILAB (*.SCE). Por lo anterior se debe presentar tres programas SCILAB (*.SCE) Es obligatorio que uno de los programas SCILAB (*.SCE) utilice las funciones “backsub()” y “uptrbk ()”, que corresponden a la Fase II y Fase I de método de Gauss. Dichas funciones deben ser adaptadas a la herramienta SCILAB y aparecen codificadas a continuación: % Primera función: Sustitución hacia atrás (Fase II) % function X = backsub (A, B) % % Entrada - A es una matriz triangular superior no singular n x n % - B es una matriz n x 1 % Salida - X es la solución al sistema lineal AX = B % METODOS NUMERICOS: Programas en Matlab % (c) 2004 por John H. Mathews y Kurtis D. Fink % Software complementario acompañando al texto: % METODOS NUMERICOS con Matlab, Cuarta Edición % ISBN: 0-13-065248-2 % Prentice-Hall Pub. Inc. % One Lake Street % Upper Saddle River, NJ 07458 % Encontrar la dimensión de B e inicializar X

description

Métodos numéricos

Transcript of MÉTODOS NUMERICOS

Page 1: MÉTODOS NUMERICOS

UNIVERSIDAD NACIONAL DE COLOMBIAFACULTAD DE INGENIERÍA

MÉTODOS NUMÉRICOS / I - 2014 / Marzo

Laboratorio Módulo 2 / Sistema de Ecuaciones Lineales

Usando la herramienta SCILAB resuelva el sistema de ecuaciones lineales dado en el taller dos, utilizando hasta tres (3) alternativas diferentes. Cada alternativa debe quedar codificada en un programa SCILAB (*.SCE). Por lo anterior se debe presentar tres programas SCILAB (*.SCE)

Es obligatorio que uno de los programas SCILAB (*.SCE) utilice las funciones “backsub()” y “uptrbk ()”, que corresponden a la Fase II y Fase I de método de Gauss. Dichas funciones deben ser adaptadas a la herramienta SCILAB y aparecen codificadas a continuación:

% Primera función: Sustitución hacia atrás (Fase II)%function X = backsub (A, B)%% Entrada - A es una matriz triangular superior no singular n x n% - B es una matriz n x 1% Salida - X es la solución al sistema lineal AX = B

% METODOS NUMERICOS: Programas en Matlab% (c) 2004 por John H. Mathews y Kurtis D. Fink% Software complementario acompañando al texto:% METODOS NUMERICOS con Matlab, Cuarta Edición% ISBN: 0-13-065248-2% Prentice-Hall Pub. Inc.% One Lake Street% Upper Saddle River, NJ 07458

% Encontrar la dimensión de B e inicializar X

n = length(B); X = zeros(n, 1); X(n) = B(n) / A(n, n);

for k = n-1:-1:1 X(k) = (B(k) - A(k, k+1:n) * X(k+1:n)) / A(k, k);end

Page 2: MÉTODOS NUMERICOS

% Segunda función: Triangulación superior (Fase I) seguida de una Sustitución hacia atrás (Fase II)%function X = uptrbk (A, B)%% Entrada - A es una matriz no singular N x N% - B es una matriz N x 1% Salida - X es una matriz N x 1 conteniendo la solución de AX = B.

% METODOS NUMERICOS: Programas en Matlab% (c) 2004 por John H. Mathews y Kurtis D. Fink% Software complementario acompañando al texto:% METODOS NUMERICOS con Matlab, Cuarta Edición% ISBN: 0-13-065248-2% Prentice-Hall Pub. Inc.% One Lake Street% Upper Saddle River, NJ 07458

% Inicializar X y la matriz de almacenamiento temporal C[N, N] = size(A);X = zeros(N, 1);C = zeros(1, N+1);

% Formar la matriz aumentada: Aug = [A | B]Aug = [A, B];

for p = 1:N-1 % Pivoteo parcial para la columna p [Y, j] = max(abs(Aug(p:N, p))); % Intercambiar las filas p y j C = Aug(p, :); Aug(p, :) = Aug(j+p-1, :); Aug(j+p-1, :) = C; if Aug(p, p) == 0 'A was singular. No unique solution' break end % El proceso de eliminación para la columna p for k = p+1:N m = Aug(k, p) / Aug(p, p); Aug(k, p:N+1) = Aug(k, p:N+1) - m * Aug(p, p:N+1); endend

% Substitución hacia atrás en [U | Y] utilizando la función backsub()X = backsub(Aug(1:N, 1:N), Aug(1:N, N+1));

Page 3: MÉTODOS NUMERICOS

A continuación se presenta documentación útil para realizar el resto del laboratorio y que ha sido extraída del Manual de MATLAB: “Aprenda Matlab 7.0 como si estuviera en Primero”

Aprenda Matlab 7.0 como si estuviera en PrimeroCapítulo 3: Operaciones con matrices y vectores página 25

En MATLAB invertir una matriz es casi tan fácil como trasponerla. A continuación, desde la ventana de comandos, definimos la siguiente matriz A -no singular- de la siguiente forma:>> A=[1 4 -3; 2 1 5; -2 5 3]A =1 4 -32 1 5-2 5 3

Ahora se va a calcular la inversa de A y el resultado se asignará a B. Para ello basta hacer uso de la función inv( ) (la precisión o número de cifras con que se muestra el resultado se puede cambiar con el menú File/Preferences/General):>> B=inv(A)B =0.1803 0.2213 -0.18850.1311 0.0246 0.0902-0.0984 0.1066 0.0574

Para comprobar que este resultado es correcto basta pre-multiplicar A por B;>> B*Aans =1.0000 0.0000 0.00000.0000 1.0000 0.00000.0000 0.0000 1.0000

De forma análoga a las matrices, es posible definir un vector fila x en la forma siguiente (si los tres números están separados por blancos o comas, el resultado será un vector fila):>> x=[10 20 30] % vector filax =10 20 30

Por el contrario, si los números están separados por intros o puntos y coma (;) se obtendrá un vector columna:>> y=[11; 12; 13] % vector columna

Page 4: MÉTODOS NUMERICOS

y =111213

MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por ejemplo, si se intenta sumar los vectores x e y se obtendrá el siguiente mensaje de error:>> x+y??? Error using ==> +Matrix dimensions must agree.

Estas dificultades desaparecen si se suma x con el vector transpuesto de y:>> x+y'ans =21 32 43

MATLAB considera vectores fila por defecto, como se ve en el ejemplo siguiente:>> x(1)=1, x(2)=2x =1x =1 2

3.2. Operaciones con matrices3.2.1. OPERADORES ARITMÉTICOSMATLAB puede operar con matrices por medio de operadores y por medio de funciones. Se han visto ya los operadores suma (+), producto (*) y traspuesta ('), así como la función invertir inv( ).Los operadores matriciales de MATLAB son los siguientes:

+ adición o suma– sustracción o resta* multiplicación' traspuesta^ potenciación\ división-izquierda/ división-derecha.* producto elemento a elemento./ y .\ división elemento a elemento.^ elevar a una potencia elemento a elemento

Page 5: MÉTODOS NUMERICOS

Estos operadores se aplican también a las variables o valores escalares, aunque con algunas diferencias. Todos estos operadores son coherentes con las correspondientes operaciones matriciales: no se puede por ejemplo sumar matrices que no sean del mismo tamaño. Si los operadores no se usan de modo correcto se obtiene un mensaje de error.

Los operadores anteriores se pueden aplicar también de modo mixto, es decir con un operando escalar y otro matricial. En este caso la operación con el escalar se aplica a cada uno de los elementos de la matriz.Aprenda Matlab 7.0 como si estuviera en Primeropágina 26

3.2.2. OPERADORES PARA LA RESOLUCIÓN DE SISTEMAS DE ECUACIONES LINEALESMATLAB utiliza los operadores de división para la resolución de sistemas de ecuaciones lineales. Por su gran importancia, estos operadores requieren una explicación detenida. Considérese el siguiente sistema de ecuaciones lineales,

Ax = b (1)

donde x y b son vectores columna, y A una matriz cuadrada invertible. La resolución de este sistema de ecuaciones se puede escribir en las 2 formas siguientes (¡Atención a la 2ª forma, basada en la barra invertida (\), que puede resultar un poco extraña!):

x = inv(A)*b (2a)x = A\b (2b)

Así pues, el operador división-izquierda por una matriz (barra invertida \) equivale a pre-multiplicar por la inversa de esa matriz. En realidad este operador es más general y más inteligente de lo que aparece en el ejemplo anterior: el operador división-izquierda es aplicable aunque la matriz no tenga inversa e incluso no sea cuadrada, en cuyo caso la solución que se obtiene (por lo general) es la que proporciona el método de los mínimos cuadrados. Cuando la matriz es triangular o simétrica aprovecha esta circunstancia para reducir el número de operaciones aritméticas. En algunos casos se obtiene una solución con no más de r elementos distintos de cero, siendo r el rango de la matriz. Esto puede estar basado en que la matriz se reduce a forma de escalón y se resuelve el sistema dando valor cero a las variables libres o independientes.

Aprenda Matlab 7.0 como si estuviera en Primero página 46 4.5.4. FUNCIÓN LINSOLVE()

Page 6: MÉTODOS NUMERICOS

La función linsolve es la forma más eficiente de que dispone MATLAB para resolver sistemas de ecuaciones lineales. A diferencia del operador barra invertida \, esta función no trata de averiguar las características de la matriz que permitan hacer una resolución más eficiente: se fía de lo que le dice el usuario. Si éste se equivoca, se obtendrá un resultado incorrecto sin ningún mensaje de error.

Las formas generales de la función linsolve para resolver Ax=b son las siguientes:x = linsolve(A,b)x = linsolve(A,b,opts)

Obviamente, si b es una matriz de segundos miembros, x será una matriz de soluciones con el mismo nº de columnas. La primera forma de esta función utiliza la factorización LU con pivotamiento parcial si la matriz A es cuadrada, y la factorización QR también con pivotamiento por columnas si no lo es. La función linsolve da un warning si la matriz A es cuadrada y está mal condicionada, o si es rectangular y de rango deficiente. Estos warnings se suprimen si se recoge un segundo valor de retorno r, que representa el inverso de la condición numérica si A es cuadrada o el rango si no lo es:[x,r] = linsolve(A,b)

El argumento opcional opts representa una estructura por medio de la cual el programador proporciona información sobre las características de la matriz. Los campos de esta estructura se pueden poner a true o a false, y son los siguientes: LT (triangular inferior), UT (triangular superior), UHESS (forma de Hessenberg superior), SYM (simétrica), POSDEF (definida positiva), RECT (rectangular general) y TRANSA (se desea resolver , en lugar de Ax = b).