Académique Documents
Professionnel Documents
Culture Documents
iipd unp
IMPLEMENTACIN DE UN PROGRAMA EN MAXIMA PARA SOLUCIONAR INECUACIONES QUE INVOLUCRAN EXPRESIONES RACIONALES EN R
LIC. ROBERT IPANAQU CHERO MSC. GUILLERMO GONZLEZ CREOLLO LIC. JUDITH K. JIMNEZ VILCHERREZ
TRABAJO DE INVESTIGACIN
NDICE
MAXIMA
6
6 9 14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INEQSOLVE
20
20 24 24
ineqsolve.lisp
. . . . . . . . . . . . . . . . . . . . . . . .
29 31 32
INTRODUCCIN
R con-
stituye un tema de sumo inters para estudiantes de los primeros ciclos de las diversas facultades de todos los programas de pregrado de nuestra universidad. Especialmente podemos sealar los programas como administracin, contabilidad y educacin en los cuales, de acuerdo a nuestra experiencia, la mayora de los alumnos tienen inters de contar con un asesor que les indique si los resultados que estn obteniendo son correctos o no. Pensando en esta necesidad hemos decidido elaborar este trabajo para que pueda ser usado a modo de asesor virtual. De manera que los alumnos tengan acceso a una respuesta acertada y puedan as aanzar sus conocimientos. Este trabajo presenta un programa codicado en el software libre Maxima que permite obtener el conjunto solucin de inecuaciones que involucran expresiones racionales en
R.
R,
considera la unin con conjunto discretos. Para representar un intervalo o la unin de varios intervalos se utiliza la funcin identicadora
Interval aplicada
de tal herramienta se ha elegido al software libre Maxima dado que su licencia gratuita lo pone al alcance de todos los presupuestos tanto individuales como institucionales. El trabajo esta compuesto por tres captulos. En el primero de los cuales se hace una introduccin a la implementacin de programas en el lenguaje propio de Maxima. Tal introduccin consiste en la presentacin de tres ejemplos de programas codicados en Maxima. En el segundo captulo se da una descripcin del algoritmo en el que basa el programa para solucionar inecuaciones que involucran expresiones racionales en
R,
este mtodo. Finalmente, en el tercer captulo se detalla ordenadamente el proceso seguido para implementar el programa
R. Ipanaqu
G. Gonzlez
J. K. Jimnez
Piura, Per
MAXIMA
En este captulo se muestra cdigo en Maxima de tres programas. Tales programas permiten tener una idea de la forma de elaborar programas en
Maxima, adems de la sintaxis propia del lenguaje de programacin de dicho
software.
1.1. Ejemplo 1
En este ejemplo se presenta el programa
riemann1 ,
cionar si se dibujan los rectngulos inferiores o superiores que aproximan el rea bajo la grca de
f (x)
en
a x b.
if not member(tipo,['sup,'inf]) then error("Tipo de sumas incorrecto: debe ser 'sup o 'inf"), abscisas: makelist(rango[2]+k*d-d/2,k,1,n), if tipo = 'inf then ordenadas: makelist([k, min(ev(funcion,rango[1]=k-d/2), ev(funcion,rango[1]=k+d/2))],k,abscisas) else ordenadas: makelist([k, max(ev(funcion,rango[1]=k-d/2), ev(funcion,rango[1]=k+d/2))],k,abscisas), barras:map(lambda([h],endcons(d,h)),ordenadas), wxdraw2d( fill_color=red,fill_density=.2,apply(bars,barras), color=blue,explicit(funcion,rango[1],rango[2],rango[3]) ), int: integrate(funcion,rango[1],rango[2],rango[3]), suma: apply("+",d*makelist(k[2],k,ordenadas)), print(""), print("Area bajo la curva ..=", int), print("Area rectangulos ....=", suma), print("Diferencia (int-sum) =", int-suma), print("") )$
A continuacin se muestran algunos ejemplos.
Maxima
Esto inicializa el paquete incorporado en
Maxima
, draw.
( %i1) load(draw) $
Maxima
Aqu se utiliza el programa riemann para aproximar, mediante suma inferior, la integral denida
0 5
u3 du.
( %i2) riemann(u^3,[u,0,5],10,'inf);
Area bajo la curva ..=156.25 Area rectangulos ....=126.5625 Diferencia (int-sum) =29.6875
( %o2)
Maxima
En este otro ejemplo se utiliza el programa riemann para aproximar, mediante suma superior, la integral denida
2 2
ev dv .
( %i3) riemann(exp(-v^2),[v,-2,2],10,'sup);
Area bajo la curva ..=1.764162777861408 Area rectangulos ....=2.154934969707745 Diferencia (int-sum) =-0.39077219184634
( %o3)
1.2. Ejemplo 2
En este ejemplo se presenta el programa
limite2 ,
x0
l f (x) = L m
en
a x b.
ejemplo ha sido tomado del libro: Maxima: una herramienta de clculo, de Mario Rodrguez Riotorto y se lo ha modicado para que utilice el programa draw.
2 Este
10
npar:6$ /* variable global: controla numero de pares de la tabla */ limite(expr,var,val,xmin,xmax,[dir]):= block([xx,yy,tab,lim,side:0,barras], /* asignando valor a side */ if length(dir) > 0 then if dir[1] = 'minus then side: -1 else if dir[1] = 'plus then side: 1, /* calculo de las abscisas */ if side # 0 then xx: float(makelist(val+side/2^k,k,0,npar)) else xx: float(append(makelist(val-1/2^k,k,0,npar), reverse(makelist(val+1/2^k,k,0,npar)))), /* achegamento tabular */ yy: map (lambda ([u], subst(u,var,expr)), xx), tab: transpose(matrix(append([var],xx), append([expr],yy))), print(" Estudio del limite"), print(" =================="), print(tab),
11
/* calculo del limite */ if side = -1 then (lim: limit(expr,var,val,'minus), print(float(lim)=lim), print('limit(expr,var,val,'minus)= lim) ) else if side = 1 then (lim: limit(expr,var,val,'plus), print(float(lim)=lim), print('limit(expr,var,val,'plus)= lim) ) else (lim: limit(expr,var,val), print(float(lim)=lim), print('limit(expr,var,val)= lim) ), /* representacion grafica */ barras:map(lambda([h],endcons(0.0,h)),args(rest(tab))), wxdraw2d( color=blue,explicit(expr,var,xmin,xmax), color=red,apply(bars,barras)),'fin)$
A continuacin se muestran algunos ejemplos.
Maxima
Esto inicializa el paquete incorporado en
Maxima
, draw.
( %i1) load(draw) $
12
Maxima
Aqu se utiliza el programa limite para obtener informacin con respecto a l m
z3 z2 + 5 . z7 z4
( %i2) riemann(u^3,[u,0,5],10,'inf);
Estudio del limite ==================
z 6,0 6,5 6,75 6,875 6,9375 6,96875 6,984375 7,015625 7,03125 7,0625 7,125 7,25 7,5 8,0
92,5 94,95 97,08522727272728 98,32540760869566 98,98395944148936 99,32235814144737 99,49378144428992 99,84099867430376 100,0167626449742 100,3725286989796 101,100625 102,6201923076923 105,8928571428571 113,25
299 3
z 3 z 2 +5 z4
99,66666666666667 = l z7 m
z 3 z 2 +5 z4
299 3
13
( %o2)
n
Maxima
En este otro ejemplo se obtiene informacin con respecto a l + m
x0
sen(x) . x
( %i3) riemann(limite(sin(x)/x,x,0,-1,1,'plus);
Estudio del limite ==================
sin(x) x
14
l x0+ m
sin(x) x
=1
( %o3)
n
1.3. Ejemplo 3
En este ejemplo se presenta el programa campo vectorial tangente a una curva
cvtu3 ,
15
nticks=100,color=red, apply(parametric,append(a(t),[t,tmin,tmax])), color=blue,unit_vectors=true,T, color=green,point_type=7,points(P), user_preamble="set size ratio 1", title="Campo vectorial tangente unitario", xyplane=0,axis_3d=false, xtics=false,ytics=false,ztics=false, xaxis=true,yaxis=true,zaxis=true, xlabel="x",ylabel="y",zlabel="z" ]), wxdraw3d(objetos) )$
A continuacin se muestran algunos ejemplos.
Maxima
Esto inicializa el paquete incorporado en
Maxima
, draw.
( %i1) load(draw) $
Maxima
Aqu se utiliza el programa cvtu para obtener el campo vectorial tangente unitario a la curva (t) = (cos(t), sen(t), t/8).
16
Maxima
En este otro ejemplo se utiliza el programa cvtu para obtener el campo vectorial tangente unitario a la curva (t) = 2 cos2 (t), sen(2t), 2 sen(t) .
Debe tenerse presente que los algoritmos incluidos en este captulo estn diseados para ser implementados en sistemas de clculo simblico (como lo es Maxima ), los cuales ya incluyen muchas bibliotecas de programas especializados para realizar diferentes tareas. Por ejemplo, para el clculo de las races de un polinomio Maxima ya cuenta con el comando especco
solve.
18
Algoritmo 2.1.1: Clculo de los ceros de un polinomio. Entrada: polinomio P (x). Salida: lista L vaca o con las races reales del polinomio P (x).
L ; L races de P (x); L seleccionar de L
los valores reales.
1 2 3
2.2. Signo de la expresin racional en los intervalos generados a partir de los ceros de la misma
Algoritmo 2.2.1: Determinacin del signo de la expresin racional. Entrada: expresin racional R(x) = P (x)/Q(x). Salida: lista L conteniendo los intervalos originados a partir de los ceros
del numerador y denominador de cada uno de dichos intervalos.
R(x),
y los signos de
R(x)
en
1 2 3 4 5 6 7
P (x); Q(x); valores de L1 y L2 , unicados y ordenados; aadir y a L3 ; particionar L3 ; L4 signo de R(x) en cada intervalo de L3 particionada; L valores de L3 particionada y L4 , unicados.
ceros de ceros de
L1 L2 L3
map,
19
control
for,
por ejemplo.
1 2 3 4
esto
5 6 7 8 9 10 11 12 13
n
Para i 1 para
eliminar de
L; l 1 tome i,
tal que
n
el elemento
Li = Li+1 L;
determinar las races que se repiten un nmero par de veces; analizar si las races repetidas deben aadirse o no en forma separada con
L;
solucin como la unin de intervalos y conjuntos discretos de puntos que satisfacen la inecuacin, pero no pertenecen a los intervalos.
INEQSOLVE
21
then raices:map(rhs,flatten(algsys([polinomio],[x]))) ), sublist(raices,lambda([h],head(h)=real)) )$ ptomedio(lista):=block( if lista[1]=minf then lista[2]-0.5 elseif lista[2]=inf then lista[1]+0.5 else 0.5*apply("+",lista) )$ sgn(f,inter):=block( if subst(ptomedio(inter),x,f)>0 then "+" else "-" )$ partir(lista):=block( map("[",rest(lista,-1),rest(lista,1)) )$ ineqsolve(inecuacion,x):= block([f:factor(lhs(inecuacion)-rhs(inecuacion)), operador:op(inecuacion),L1,L2,intervalos,signos, intervalidos,objetivo,aux,aux2,cpar,sol,conj,cpar, cpar_num,cpar_den,cpar_unir,cpar_restar,g],
22
signos:map(lambda([h],sgn(f,h)),intervalos),
aux:flatten(intervalidos), aux2:aux, for i:1 thru length(aux)-1 do( if aux[i]=aux[i+1] then aux2:delete(aux[i],aux2) ),
intervalidos:makelist(part(aux2,[2*i-1,2*i]),i,1,length(aux2)/2),
23
if operador="<=" or operador=">=" then ( cpar_unir:cpar_num, for i in cpar_num do( if member(true,map(lambda([h],g(h,i)),intervalidos)) then cpar_unir:delete(i,cpar_unir) ) ) else cpar_unir:{},
sol:delete(Interval(),delete({},append([sol],[cpar_unir]))),
24
if cpar_restar={} then if length(sol)=0 then {} elseif length(sol)=1 then first(sol) else apply(Union,sol) else if length(sol)=1 then first(sol)-cpar_restar else apply(Union,sol)-cpar_restar )$
Interval;
a,
25
Maxima
Esto inicializa el programa implementado, ineqsolve.
( %i1) load("d:/maxpackages/inecuaciones/inecuaciones.lisp") $
Maxima
He aqu la solucin de x2 + 1 0.
Maxima
He aqu la solucin de x2 + 1 0.
Maxima
He aqu la solucin de
(x+5)7 (x2 7 x+12) x (x+4)4 (x2 13 x+40)
0.
( %i4) ineqsolve(((x^2-7*x+12)*(x+5)^7)/((x^2-13*x+40)* (x+4)^4*x)<=0,x); ( %o4) Interval ([5, Open (0)], [3, 4], [Open (5) , Open (8)]) {4}
26
Maxima
He aqu la solucin de
x3 +8 x1
+ x 0.
227 54
1 3
+
9
4
211 227 54 2 3 1 3
1 3 ],
Maxima
He aqu la solucin de
x+3 x1
x2 x6
0.
Maxima
He aqu la solucin de
x2 1 x+5
0.
27
Maxima
He aqu la solucin de y 2 + 4 y 8 0.
( %i9) ineqsolve(y^2+4*y-8>=0,y);
( %o9) Interval [Open () , 2 3 2], [2 3 2, Open ()]
Maxima
He aqu la solucin de
(x2) x2 (x+3) x5
0.
( %i10) ineqsolve((x-2)*(x+3)*x^2/(x-5)<=0,x); ( %o10) Union (Interval ([Open () , 3], [2, Open (5)]) , {0})
Maxima
He aqu la solucin de x5 3x + 4 0.
Maxima
He aqu la solucin de x 1 > 1/x.
5+1 2
, Open ()]
28
Maxima
He aqu la solucin de x < 1/x.
( %i13) ineqsolve(x<1/x,x); ( %o13) Interval ([Open () , Open (1)], [Open (0) , Open (1)])
Maxima
He aqu la solucin de x2 (x 1)2 0.
Maxima
He aqu la solucin de x2 (x 1)2 > 0.
CONCLUSIONES
ineqsolve,
codicado en el lenguaje
de programacin del software cientco Maxima, el cual permite obtener la solucin de inecuaciones que involucran expresiones racionales en
R.
2. Los intervalos que forman parte de la solucin son representados por listas.
3. Cuando hay ms de un intervalo que conforman el conjunto solucin, todos los que hayan aparecen afectados por la funcin
Union.
4. Los extremos de los intervalos que no satisfacen la inecuacin aparecen afectados por la funcin parte de la solucin.
Open
5. Los conjuntos discretos de nmeros reales aparecen representados entre llaves, tal como Maxima representa dichos conjuntos.
6. Los conjuntos discretos y los intervalos tambin aparecen vinculados mediante la funcin
Union.
30
7. Los conjuntos discretos que no forman parte de la solucin aparecen restados, tal y como se expresa en la forma matemtica tradicional.
RECOMENDACIONES
2. Se recomienda divulgar el uso del software libre Maxima entre los estudiantes de Ciencias e Ingeniera.
3. Se recomienda implementar nuevos programas en Maxima para contribuir con la mejora de este software libre.
BIBLIOGRAFA
[1] Ipanaqu,
R.
BREVE
MANUAL
DE
MAXIMA.
http://www.eumed.net/libros/2010c/728/index.htm (2010).
J. LIBRE
R.
MAXIMA EN EL
CON AULA
WXMAXIMA: DE
SOFT-
MATEMTICAS.
http://knuth.uca.es/repos/maxima (2007).
[3] Rodrguez,
M.
Villate,
J.
MANUAL
DE
MAXIMA
ver.
5.18.
http://maxima.sourceforge.net/es/documentation.html (2009).
[4] Rodrguez,
M.
PRIMEROS
PASOS
EN
MAXIMA.
www.telefonica.net/web2/biomates/maxima/max.pdf (2008).
[5] Rodrguez,
M.
SOFTWARE
MATEMTICO
BSICO:
MAXIMA.
www.telefonica.net/web2/biomates/maxima/i-math.pdf (2008).