Sei sulla pagina 1di 6

UNIVERSIDAD NACIONAL DE COLOMBIA

FACULTAD DE INGENIERA
MTODOS NUMRICOS / I- 2016
Laboratorio Mdulo 2 / Sistema de Ecuaciones Lineales
Utilizando la herramienta SCILAB resuelva el siguiente sistema de ecuaciones:

.
Para su resolucin se deben emplear cuatro (4) alternativas diferentes. Todas las
alternativas deben quedar codificadas en un solo programa SCILAB (es decir que se debe
presentar un solo programa SCILAB .sce que ejecute una a una las alternativas exigidas).
Es obligatorio que uno de las alternativas SCILAB utilice las funciones backsub() y
uptrbk (), que corresponden a la Fase II y Fase I de mtodo de Gauss. Dichas funciones
deben ser adaptadas a la herramienta SCILAB las cuales aparecen codificadas a
continuacin:
% Primera funcin: Sustitucin hacia atrs (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 solucin al sistema lineal AX = B
% METODOS NUMERICOS: Programas en Matlab
% (c) 2004 por John H. Mathews y Kurtis D. Fink
% Software complementario acompaando al texto:
% METODOS NUMERICOS con Matlab, Cuarta Edicin
% ISBN: 0-13-065248-2

% Prentice-Hall Pub. Inc.


% One Lake Street
% Upper Saddle River, NJ 07458
% Encontrar la dimensin 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
% Segunda funcin: Triangulacin superior (Fase I) seguida de una Sustitucin hacia
atrs (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 solucin de AX = B.
% METODOS NUMERICOS: Programas en Matlab
% (c) 2004 por John H. Mathews y Kurtis D. Fink
% Software complementario acompaando al texto:
% METODOS NUMERICOS con Matlab, Cuarta Edicin
% 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 eliminacin 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);
end
end
% Substitucin hacia atrs en [U | Y] utilizando la funcin backsub()
X = backsub(Aug(1:N, 1:N), Aug(1:N, N+1));
A continuacin se presenta documentacin til para realizar el resto del laboratorio y que ha
sido extrada del Manual de MATLAB: Aprenda Matlab 7.0 como si estuviera
en Primero
Aprenda Matlab 7.0 como si estuviera en Primero
Captulo 3: Operaciones con matrices y vectores pgina 25

En MATLAB invertir una matriz es casi tan fcil como trasponerla. A


continuacin, 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 -3
2 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 funcin inv( ) (la precisin o nmero 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.1885
0.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*A
ans =

1.0000 0.0000 0.0000


0.0000 1.0000 0.0000
0.0000 0.0000 1.0000

De forma anloga a las matrices, es posible definir un vector fila x en la


forma siguiente (si los tres nmeros estn separados por blancos o comas,
el resultado ser un vector fila):
>> x=[10 20 30] % vector fila
x =
10 20 30

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

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)=2
x =
1
x =
1 2

3.2. Operaciones con matrices


3.2.1. OPERADORES ARITMTICOS

MATLAB 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 funcin invertir inv( ).
Los operadores matriciales de MATLAB son los siguientes:
+ adicin o suma
sustraccin o resta
* multiplicacin
' traspuesta
^ potenciacin
\ divisin-izquierda
/ divisin-derecha
.* producto elemento a elemento
./ y .\ divisin elemento a elemento
.^ elevar a una potencia elemento a elemento
Estos operadores se aplican tambin 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 tamao. Si los
operadores no se usan de modo correcto se obtiene un mensaje de error.
Los operadores anteriores se pueden aplicar tambin de modo mixto, es
decir con un operando escalar y otro matricial. En este caso la operacin
con el escalar se aplica a cada uno de los elementos de la matriz.
Aprenda Matlab 7.0 como si estuviera en Primero
pgina 26

3.2.2. OPERADORES PARA LA RESOLUCIN DE SISTEMAS DE ECUACIONES LINEALES


MATLAB utiliza los operadores de divisin para la resolucin de sistemas de
ecuaciones lineales. Por su gran importancia, estos operadores requieren
una explicacin detenida. Considrese el siguiente sistema de
ecuaciones lineales,
Ax = b

(1)

donde x y b son vectores columna, y A una matriz cuadrada invertible. La


resolucin de este sistema de ecuaciones se puede escribir en las 2
formas siguientes (Atencin a la 2 forma, basada en la barra invertida (\),
que puede resultar un poco extraa!):
x = inv(A)*b
(2a)
x = A\b
(2b)
As pues, el operador divisin-izquierda por una matriz (barra invertida \)
equivale a pre-multiplicar por la inversa de esa matriz. En realidad este
operador es ms general y ms inteligente de lo que aparece en el ejemplo

anterior: el operador divisin-izquierda es aplicable aunque la matriz no


tenga inversa e incluso no sea cuadrada, en cuyo caso la solucin que se
obtiene (por lo general) es la que proporciona el mtodo de los mnimos
cuadrados. Cuando la matriz es triangular o simtrica aprovecha esta
circunstancia para reducir el nmero de operaciones aritmticas. En
algunos casos se obtiene una solucin con no ms 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 escaln y se resuelve el sistema
dando valor cero a las variables libres o independientes.
Aprenda Matlab 7.0 como si estuviera en Primero
pgina 46

4.5.4. FUNCIN LINSOLVE()


La funcin linsolve es la forma ms eficiente de que dispone MATLAB para
resolver sistemas de ecuaciones lineales. A diferencia del operador barra
invertida \, esta funcin no trata de averiguar las caractersticas de la
matriz que permitan hacer una resolucin ms eficiente: se fa de lo que
le dice el usuario. Si ste se equivoca, se obtendr un resultado
incorrecto sin ningn mensaje de error.
Las formas generales de la funcin 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
funcin utiliza la factorizacin LU con pivotamiento parcial si la matriz A
es cuadrada, y la factorizacin QR tambin con pivotamiento por
columnas si no lo es. La funcin 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 condicin numrica 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 informacin sobre las caractersticas 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 (simtrica), POSDEF
(definida positiva), RECT (rectangular general) y TRANSA (se desea
resolver AT x b , en lugar de Ax = b).

Potrebbero piacerti anche