# Práctica 3: La integral de Riemann

## Sumas de Riemann:

kill(all);

Definimos la función de la cual queremos calcular las sumas de Riemann 

f(x):= x^2-5*x+10;

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

Creamos la partición, que en este caso, por sencillez, es una partición regular:

a:-2;b:5;n:10;
h: (b-a)/n;

Se puede definir dicha partición como una sucesión:

x(k):= a+k*h;

makelist(x(k),k,0,n);

Ahora tenemos que sumar las areas de los rectángulos de Riemann.

La suma por la izquierda:

sum(h*(f(x(k))),k,0,n-1),numer;

La suma por la derecha:

sum(h*(f(x(k))),k,1,n),numer;

que vamos a comparar con el valor exacto de la integral definida en el intervalo [a,b]:

integrate(f(x),x,a,b),numer;

*** CODIGO PARA DIBUJAR LOS RECTANGULOS ***

Ahora dibujamos los rectangulos en el intervalo [a,b] con anchura h = (b-a)/n.

partition:makelist(x(k) ,k,0,n),numer$

Para dibujar los rectangulos utilizaremos cada valor dos veces, salvo los valores extremos del intervalo.

partition2:join(partition,partition)$

Quitar unos de los valores del punto extremo desde la izquierda del intervalo. 

xrect:delete(partition2[1],partition2,1)$

Quitar unos de los valores del punto extremo desde la derechia del intervalo. 

xrect:delete(xrect[length(xrect)],xrect,1)$

Como en la suma anterior evaluamos las valores de la funcion f() desde la izquierda:

left:makelist(f(x(k)),k,0,(n-1))$

Utilizamos los valores tanto para la esquina derecha del cuadrado n-1 como para la esquina izquierda del cuadrado n: Doblamos la lista "left". 

yleft:join(left,left)$

De la misma metoda construimos las coordinadas de las cuadradas de la suma derecha. 

right:makelist(f(x(k)),k,1,n);

yright:join(right,right);

*** FIN DEL CODIGO PARA DIBUJAR LOS RECTANGULOS ***

Dibujamos los rectángulos de la suma izquierda:

wxplot2d([[discrete,xrect,yleft],f(x)],
    [x,a,b],
    [style,lines],[title,"Suma por la izquierda"],[legend, "Rectángulos de la suma izquierda","f(x)"]);

Dibujamos los rectángulos de la suma derecha:

wxplot2d([[discrete,xrect,yright],f(x)],
    [x,a,b],
    [style,lines],[title,"Suma por la derecha"], [legend, "Rectángulos de la suma derecha","f(x)"]);

Aumentando el numero de intervalos de la partición, la aproximacion será cada vez mas precisa.

## Integral indefinida & Teorema fundamental del cálculo:

Maxima calcula tanto integrales indefinidas como integrales definidas con la misma función ("integrate"). 
La diferencia está en si se especifican o no los intervalos de integración.

kill(all);

integrales inmediates:

integrate(x^n,x);

Ejemplo: integrales racionales:

integrate(1/(x^2-1),x,2,5);

Otra:

f1(x):= 1/((x^2 + x + 1)*(x^2 + 1));

integrate(f1(x),x);

Ejemplo: integral trigonométrica:

f2(x):= (sin(x)+1)/(cos(x)-1);

integrate(f2(x),x);

## Integral de Area entre el eje X y una función f(x):

kill(all);

Queremos calcular la área encerrada por la curva f(x)=x^2-5 x y el eje X.

f(x):=x^2-5*x;

wxplot2d([f(x),0], [x,-1,8])$

Hallamos los puntos de interseción de la función f(x) y el eje X (la función g(x) = 0). 

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

Aplicamos la integral definida entre los puntos de intersección. 
Como podemos ver en la gráfica la eje X está encima de la función f(x). Por lo tanto integramos la expresion 0 - f(x).

integrate(0-f(x),x,0,5),numer;

Otro metodo para hallar los puntos de interseción es aplicar la función find_root. 
Los dos ultimos valores indican el intervalo en donde las raíces deben ser encontrados. 

x1:find_root(f(x),-1,1);

x2:find_root(f(x),4,6);

integrate(0-f(x),x,x1,x2),numer;

## Plots parametricos

kill(all);

Una curva parametrica en dos dimensiones.

x(t):= cos(t);

y(t):= sin(t);

wxplot2d([parametric, x(t),y(t)],[t, 0, 2*%pi], same_xy);

Para una curva paramétrica en tres dimensiones deberemos especificar la parametrizacion de la tercera dimension.

z(t):= t;

La syntaxis para un dibujo parametrico en tres dimensiones es la siguiente: 

plot3d([x(t),y(t),z(t)],
     [t,0,2*%pi],[z,0,20])$

Una superficie en tres dimensiones se puede parametrizar con dos variables. 
En el siguente ejemplo dibujamos un cono de altura 2 y radio 2. 

x(r,t):= r;

y(r,t):= r*cos(t);

z(r,t):= r*sin(t);

plot3d([x(r,t),y(r,t),z(r,t)], [r, 0, 2], [t, 0, 2*%pi], 
        [x,-1,3],
        same_xyz,
        [mesh_lines_color,blue],
        [palette,[gradient,"#1b1b4e", "#8c8cf8"]], [legend, false])$

Observa que este cono se puede ver como una curva recta (f(x) = x) girado por el eje X.

## Integrales de Volumenes, presentación del superficie del volumen. 

kill(all);

f(x):= x^(1/2);

wxplot2d([f(x)],[x, 0, 4]);

El volumen V engendrado por la curva f(x) entre x=0 y x=4, al girar alrededor del eje X viene dado por:

integrate(%pi*f(x)^2,x,0,4);

Lo cual se puede ver como una suma de areas (A = Pi*f(x)^2) de discos con radios f(x)
multiplicado por su infinitesemal anchura (dx) en el intervalo [0,4]. 

La superficie S del volumen V se puede pintar con la siguiente parametrizacion:

x(r,t):=r;

y(r,t):= f(r)*cos(t);

z(r,t):= f(r)*sin(t);

plot3d ([x(r,t),y(r,t),z(r,t)], [r, 0, 4], [t, 0, 2*%pi], [x,-1,5],same_xyz,
  [mesh_lines_color,blue],
  [palette,[gradient,"#1b1b4e", "#8c8cf8"]], [legend, false])$

Extras. Algunas superficies en paramétricas de ejemplo:

plot3d([cos(t)*(2+(1/2)*cos(u)),sin(t)*(2+(1/2)*cos(u)), (1/2)*sin(u)], [t,0,2*%pi], [u,0,2*%pi])$

plot3d([sqrt(1-0.25*cos(10*t)^2)*cos(t), sqrt(1-0.25*cos(10*t)^2)*sin(t), 0.5*cos(10*t)], [t,0,2*%pi], [y,-5,5], [grid,500,1])$

plot3d([cos(t), sin(t), t], [t,0,6*%pi], [u,-5,5])$