Vous êtes sur la page 1sur 32

IMPLEMENTACIN DE UN

PROGRAMA EN MAXIMA PARA SOLUCIONAR INECUACIONES QUE INVOLUCRAN EXPRESIONES RACIONALES EN R

R. Ipanaqu G. Gonzlez J. K. Jimnez

iipd unp

UNIVERSIDAD NACIONAL DE PIURA FACULTAD DE CIENCIAS

REA ACADMICA DE MATEMTICA

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

PIURA - PER Agosto - 2010

NDICE

INTRODUCCIN 1. EJEMPLOS DE PROGRAMAS CON


1.1. 1.2. 1.3. Ejemplo 1 Ejemplo 2 Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

MAXIMA

6
6 9 14

2. ALGORITMOS PARA SOLUCIONAR INECUACIONES RACIONALES EN R 17


2.1. 2.2. 2.3. Determinacin de los ceros de expresiones polinomiales de los ceros de la misma racional . . . . . 17 18 18 Signo de la expresin racional en los intervalos generados a partir . . . . . . . . . . . . . . . . . . . . . . Seleccin y anlisis de intervalos que satisfacen una inecuacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3. IMPLEMENTACIN DEL PROGRAMA


3.1. 3.2. 3.3. Codicacin del programa Creacin del archivo Ejemplos ilustrativos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INEQSOLVE

20
20 24 24

ineqsolve.lisp

. . . . . . . . . . . . . . . . . . . . . . . .

CONCLUSIONES RECOMENDACIONES BIBLIOGRAFA

29 31 32

INTRODUCCIN

La solucin de inecuaciones que involucran expresiones racionales en

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.

La salida de dicho conjunto solucin es dada como

la unin de conjuntos continuos (intervalos) en

R,

incluso en algunos casos se

considera la unin con conjunto discretos. Para representar un intervalo o la unin de varios intervalos se utiliza la funcin identicadora

Interval aplicada

a una o ms listas, segn sea el caso; y para indicar si un intervalo es abierto en

cierto extremo se utiliza la funcin identicadora

Open. Para la implementacin

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,

complementndose la misma con algunos ejemplos en los que se aplica

este mtodo. Finalmente, en el tercer captulo se detalla ordenadamente el proceso seguido para implementar el programa

ineqsolve, describindose todos los coman-

dos que se han implementado en este programa ejecutable.

R. Ipanaqu

G. Gonzlez

J. K. Jimnez

Piura, Per

CAPTULO I EJEMPLOS DE PROGRAMAS CON

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 ,

el cual permite selec-

cionar si se dibujan los rectngulos inferiores o superiores que aproximan el rea bajo la grca de

f (x)

en

a x b.

riemann(funcion,rango,n,tipo):= block([abscisas,ordenadas,barras,d,numer:true, ratprint:false,int,suma], d: (rango[3]-rango[2])/n,


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.
1 Este

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 ,

el cual permite generar

informacin tabular y grca relativa al clculo del lmite

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 ==================

x 1,0 0,5 0,25 0,125 0,0625 0,03125 0,015625 1,0 = 1

0,8414709848079 0,95885107720841 0,98961583701809 0,99739786708182 0,99934908547808 0,99983724753043 0,99995931039254

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 ,

el cual permite generar el

(t) = (1 (t), 2 (t), 3 (t)) en a t b.

cvtu(list,t,tmin,tmax,n):= block([t0,T,P,objetos], define(a(t),list), define("a'"(t),diff(a(t),t)), t0:create_list(i*(tmax-tmin)/n,i,0,n), T:create_list(vector(a(i),"a'"(i)),i,t0), P:map(a,t0), objetos:flatten([


3 Este

ejemplo ha sido implementado por los autores.

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

( %i2) cvtu([cos(t),sin(t),t/8],t,0,4* %pi,10) $

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) .

( %i3) cvtu([2*cos(t)^2,sin(2*t),2*sin(t)],t,0,2* %pi,10) $

CAPTULO II ALGORITMOS PARA SOLUCIONAR INECUACIONES RACIONALES EN R

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.

2.1. Determinacin de los ceros de expresiones polinomiales


El primer paso a seguir en la obtencin del conjunto solucin de una inecuacin que involucran expresiones racionales es determinar los ceros (debe entenderse que aqu se trata de las races reales) de los polinomios del numerador y denominador.

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

2.3. Seleccin y anlisis de intervalos que satisfacen una inecuacin racional


Para implementar muchos de los pasos indicados en los algoritmos aqu presentados se utilizar programacin funcional para obtener el resultado esperado con el uso del comando

map,

evitando as el uso de la estructura de

19

control

for,

por ejemplo.

Algoritmo 2.3.1: Seleccin y anlisis de intervalos vlidos. Entrada: inecuacin y lista H


otra de signos. con dos sublistas, una de intervalos y

1 2 3 4

Salida: solucin de la inecuacin.


l nmero de elementos de H ; L ; Para i 1 para l tome aadir a L de la sublista de intervalos el elemento i, tal que el elemento i de la sublista signos corresponde con la desigualdad, > con + y < con

esto

5 6 7 8 9 10 11 12 13

n

eliminar los niveles de

Para i 1 para
eliminar de

L; l 1 tome i,
tal que

n

el elemento

Li = Li+1 L;

particionar de dos en dos los elementos a

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.

CAPTULO III IMPLEMENTACIN DEL PROGRAMA

INEQSOLVE

3.1. Codicacin del programa


head(expr):=block( if symbolp(expr) then symbol elseif numberp(float(expr)) then real elseif not freeof(%i,expr) then complex else part(expr,0) )$ val(expr):=block( if numberp(float(expr)) then expr else part(expr,1) )$ ceros(polinomio,x):=block([aux,raices:[]], if not freeof(x,polinomio) then ( aux:map(rhs,solve(polinomio,x)), raices:sublist(aux,lambda([h],head(h)=real)), if length(raices)=0

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],

[L1,L2]:[ceros(num(f),x),ceros(denom(f),x)], raices:sort( unique(append(L1, L2)),"<" ), raices:cons(minf,endcons(inf,raices)), intervalos:partir(raices),

22

signos:map(lambda([h],sgn(f,h)),intervalos),

objetivo:if(operador="<" or operador="<=") then "-" else "+", intervalidos: part(intervalos,sublist_indices(signos,lambda([h],objetivo=h))),

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),

aux:map(lambda([h],apply("=",h)),partir(signos)), cpar:map(last,part(intervalos,sublist_indices(aux,identity))), cpar_num:setdifference(setify(cpar),setify(L2)), cpar_den:setdifference(setify(cpar),cpar_num),

g:lambda([h,k],h[1]<k and k<h[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:{},

cpar_den:if operador="<" or operador=">" then union(cpar_num,cpar_den) else cpar_den,

cpar_restar:cpar_den, for i in cpar_den do( if not member(true,map(lambda([h],g(h,i)),intervalidos)) then cpar_restar:delete(i,cpar_restar) ),

g:lambda([h],if member(h,L2) or head(h)=symbol or operador="<" or operador=">" then Open(h) else h),

sol:apply(Interval,map( lambda([h], map(g,h)),intervalidos )),

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 )$

3.2. Creacin del archivo ineqsolve.lisp


save("d:/maximapackages/inecuaciones/inecuaciones.lisp", functions)$

3.3. Ejemplos ilustrativos


A continuacin se muestran varios ejemplos en los que se pone a prueba la funcionalidad del programa implementado. Note que para indicar un intervalo o una unin de intervalos se utiliza la funcin cierto intervalo es abierto en un extremo expresa mediante

Interval;

y para indicar que

a,

por ejemplo, dicho extremo se

Open(a). Los conjuntos, no obstante, se expresan entre llaves,

tal como se hace en la forma tradicional.

25

Maxima
Esto inicializa el programa implementado, ineqsolve.

( %i1) load("d:/maxpackages/inecuaciones/inecuaciones.lisp") $

Maxima
He aqu la solucin de x2 + 1 0.

( %i2) ineqsolve(x^2+1<=0,x); ( %o2) {}

Maxima
He aqu la solucin de x2 + 1 0.

( %i3) ineqsolve(x^2+1>=0,x); ( %o3) Interval ([Open () , Open ()])

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.

( %i5) ineqsolve((x^3+8)/(x-1)+x>=0,x); ( %o5) Interval [Open () ,


[Open (1) , Open ()])
211 2 3

227 54

1 3

+
9

4
211 227 54 2 3 1 3

1 3 ],

( %i6) float( %); ( %o6) Interval ([Open () , 2,584543980843393],


[Open (1,0) , Open ()])

Maxima
He aqu la solucin de
x+3 x1

x2 x6

0.

( %i7) ineqsolve((x-2)/(x-6)+(x+3)/(x-1)>=0,x); ( %o7) Interval [Open () ,


[Open (6) , Open ()])
413 ], [Open (1) , 2 41+3 ], 2

Maxima
He aqu la solucin de
x2 1 x+5

0.

( %i8) ineqsolve((x^2-1)/(x+5)<=0,x); ( %o8) Interval ([Open () , Open (5)], [1, 1])

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.

( %i11) ineqsolve(x^5-3*x+4>=0,x); ( %o11) Interval ([1,538335718666939, Open ()])

Maxima
He aqu la solucin de x 1 > 1/x.

( %i12) ineqsolve(x-1>1/x,x); ( %o12) Interval [Open


51 2

, Open (0)], [Open

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.

( %i14) ineqsolve(x^2*(x-1)^2<=0,x); ( %o14) {0, 1}

Maxima
He aqu la solucin de x2 (x 1)2 > 0.

( %i15) ineqsolve(x^2*(x-1)^2<=0,x); ( %o15) Interval ([Open () , Open ()]) {0, 1}

CONCLUSIONES

1. Este trabajo presenta el programa

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

para indicar que dicho extremo no forma

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

1. Se recomienda aplicar el programa y rango de ecuaciones de la forma

ineqsolve en la discusin del dominio


E(x, y).

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).

[2] Rodrguez, WARE

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).

[6] Rodrguez, M. MAXIMA: UNA HERRAMIENTA DE CLCULO. http://softwarelibre.uca.es/cursos/maxima/cadiz.pdf (2006).

Vous aimerez peut-être aussi