Estructuras.mws
MATEMATICAS
CON MAPLE
Para Estudiantes y Profesores
MAPLE V Versin...:. 5.1
Captulo
II - Estructuras
Documento: Maple Manual Estructuras
Captulo: II - Estructuras
Elabor: Csar Ivn Tinoco.
Versin: 23 de Julio del 2.000
Estructuras Simples
Una estructura es una conjunto de datos que puede obedecer a una ley determinada, o estar agrupados bajo un criterio.
>
restart;
numeros:=1,2,3,4,5,6;
nombre:=luis, marcos, maria, fernando;
Hemos asignado a la variable
numeros
la secuencia 1,2,3,4,5,6. y a la variable
nombres
, los datos de tipo caracter o
string
: luis, marcos, maria, fernando. Tambin podemos establecer una secuencia de datos mediante una expresin, usando la opcin
seq
, por ejemplo los primeros nmeros pares.
Orden
........: seq
Sintxis
......: seq (expresin , n = a . . b )
Propsito
...: Establece una secuencia de nmeros evaluando
expresion
, desde a hasta b
>
pares:=seq(2*i,i=1..10);
impares:=seq(2*i+1,i=1..10);
inidec:=seq(c||i,i=1..10);
Podemos "unir" varias secuencias y hacer alusin a un elemento de una secuencia por medio de sub_indice o un intervalo de sub indices, observe:
>
numeros:=(pares,impares);
numeros[5],pares[3],impares[3];
numeros[5..9];
Una secuencia no es una lista, ni un vector ni una tabla y tampoco un conjunto, es una relacin de datos que cumplen una regla.
El siguiente ejercicio, asigna una secuencia un conjunto de datos generando una tabla por medio de una funcin. Luego forma dos vectores tales que sus correspondientes elementos sean parejas ordenadas y finalmente presenta los grficos de dicha tabla. La orden
plot
la explicaremos ms adelante.
>
restart:
seq(f(i),i={x,y,z,w,u,v});
f1:=3*x+2;
Datos:=seq([i,subs(x=i,f1)],i=1..8);
whattype(Datos);
plot([Datos],style=point,symbol=circle,title=`Representacin de Datos`,titlefont=[TIMES,BOLD,14]);
Una lista es un conjunto de datos la cual se puede contar, es una secuencia escrita entre parntesis, formando una reunin de elementos finitos y por tanto contables y seleccionables. Para el control cardinal de una lista se usan los siguientes comandos:
Orden
........: op, nops
Sintxis
......: nops ( expresin )
op(n, expresin);
Propsito
...: Cuenta el nmero de elementos de una lista.
Devuelve el elemento n de la expresin o un subconjunto de elementos
>
Datos;
nops([Datos]);
op(2,[Datos]);
op(2..5,[Datos]);
Manejar listas, es muy util, el siguiente ejercicio, interpola dos listas, una representando la variable independiente y otro la variable dependiente. La orden
interp
, la explicaremos ms en detalle en los prximos captulos.
Orden
........: interp
Sintxis
......: interp ( x , y , variable )
Propsito
...: Encuentra la curva (funcin) que mejor se ajusta al conjunto de datos representados en las listas X y Y
>
X:=[seq(i,i=1..10)];
Y:=[seq(3*i+2,i=1..10)];
interp(X,Y,x);
De la misma manera podemos establecer conjuntos como una coleccin arbitraria de datos, realizar las operaciones bsicas entre conjuntos. Cuando un conjunto tenga elementos duplicados, slo quedar uno de ellos. Un conjunto se asigna con corchetes, una lista con parenteis cuadrados y una secuencia sin ninguno de los dos.
>
restar:
A:={1,2,3,4,5,6,7,8,9,0};
B:={1,2,3,8,9,3,17,18,19,10};
Union:=A union B;
Interseccion:=A intersect B;
Diferencia:=A minus B;
`El elemento..2 de A es..:` ,A[2];
`El elemento..3 de B es..:` ,B[3];
`Nmero de elementos de los conjuntos es..: `,nops(A),nops(B);;
De un conjunto podemos seleccionar, aquellos elementos que cumplan con una regla determinada, usando la orden
select
.
Orden
........: select
Sintxis
......: select ( condicin , conjunto )
Propsito
...: Selecciona del
conjunto
, los elementos que cumplen la
condicin
.
>
numeros:={seq(i,i=1..45)};
primos:=select(isprime,numeros);
nops(primos);
Las listas y los conjuntos tambin pueden tener elementos no numricos. Cuando la orden
op
, no tiene un parmetro que determine el objeto a seleccionar, se obtienen todos los elementos.
>
dias_habiles:=[lunes,martes,miercoles,jueves,viernes];
dias_festivos:=[sabado,domingo];
dias_habiles[4];
semana:=[op(dias_habiles),op(dias_festivos)];
primos:=[seq(ithprime(i),i=20..30)];
Algo an ms interesante resulta al poder generar una lsita de listas y ordenar una lista
semana
, en el sigiente ejemplo, es una variable tipo lista, formada por listas. Observe cuidadosamente cono se form una secuencia dentro de otra secuencia.
Orden
........: sort
Sintxis
......: sort ( lista , parametro )
Propsito
...: Ordenar una lista de acuerdo al parametro lxico o nmerico.
>
semana:=[dias_habiles,dias_festivos];
[seq(i^j,j=1..2)];
parejas:=[seq([seq(i^j,j=1..2)],i=1..4)];
semana:=[op(dias_habiles),op(dias_festivos)];
sort(semana,lexorder);
numeros:=[3,7,1,2,9,4,5,6,1,2,9];
sort(numeros,numeric);
Matrices
Conceptos Bsicos
Una Matriz es una estructura especial, es un conjunto ordenado de elementos en filas y columnas. Cada elemento de la matriz est determinado por la posicin que ocupa dentro de la misma. Es importante anotar que existe otra forma de manipular matrices, lo que se ver en la seccin de Algebra Lineal.
Orden
........: array
Sintxis
......: array ( 1 . . m , 1 . . n , [ elementos] )
Propsito
...: Definir una matriz de orden m*n.
>
restart:
A:=array(1..4,1..2);
La matriz A se ha definido de 4 filas por 2 columnas y an no tiene elementos. Para ingresar los elementos de la matriz procedemos de varias formas.
1- Definir la matriz y asignar los valores.
2- Definir la matriz sobre listas.
Debe ser claro que un vector es un caso particular de una matriz. Los siguientes ejemplos mostrarn varias matrices y vectores al igual que la forma de referenciar sus elementos.
>
restart:
A:=array(1..2,1..2,[(1,1)=1,(1,2)=2,(2,1)=3,(2,2)=4]);
B:=array([[1,2],[3,4]]);
C:=array([[1,2,3],[4,5,6],[7,8,9]]);
F:=array([5,6,7,8,9,0]);
A[1,2],F[5];
print
, nos permite presentar en pantalla el contenido de una matriz asignada a una variable y
array(funcin, rango)
define una matriz de aucerdo al nombre de la funcin y en el
rango
establecido por el parmetro.
>
A:=array(identity,1..3,1..3);
print(A);
Los elementos de una matriz pueden seguir una determinada ley, por tanto podemos asignar sus elementos mediante una secuencia. Supongamos que una matriz esta definida de la siguiente forma:
Asignaremos la matriz por una secuencia de secuencias. Preste especial atencin a cada una de las siguientes ordenes, hemos tratado de mostrar paso a paso lo que sucede con la definicin y asignacin de la matriz A.
>
restart:
lista1:=[seq((i^2+j^2),i=1..3)];
lista2:=[seq((i^2+j^2),j=1..4)];
lista3:=seq([seq(i^2+j^2,j=1..4)],i=1..3);
A:=array(1..3,1..4,[lista3]);
En matemticas existen unas matrices particulares, las cuales estan previamente definidas en
Maple.
Los siguientes ejemplos muestran algunas de ellas.
Operaciones con Matrices.
Las operaciones tradicionales entre matrices, tambin estan definidas en
Maple
.
Orden
........: evalm
Sintxis
......: eval ( operacin )
Propsito
...: Realiza la operacin entre las matrices del argumento..
>
restart;
A:=array([[1,2],[3,4]]);
B:=array([[5,2],[3,2]]);
`A + B `:=evalm(A+B);
`A - B `:=evalm(A-B);
`5A `:=evalm(-5*A);
`A * B `:=evalm(A&*B);
`Inv(A) `:=evalm(A^(-1));
`A^3 `:=evalm(B^3);
Funciones sobre Matrices.
Se trata de hacer un seguimiento a una expresin y obtener una estructura de datos basada en la expresin. La orden
map
, realiza este seguimiento o "mapeo" de la expresin en una estrucura o una expresin.
Orden
........: map
Sintxis
......: map ( funcin, estructura )
Propsito
...: Aplica la
funcin
en los elementos de la
estructura
>
restart:
map(cos,[x,2,z,Pi]);
A:=array([[1,2],[exp(1),Pi]]);
evalf(map(sin,A),4);
map(exp,A);
f1:=x->x^2+3*x+5;
map(f1,[1,2,3,4]);
Anlogamente, podemos seguir el comportamiento de una expresin en dos variables sobre dos estrucutras de datos, para esto usamos la orden
zip
.
Orden
........: zip
Sintxis
......: zip ( funcin, estructura1, estructura2 )
Propsito
...: Aplica la
funcin
de variar variables a los elementos de las
estructuras
. del argumento.
>
f1:=(x,y)->x/y;
A:=[2,3,4,5,6];
B:=[4,5,6,7,12];
zip(f1,A,B);
f2:=(x,y)->sin(x)/cos(y);
zip(f2,A,B);
Tablas
Una tabla es una lista de elementos asociados, es como una estructura en C. Una tabla maneja los datos sobre los indices de cada dato en la tabla. Ah radica su importancia, el elemento est enlazado en su posicin.
Orden
........: table
Sintxis
......: table ( conjunto de elementos asigandos)
Propsito
...: Secuencia ordenada de elementos.
>
t1:=table([Primero=1,Segundo=2,Tercero=3]);
dias:=table([lunes=Monday,martes=Tuesday,miercoles=Wednesdays,jueves=Thursday,viernes=Friday,sabado=Saturday]);
t1[Primero];
dias[martes];
Cuando a una tabla no se le asignan elementos especficamente, estos sern asignados en forma cardinal.
>
table([1,2,3]);
Algebra Lineal
Para el manejo de elementos de Algebra Lineal en
Maple
, debemos cargar la librera
linalg.
Algunas de las aplicaciones y comandos adicionados usando esta librera presentan a continuacin.
>
restart:
with(linalg);
Warning, the protected names norm and trace have been redefined and unprotected
Vectores y Matrices
Vectores.
Definicin
.
Es probable que este familizarizado con los vectores, listas, arreglos o matrices, pero esta nueva definicin establece el vector como un elemento de caracter matemtico vectorial, es decir, un conjunto de nmeros que representan un elemento con magnitud, direccin y sentido o el vector posicin en trminos grficos y fsicos.
Lo anterior nos lleva a suponer que un vector definido [x,y,z] representa una terna de nmeros del vector posicin de cordenadas x, y, z.
Orden
........: vector
Sintxis
......:vector( [x1,x2,x3,....,xn] )
vector( n , f )
Propsito
...: Define un vector en trminos de sus componentes rectangulares.
Define un vector de dimensin
n
en la funcion
f
.
>
restart:with(linalg):
V:=vector([1,2,3]);
S:=vector(6,x->x^2);
P:=vector(4,[1,x,x^2,x^3]);
Warning, the protected names norm and trace have been redefined and unprotected
Angulo entre Vectores.
El ngulo entre dos vectores, est definido:
Se obtiene:
Orden
........: angle
Sintxis
......: angle ( vectores )
Propsito
...: Calcula el ngulo entre los vectores del argumento.
El resultado estar dado en radianes, para convertir este dato a grados usamos la orden
convert
o realizamos un procedimiento que represente un regla de tres.
>
M:=vector([1,1,1]);
P:=vector([1,0,0]);
Angulo:=evalf(angle(M,P),4);
evalf(Angulo);
evalf(convert(%,degrees),4);
Producto entre Vectores
El producto vectorial entre los vectores U y V de
, es otro vector perpendicular simultaneamente a U y V. Est definido como:
El determinante anterior es un vector!, y se obtiene:
Orden
........: crossproduct
Sintxis
......: crossproduct ( vectores )
Propsito
...: Calcula el vector resultante del producto Cruz o Vectorial entre los vectores del argumento.
>
p:=vector([1,2,3]);
q:=vector([7,3,5]);
r:=crossprod(p,q);
a1:=angle(p,r);
convert(a1,degrees);
a2:=angle(q,r);
convert(a2,degrees);
Producto Punto.
El Producto punto de vectores es un nmero asociado a los vectores de la misma magnitud. El producto punto de los vectores V y U, est definido como:
V.U=
Se obtiene en
Maple
con la siguiente orden.
Orden
........: dotprot
Sintxis
......: dotprot ( vectores )
Propsito
...: Calcula el producto punto en tre los
vectores
del argumento.
>
V:=vector([2,3,4,5]);
U:=vector([1,3,5,-4]);
C:=dotprod(V,U);
randvector
(n), genera un vector aleatorio de dimensin n.
vectdim
, determina la dimensin del vector del argumento.
>
randvector(3);
randvector(10);
vectdim(%),vectdim(U);;
norm
, calcula la norma de un vector.
>
norm( array([1,1]),2),norm( array([1,1,1]),2);
norm( array([2,2,2,2,2]),2);
Matrices, Conceptos Bsicos
Definicin
.
Una matriz es un conjunto de elementos numricos ordenados en filas y columnas. Para referirnos a una matriz, le asignamos un nombre y una definicin de sus elementos asi:
Sea una matriz
cuyos elementos estan definidos:
Nos estamos refiriendo a la matriz A con elementos
. Una matriz se puede definir en
Maple
, con la siguiente orden.
Orden
........: matrix
Sintxis
......: matrix ( m , n , [
,
,......,
] )
matrix ( m , n, [fila 1],[fila 2],....[fila 3] )
matrix ( m , n, funcin)
Propsito
...: Define una matriz.de tamao
m*n
con elementos
[ ... ]
Define una matriz.de tamao
m*n
especifivando las filas que la componen
Define una matriz.de tamao
m*n
especificando la regla de construccin de sus elementos
>
restart:with(linalg):
A:=matrix(3,2,[1,2,3,4,5,6]),
whattype(A);
B:=matrix(3,2,[[1,2],[3,4],[5,6]]);
f1:=(i,j)->i^2+j^2;
C:=matrix(3,3,f1);
Warning, the protected names norm and trace have been redefined and unprotected
ranmatrix
, genera una matriz aleatoria de orden m x n.
type
( A, matrix), evalua si A es una matrix.
>
S:=randmatrix(3, 3):
type(S,matrix);
print(S);
Operaciones y Manupulacin de Matrices
Suma, Resta y producto por escalar de Matrices
Sea A una matriz de m filas y n columnas y B otra matriz de la misma dimensin, entonces A+B ser otra matriz del mismo orden, es decir:
,
, entonces
donde
, con..
Orden
........: matadd
Sintxis
......: matadd ( Matriz 1, Matriz 2 )
matrix ( Matriz 1, Matriz 2 , k, t )
Propsito
...: Calcula la suma entre las matrices del argumento.
Calcula la suma entre las matrices del argumento multiplicadas por los escalares k y t respectivamente. Queda definido el producto por escalar y la resta de matrices.
>
restart:with(linalg):
A:=matrix(2,2,[[1,2],[3,4]]);
B:=matrix(2,2,[[5,6],[7,8]]);
C:=matadd(A,B);
E:=matadd(A,B,-1,1);
Warning, the protected names norm and trace have been redefined and unprotected
scalarmul
, multiplica una matiz por un escalar.
>
scalarmul(array([[1,2],[3,4]]),2);
scalarmul(A,4);
scalarmul(B,-3);
Producto Matricial
Sea A una matriz de m filas y n columnas y B otra matriz de n filas por k columnas, el producto A*B ser otra matriz de orden m*k, es decir:
,
, entonces
donde
, con..
Orden
........: multiply
Sintxis
......: multiply ( Matriz 1, Matriz 2 )
multiply ( Matriz , Vector )
Propsito
...: Calcula el producto entre las matrices del argumento.
Calcula el producto de la matriz por un vector, mientras se cumplan las condiciones.
>
A:=matrix(2,2,[[1,2],[3,4]]);
B:=matrix(2,2,[[5,6],[7,8]]);
C:=multiply(A,B);
v:=vector([1,2]);
P:=multiply(A,v);
Manipulacin de Matrices
Orden
........: addrow, addcol, mulcol, mulrow
Sintxis
......: addrow( Matriz, i,j, expresin)
addcol( Matriz, i,j, expresin)
mulcol( Matriz, j, expresin)
mulrow( Matriz, i, expresin)
Propsito
...: Adiciona la expresin a los elementos de la fila del elemento ij de la matriz. Multiplica la fila i o columna j por la
expresin
.
>
restart:with(linalg):
A:=matrix(3,3,[[1,2,3],[3,4,5],[5,6,7]]);
B:=matrix(3,2,[[10,20],[30,40],[60,70]]);
addrow(A,2,2,5),addcol(A,1,3,5);
mulrow(A,3,y),mulcol(A,2,x);
Warning, the protected names norm and trace have been redefined and unprotected
augment
, adiciona las columnas de una matriz en la otra,lo mismo mientras que
concat
, lo hace con vectores formando una matriz. Los vectores o matrices deben tener el mismo nmero de filas.
>
print(A,B);
augment(A,B);
v:=vector([3,4,5]);
u:=vector([6,7,8]);
augment(A,v),augment(v,A);
stackmatrix
, adiciona las filas de una matriz debajo de la otra, las matrices deben tener el mimo nmero de columnas.
submatrix
, extrea una matriz de otra matriz, estableciendo el rango de la filas y columnas a extraer.
>
stackmatrix(A,v),stackmatrix(v,A);
submatrix(A,2..3,2..3),submatrix(A,1..2,1..3);
swaprow
, intercambia filas de la matriz.
swapcol
, intercambian columnas de la matriz.
>
print(A);
swaprow(A, 1, 2),swapcol(A, 1, 2);
band
, genera una matriz de orden n, con los elementos de otro vector, tales que el elemento de la mitad del vector ser la diagonal, y los otros estarn a lado y lado de esta. trace, calcula la traza de una matriz cuadrada.
>
t1:=band([1],2);
trace(t1);
t2:=band([1,3,2],3);
trace(t2);
charpoly
, genera el polinomio caracterstico de la matriz del argumento en trminos de una variable.
>
print(A);
charpoly(A,x);
F:=band([1,5,2],3);
charpoly(F,x);
companion
, devuelve la matrix asociada a un polinomio, es decir, lo contrario.
>
p:=charpoly(F,x);
companion(p,x);
charpoly(%,x);
row,
col
, extraen filas y columnas de una matriz.
delcol
y
delrow
, quitan la columna o fila de una matriz.
>
print(A);
row(A,2);
col(A,2..3);
row(A,2..3);
delrows(A,1..1),delcols(A,1..1);;
det
, calcula el determinanate de una matriz cuadrada.
equal
, verifica si las matrices del argumento son iguales.
>
A:=randmatrix(2,2);
Determinante:=det(A);
m1:=matrix(2,2,[[2,3],[4,5]]):
m2:=matrix(2,2,[[4,6],[8,10]]):
equal(m1,m2);
Dado un sistema de ecuaciones podemos generar la matriz ampliada de dicho sistema,
genmatrix
, nos permite esto.
geneqns
, hace lo contrario. Las ecuaciones pueden ser generadas en trminos de varias variables o en una sola sub indizada.
>
ecuas:={x+2*y=0,3*x-5*y=0};
A:=genmatrix(ecuas,[x,y]);
geneqns(A,[x,y]);
geneqns(A,x);
traspose
, calcula la transpuesta de una matriz y
vandermonde
, genera la matriz de Vandermonde, sobre un vector columna inicial.
>
print(A,transpose(A));
vandermonde([1,2,5]),vandermonde([1,2,3,-1]);
Inversa de una Matriz
La siguiente orden calcula la inversa, mientras esta exista.
Orden
........: inverse
Sintxis
......: inverse ( matriz )
Propsito
...: Calcula la inversa de la
matriz
del argumento.
>
restart:with(linalg):
A:=matrix(2,2,[[1,2],[3,4]]);
Inversa:=inverse(A);
`A * Inversa.: `,multiply(A,Inversa);
Warning, the protected names norm and trace have been redefined and unprotected
>
B:=matrix(2,2,[[a,b],[c,d]]):
B1:=inverse(B):
print(B,B1);
Menor, Cofactores y Matriz de Cofactores
El menor ij denotado por
. es el determinante de la sub matriz que resulta de suprimir la fila
i
y la columna
j
de una matriz.
minor
, devuelve la sub matriz, nosotros calculamos el determinante.
Orden
........: minor
Sintxis
......: minor ( Matriz, [ i , j ] )
Propsito
...: Calcula el menor [ i, j] de la Matriz del argumento.
>
A:=matrix(3,3,[[1,3,4],[4,5,4],[1,7,4]]);
minor(A,1,1),` El menor 1,1 `,det(%);
minor(A,1,2),` El menor 1,2 `,det(%);
El cofactor ij denotado
=
lo calculamos: :
>
(-1)^(1+1)*det(minor(A,1,1));
(-1)^(1+2)*det(minor(A,1,2));
Con la orden
seq
, podemos calcular todos los menores de una matriz.
>
seq(seq(minor(A,i,j),j=1..3),i=1..3);
Matriz Adjunta
La adjunta de una matriz cuadrada est definida sobre la transpuesta los cofactores.
Orden
........: adjoint
Sintxis
......: adjoint ( Matriz )
Propsito
...: Calcula la adjunta de la matriz del argumento.
>
A:=matrix(3,3,[[1,3,4],[4,5,4],[1,7,4]]);
Aj:=adjoint(A):
TAj:=transpose(Aj):
print(Aj,TAj);
Lo que significa que los cofactores de una matriz, los podemos calcular con la adjunta. Verifique que los cofactores
= -8 y
=-12, son los calculados en el ejercicio anterior.
Eliminacin de Gauss, Gauss-Jordan
Dado un sistema de ecuacines lineales, es posible encontrar la solucin usando el Mtodo de Eliminacin de Gauss el cual consiste en:
1- Formar la matriz ampliada del sistema
2- Llevar la matriz a una ecalonada reducida
3- Solucionar dicha matriz
Este proceso lo realiza Maple con la orden:
Orden
........: gausselim
Sintxis
......: gausselim ( A , r, d)
Propsito
...: Encuentra la matriz triangular superior de
A
, asigna a
r
el valor del rango de la matriz
A
. Adems devuelve en
d
, el determinante de la matriz del argumento.
Supongamos el siguiente sistema de ecuaciones:
>
A:=matrix(4,4,[[1,3,2,-1],[0,1,4,-7],[2,7,6,-5],[0,1,2,-3]]);
`Escalonada ..: `,gausselim(A);
Rango:=r;
El mtodo Gauss Jordan, lleva la matriz ampliada hasta la escalonada reducida y en
Maple
lo calculamos con la orden
gaussjord
.
>
u:=gaussjord(A,'r');
Que representa la solucin del sistema, es decir:
,
,
Podemos usar las ordenes,
geneqns
,
genmatrix
, para genera la matriz amplida y el sistema de ecuaciones de la matriz ampliada reducida.
>
ecuas:={x+3*y+2*z=-1, y+4*z=-7, 2*x+7*y+6*z=-5, y+2*z=-3};
b:=vector([-1,-7,-5,-3]):
c:=genmatrix(ecuas,[x,y,z]):
augment(c,b);
print(u);
geneqns(u,[x,y,z,b]);
Solucin de un Sistema de Ecuaciones Lineales
Consideremos el siguiente sistema de Ecuaciones Lineales.
El sistema de ecuaciones se puede expresar de la forma
Ax=b
, donde
A
es la matriz de coeficientes,
x
el vector de las incognitas y
b
el vector de los trminos independientes. El sistema se resulve obteniendo los valores para
x
, que satisfagan las ecuaciones. Este vector se obtiene en
Maple
con la orden:
Orden
........: leastsqrs.
Sintxis
......: leastsqrs ( A , b)
Propsito
...: Calcula el vector resultante o solucin de un sistema de ecuaciones lineales de la forma Ax=b.
>
restart:with(linalg):
ecuas:={x-3*y+z+2*w=6, 3*x-8*y+4*z+4*w=15, -2*x+8*y+3*z-11*w=-21, x+2*y-3*z+3*w=8, 3*x-y+5*z-2*w=8};
A:=genmatrix(ecuas,[x,y,z,w]);
b:=([6,15,-21,8,8]);
sol:=leastsqrs(A,b);
Warning, the protected names norm and trace have been redefined and unprotected
Podemos verificar la respuesta en cada una de las ecuaciones originales. Observe que la variable
sol
, es una lista o un vector, debemos convertir dicho vector en un conjunto que represente los valores de x,y,z y w, para esto usamos la orden
equate
, de la librera
students
que genera ecuaciones conlos elementos correspondientes de las listas.
>
with(student):
sol1:=equate([x,y,z,w],sol);
subs(sol1,ecuas);
Un sistema de ecuaciones puede tener muchas soluciones, por ejemplo:
>
A:=matrix(3,3,[[2,-1,1],[1,-2,-1],[4,-5,-1]]);
b:=vector([3,3,9]);
Escalonada:=gausselim(A,'r');
Escalonada_Reducida:=gaussjord(A,'r');
Solucion:=leastsqrs(A,b);
>
Escalonada := matrix([[2, -1, 1], [0, -3, -3], [0, 0, 0]]);
Significa esto, que el vector solucin del sistema, est representado por las ecuaciones paramtricas siguientes:
Lo cual podemos verificar para un valor aleatorio del parmetro t. Con la orden
rand(a..b)
generamos un nmero aleatorio.
>
ecuaciones:={4*x-5*y-z=3, 2*x-y+z=3, x-2*y-z=9};
solucion:=leastsqrs(A,b);
t1:=rand(1..10):t:=t1():
`Para t..: `,t;
sol:={x=2+t,y=t,z=-1-t};
linea1:=op(1,ecuaciones);
linea2:=op(2,ecuaciones);
linea3:=op(3,ecuaciones);
eval(linea1,sol),eval(linea2,sol),eval(linea3,sol);
Veamos un sistema de ecuaciones, la solucin, la verificacin y su representacin grfica:
Sea el sistema formado por las ecuaciones:
>
ecuas:={x+y=2,2*x-y=1,x+2*y=3};
A:=genmatrix(ecuas,[x,y]);
b:=vector([2,1,3]);
G:=augment(A,b);
Escalonada:=gausselim(G,'r');
Escalonada_Reducida:=gaussjord(G,'r');
Solucion:=leastsqrs(A,b);
Verificando tenemos:
>
with(student):
solecuas:=equate([x,y],Solucion);
subs(solecuas,ecuas);
Observe la grfica:
>
convert(ecuas,list);
with(plots):
l1:=implicitplot(op(1,ecuas),x=-2..8,y=-2..6,color=blue):
l2:=implicitplot(op(2,ecuas),x=-2..8,y=-2..6,color=red):
l3:=implicitplot(op(3,ecuas),x=-2..8,y=-2..6,color=black):
p:=convert(eval(Solucion),list);
punto:=plot([p],x=-2..8,y=-2..6,style=point,symbol=circle,color=magenta):
te1:=textplot([1.7,1.2,`(1,1)`]):
te2:=textplot([4,5,`x+y=2`],color=blue):
te3:=textplot([4,4,`2*x-y=1`],color=black):
te4:=textplot([4,3,`x+2*y=3`],color=red):
display(l1,l2,l3,punto,te1,te2,te3,te4,title=`Sitema de Ecuaciones`);
Warning, the name changecoords has been redefined
Interpolacin. Mtodo Matricial y de Sumatorias.
Una de las aplicaciones del Algebra Lineal consiste en interpolar un conjunto de datos (Puntos), para generar la "Curva que mejor se Ajusta" a dicho conjunto de datos.
La siguiente expresin, nos permite obtener el polinomio que representa dicha curva:
Donde:
A = Matriz cuyos elementos son:
Columna 1..: Unos
Columna 2..: Valores de la Variable Independiente de los datos obtenidos
Columna i...: Valores de la Variable Independientele elevados a la (i-2), lo que prcticamnete es la matriz de
Vandermonde.
Y = Vector con los valores de la Variable Dependiente de los datos obtenidos.
El siguiente ejercicio representa el polinomio de interpolacin sobre los datos de un experimento. Asignamos a X y a Y como vectores con los datos de las variables idependiente y dependiente respectivamente. Con estos valores formamos la tabla de datos en trminos de parejas ordenadas (x,y), que llamamos Puntos. Finalmente realizamos las operaciones pertinenetes.
>
with(linalg):with(plots):
X:=vector([0,3,4,5,6]);
Y:=vector([0,5,7,11,13]);
Puntos := [seq([X[i],Y[i]],i=1..vectdim(X))];
A:=matrix(5,2,[[1,0],[1,3],[1,4],[1,5],[1,6]]);
AT:=transpose(A);
Polinomio:=multiply(multiply(inverse(multiply(AT,A)),AT),Y);
Que representa la solucin para la interpolacin lineal, donde polinomio es de la forma:
>
b:=evalf(Polinomio[1]);
m:=evalf(Polinomio[2]);
f1:=m*x+b;
plot({Puntos,f1},x=-5..10,style=[line,point],title=`Curva de Aproximacin por Matrices`,labels=[`Eje X`,`Eje Y`],thickness=[0,3],symbol=circle);
Ahora, veremos una curva de aproximacin en un polinomio de grado mayor, usando la opcin de Maple que genera una matriz de Vandermonde.
>
A:=vandermonde([0,3,4,5,6]);
AT:=transpose(A);
Polinomio:=multiply(multiply(inverse(multiply(AT,A)),AT),Y);
As hemos obtenido el polinomio:
Veamos las implicaciones grficas:
>
f2:=0+(727/60)*x^1+(-943/120)*x^2+(113/60)*x^3+(-17/120)*x^4;
plot({Puntos,f1,f2},x=0..7,y=0..15,style=[line,line,point],color=[blue,red,black],title=`Curva de Aproximacin y Puntos`,labels=[`Eje X`,`Eje Y`],thickness=[0,0,3],symbol=circle);
Como se puede observar, la curva se aproxima cada vez ms. La regresin lineal practicamente no toca ningn punto, mientras que la polinmica los toca a todos.
Finalmente usaremos la opcin,
interp
, de Maple. No graficaremos pues es exacta al resultado de la interpolacin anterior.
>
interp(X,Y,x);
Para finalizar, usaremos el mtodo de Interpolacin por Derivadas Parciales. Recordemos que los valores de m y b, para la interpolacin lineal luego de haber derivado parcialmente, son:
Punto de corte (b)...:
Pendiente................
Tratemos de registrar estas sumatorias en Maple, teniendo como conjunto de datos a X y Y de los ejercicios anteriores.
>
X:=vector([0,3,4,5,6]);
Y:=vector([0,5,7,11,13]);
Puntos := [seq([X[i],Y[i]],i=1..vectdim(X))];
n:=vectdim(X);
S_XY:=sum(X[i]*Y[i],i=1..n);
S_X:=sum(X[i],i=1..n);
S_Y:=sum(Y[i],i=1..n);
S_XX:=sum((X[i])^2,i=1..n);
m:=(n*S_XY-S_X*S_Y)/(n*S_XX-S_X^2);
b:=(S_Y-S_X*m)/n;
evalf(m),evalf(b);
Por lo tanto la lnea que ms se ajusta es:
y = -0.679 + 2.1886x
>
f3:=evalf(m,2)*x+evalf(b,2);
plot({Puntos,f3},x=-5..10,style=[point,line],title=`Curva de Aproximacin por Series`,labels=[`Eje X`,`Eje Y`],thickness=[3,0],symbol=circle);
Graficos Matriciales
matrixplot
, nos permite hacer una representacin grfica de una matrix, veamos algunas.
>
restart:with(plots):with(linalg):
A:= hilbert(8): B:=toeplitz([1,2,3,4,-4,-3,-2,-1]):
matrixplot(A);
matrixplot(A &* B);
matrixplot(A+B,heights=histogram,axes=boxed);
matrixplot(A+B,heights=histogram,axes=frame,gap=0.25,style=patch);
F := (x,y) -> sin(x*y):
matrixplot(A+B,heights=histogram,axes=frame,gap=0.25,style=patch,color=F);
Warning, the name changecoords has been redefined
Warning, the protected names norm and trace have been redefined and unprotected
>
>