## Resolviendo problemas con Maxima

### Algunos problemas de cero de funciones (T. Bolzano y similares)

Ejemplo 1

define(f(x),x-sin(x)-1);

wxplot2d([f(x)], [x,-3,5])$

r:find_root(f(x), x, 1, 2);

f(r);

Ejemplo 2

remfunction (f);
define(f(x),%e^x+sin(x));

wxplot2d(f(x),[x,-15,2]);

r[1]:find_root(f(x), x, -2, 0);f(r[1]);

r[2]:find_root(f(x), x, -4, -2);f(r[2]);

r[3]:find_root(f(x), x, -8, -4);f(r[3]);

r[4]:find_root(f(x), x, -10,-8);f(r[4]);

r[5]:find_root(f(x), x, -14,-12);f(r[5]);

wxplot2d([f(x),sin(x)],[x,-15,2]);

makelist([r[k],float(-(k-1)*%pi), abs(r[k]-float(-(k-1)*%pi))  ],k,1,5);

for k:1 thru 5 do print( [k, r[k],float(-(k-1)*%pi), abs(r[k]-float(-(k-1)*%pi)) ]   );

remfunction (f);
define(f(x),x^(13)+12/(x^2+13+sin(x))-5);

wxplot2d([f(x)], [x,-1.3,1.3])$ /* HACER INTERVALO MÁS PEQUEÑO  [x,-.98,1.1] */;

wxplot2d([x^13-12/(x^2+13+sin(x))], [x,.8,1.1])$

r:find_root(f(x), x,0.8, 1.3);
f(r);

Ejemplo 3

remfunction (f);
define(f(x),log(x+1)-cos(x));

wxplot2d([f(x)], [x,-.5,3])$

r:find_root(f(x), x,0.5, 1.5);
f(r);

## El polinomio de Taylor

kill(all)$
define(f(x),exp(-x^2)*sin(x));

wxplot2d(f(x),[x,-5,5]);

pt(x,n):=ratexpand(taylor(f(x),x,0,n));

kk:5$ pt(x,kk); /* repetir para k=5,10,15,20,30*/
wxplot2d([f(x),pt(x,kk)],[x,-2,2]);

wxplot2d([f(x),pt(x,15)],[x,-2,2],[y,-.5,.5]);

load(draw)$ kill(k)$
retraso:20000$ /* Depende de la potencia del ordenador */
for k:0 thru 20 step 1 do
block([tiempo:1], while tiempo < retraso do tiempo: tiempo+1,
draw2d( line_width = 3,dimensions = [1000,800],grid = true,
key_pos = top_left, font = "Arial", font_size = 24,
color=black, key="f(x)", explicit(f(x),x,-2,2),
color=blue, key = concat("Pol. taylor de orden ",k),
explicit(pt(x,k),x,-2,2), yrange = [-0.5,.5]) )$

with_slider( kk , /* variable de cambio */
makelist(i,i,0,30,3), /* lista de valores de la variable */
[f(x),pt(x,kk)],[x,-2,2],[y,-0.5,.5], /* funciones y opciones */
[legend,"f(x)",concat("pol. Taylor orden ")])$

¦

Errores de la fórmula de Taylor

taylor(exp(x),x,0,10);

err(n):=3/n!;

makelist(float(err(k)),k,1,8);

tay(x,k):=ratexpand(taylor(exp(x),x,0,k));

tay(x,7); ee:ev(%,x=1);float(%e-%);

err2(n):=ee^2*2^n/n!;

makelist(float(err(k)),k,1,9);

tay(x,10); ee:ev(%,x=2);float(%e^2-%);

errsin(n):=1/2^n/n!;

makelist(float(errsin(k)),k,1,18);

taysin(x,k):=ratexpand(taylor(sin(x),x,0,k));

fpprec:25;

taysin(x,17); ee:ev(%,x=1/2);bfloat(sin(1/2)-%);

## Aplicaciones del Cálculo diferencial

### Derivando funciones y calculando extremos

Ejemplo 1 f(x)=sin((x+1)^2*(x+2))

kill(all)$
define(f(x),sin((x+1)^2*(x+2)));

wxplot2d(f(x),[x,-5,3],[y,-1.1,1.1]);

wxplot2d(f(x),[x,-3.5,0.5]);

plot2d(f(x),[x,-3.5,0.5]);

define(df1(x),diff(f(x),x));

factor(df1(x));

wxplot2d(df1(x),[x,-3.5,.5]);

realonly:true$
ratprint: false$
solve(df1(x),x)$ sol:float(%);

ratsimp(%);

define(df2(x),diff(f(x),x,2));

r:rhs(sol[3]); df2(r);

r:rhs(sol[4]); df2(r);

r:rhs(sol[5]); df2(r);

wxplot2d(df2(x),[x,-1,0]);

pi1:find_root(df2(x),x,-1,0);

diff(f(x),x,3);

ev(%,x=pi1);

Ejemplo 2

/*  Derivando funciones con valores absolutos */
wxplot2d(sin(abs(x)),[x,-6*%pi,6*%pi]);

diff(sin(abs(x)),x);
wxplot2d(%,[x,-4*%pi,4*%pi]);

Ejemplo 3: f(x)=x^x

kill(all)$
define(f(x),x^x);

f(0);

limit(x^x,x,0,plus);

/* redefiniendo en x=0 */
ff(x):= if equal(x,0) then 1 else x^x;

ff(1/2);ff(0);

wxplot2d(ff(x),[x,0,1]);

diff(f(x),x);
define(df(x),ratsimp(%));

sol:solve([second(%)=0], [x]);

factor(df(x));

rhs(sol[1]); float(%);

wxplot2d(df(x),[x,0.1,1]);

find_root(df(x),x,0.2,0.5);

diff(f(x),x,2);
define(df2(x),ratsimp(%));

wxplot2d(df2(x),[x,0.1,2]);

### Estudiando funciones

kill(all);

wxplot2d((x-3)^2*exp(abs(x)),[x,-1,4]);

diff((x-3)^2*exp(abs(x)),x);

df1:factor(%);

solve([%=0], [x]);

assume(x>0);

factor(df1);solve([%=0], [x]);

facts(x);

forget(x>0);facts(x);

assume(x<0);

factor(df1);solve([%=0], [x]);

wxplot2d(df1,[x,-1/2,3.5]);

forget(x<0);

diff((x-3)^2*exp(abs(x)),x,2);
define(df2(x),factor(%));

wxplot2d(df2(x),[x,-1/2,3]);

df2(1);

df2(3);

### Estudiando una función a trozos

kill(all);

h1(x):=x+sqrt(1+x^2) ; h2(x):=1/(1+(x*log(x))^2);

h(x):=if x<=0 then h1(x) else h2(x);

wxplot2d(h(x),[x,-5,5],[y,0,1.1],[ylabel,"h(x)"]);

wxplot2d(h(x),[x,-.15,0.1],[y,0.8,1.05],[ylabel,"h(x)"])$

Defininiendo la derivada por partes

dh(x):=diff(h(x),x);

define(dh1(x),ratsimp(diff(h1(x),x)));

define(dh2(x),ratsimp( diff(h2(x),x)));

define(dh(x),if x<=0 then dh1(x) else dh2(x));

dh(x);

assume(a<0)$ h(a);

assume(b>0)$ h(b);

wxplot2d(dh(x),[x,-4,4]);

Analizando el punto donde no es diferenciable

limit(dh1(x),x,0,minus);

limit(dh2(x),x,0,plus);

wxplot2d(dh(x),[x,-.1,.5],[y,-1,1.2],[ylabel,"h'(x)"]);

Rama negativa x<0

solve(dh1(x)=0,x);

/* Más fácil hacer a mano */
factor(dh1(x));

num(%);

first(%);

%^2-x^2;

Rama positiva x>0

factor(dh2(x));

sol:solve(dh2(x)=0,x);

define(der2(x),ratsimp(diff(dh2(x),x)));

ev(der2(x),sol[1]);float(%);

ev(der2(x),sol[2]);

Asíntotas

limit(h1(x) ,x,-inf);

limit(h2(x), x, inf);

Ejercicio: Calcula los puntos de inflexión

define(der1(x),ratsimp(diff(dh1(x),x)));

factor(der2(x));

solve(der2(x)=0,x);

wxplot2d(der2(x),[x,.05,2],[ylabel,"h'(x)"]);

p1:find_root(der2(x),x,0.2,1); der2(p1);

p2:find_root(der2(x),x,1,2); der2(p2);

p3:find_root(der2(x),x,.4,1); der2(p3);