UNIVERSIDAD DE SAN CARLOS
FACULTAD DE AGRONOMIA
FACULTAD DE CIENCIAS QUIMICAS Y FARMACIA
CURSO CORTO SOBRE “PAQUETE COMPUTACIONAL MAXIMA”
Ing. Agr. Luis Manfredo Reyes Chávez
DESCRIPCION:
El curso corto está dirigido a profesores y ayudantes de cátedra de los cursos de matemática y física de las facultades de Agronomía y Ciencias Químicas y Farmacia.
Las computadoras originalmente se crearon para auxiliar en las tareas de cálculo, pero con el tiempo fueron perdiendo ese fin para llegar finalmente al triste papel de “máquinas de escribir”. Sin embargo, actualmente existen varios paquetes computacionales de aplicación matemática, siendo el más importante por su condici{on de “Software libre” el Maxima . No se pretende en este curso corto sustituir el conocimiento ni la experiencia del profesor, sino más bien que este software sea un auxiliar o complemento de la labor docente.
NIVEL DEL CURSO: Introductorio
DURACION: 10 horas
REQUISITOS: Los participantes deben tener conocimientos avanzados de Microsoft Windows ®, así como dominar el álgebra, trigonometría, cálculo diferencial, cálculo integral y álgebra de matrices.
CONTENIDO:
- Aspectos introductorios: breve historia del origen de la computadora, Evolución de los lenguajes y paquetes matemáticos.
- Presentación del paquete Maxima, su origen y desarrollo, tipos de cálculos que se pueden realizar en Maxima
- Entrada al programa, ambiente de trabajo y utilización básica del paquete. Operadores aritméticos, convenciones y palabras reservadas.
- Aritmética con Maxima: operaciones básicas, potencias, raíces, funciones. Ejercicios
- Algebra con Maxima: operaciones con polinomios, productos notables, factorizacion, resolución de ecuaciones en forma numérica y simbólica
- Gráficas de funciones en Maxima: tipos de gráficas, especificaciones
- Cálculo diferencial
- Cálculo integral
- Ecuaciones diferenciales
INTRODUCCION:
“No es posible que los hombres de ciencia, en vez de dedicarse al desarrollo de nuevas técnicas y métodos, se tengan que consumir en las fatigas del cálculo, que podría encomendarse a cualquiera si para ello tuvieramos las herramientas necesarias”
Wilhelm Leibnitz
A lo largo de la historia, los científicos siempre han soñado con tener el auxilio de las máquinas para los tediosos cálculos que a veces se necesitan en el trabajo de cada día. Es por esto que se han hecho esfuerzos para desarrollar equipos que permitieran agilizar los cálculos numéricos. El dispositivo más antiguo que se puede mencionar es el ábaco, que se originó en china hace más de tres mil años.
Otros intentos interesantes al respecto, lo constituyen la “Pascalina” o sumadora mecánica de Pascal, los “Bastoncitos de Napier” y la “Máquina Calculadora” de Leibtnitz.
Respecto a la época moderna, se hicieron intentos para desarrollar equipos capaces de realizar con rapidez cálculos numéricos. El mérito más importante se le debe dar al Harvard Mark IV, equipo construido a base de relays en 1945.
Se considera como la primera computadora “electrónica” a la ENIAC, construida en 1946 por Prespert y Eckert. Esta máquina funcionaba a base de tubos de vacío (18,000 en total) y consumía una enorme cantidad de electricidad. Tanto ésta como la Mark IV fueron utilizadas para calcular trayectorias balísticas de proyectiles a ser lanzados por los norteamericanos contra el enemigo alemán en la segunda guerra mundial.
Fue hasta los años 60 en que IBM introdujo al mercado equipos accesibles a las grandes empresas (Sistemas /360), que las computadoras abandonaron las secretas salas de los militares y de algunas universidades, para empezar a ocupar un importante lugar en la sociedad. Lamentablemente, por sus elevados costos y lo complicado de su operación, siguieron por mucho tiempo siendo objetos casi “de culto”, al extremo de que se instalaban en cuartos con aislamiento especial, aire acondicionado y con personal de bata con categoría de gurús que se encargaban de utilizarlos.
Intentos serios de poner al alcance del pueblo la computadora fueron hechos, es así como surgieron: Sinclair, Atari, Commodore y Apple, que tuvieron el mérito de poner en las casas computadoras que aunque con capacidades limitadas, aceleraron el uso de estos equipos por los “no expertos”. Lamentablemente también, pronto se desviaron hacia el mundo de los negocios, la contabilidad y aspectos comerciales, olvidando la original razón de ser.
1983 marcó la diferencia final, cuando IBM finalmente lanzó al mercado su ahora legendaria IBM-PC. A partir de aquí, la computadora dejó de ser privilegio de pocos para pasar a ocupar su lugar definitivo en la historia. El desarrollo tecnológico de la computadora en los últimos años ha sido tan impresionante, que expertos opinan que si la industria automovilística hubiera tenido un desarrollo semejante, en la actualidad un Rolls Royce tendría un motor con un rendimiento de 200 km/litro de gasolina y un precio de 2 centavos de dólar.
En cuanto al soporte matemático, el software durante muchos años estuvo estancado en el lenguaje científico llamado FORTRAN. Junto con las primeras microcomputadoras apareció un lenguaje de programación llamado BASIC, que permitió un rápido desarrollo de programas para todo tipo de aplicaciones. Los paquetes específicos (Software enlatado) se pusieron de moda cuando salió al mercado la primera versión del VISICALC, la primera hoja electrónica de cálculo, que fue la antecesora de otras como LOTUS, MULTIPLAN y finalmente EXCEL.
Los paquetes matemáticos han tenido un desarrollo poco espectacular, sin embargo se pueden mencionar varios que han contribuido al desarrollo de éste campo: MathCad, Derive, Maxima y Maxima.
DESCRIPCION GENERAL DE MAXIMA
ORIGEN Y DESARROLLO
Maxima es un sistema de cálculo simbólico escrito originalamente en el lenguaje de programación Lisp. Maxima es un software que desciende del sistema original Macsyma, desarrollado en el MIT (Massachusetts Institute of Technology) entre los años 1968 y 1982 como parte de un proyecto llamado “MAC”.
El MIT otorgó una copia del código fuente al DOE (Department of Energy) en 1982, en una versión conocida como DOE-Macsyma.
Una de estas copias fue mantenida por el Profesor William F. Schelter de la Universidad de Texas desde el año 1982 hasta su fallecimiento en 2001.
En 1998 Schelter logró obtener el permiso del Departamento de Energía para distribuir el código fuente de DOE-Macsyma bajo la llamada licencia GNU-GPL, iniciando en el año 2000 el proyecto Maxima en SourceForge con el fin de mantener y seguir desarrollando DOE-Macsyma, ahora con el nombre de Maxima.
Maxima está dotado de amplio conjunto de funciones para hacer manipulación simbólica de polinomios, matrices, funciones racionales, integración, derivación, manejo de gráficos en 2D y 3D, manejo de números de punto flotante y grandes, expansión en series de potencias y de Fourier, entre otras funcionalidades.
Maxima funciona en modo consola, sin embargo incluye las intefaces gráficas xMaxima y wxMaxima para facilitar su uso.
El editor de texto científico GNU TeXmacs también puede ser usado para facilitar una interfaz gráfica de usuario para Maxima. Otras opciones son, imaxima, y el modo interactivo de Emacs. También puede hacer uso de la interfaz gráfica de SAGE, que facilita su integración con paquetes que funcionan como CAS (Computer Assistant Software).
Está escrito en Common Lisp por lo que es fácilmente accesible para la programación, desde la capa inferior de Lisp puede llamarse a Maxima.
Bajo los términos de la licencia GNU-GPL, máxima puede ser descargado, instalado y utilizado sin necesidad de pago alguno, siempre que no sea redistribuido en forma comercial.
Se considera que los paquetes comerciales más conocidos (Mathematica, Maxima, Matlab), son inspirados en el Macsyma.
AMBIENTE DE TRABAJO:
La forma más simple de usar Máxima es en modo consola, la cual tiene la siguiente estructura
Operando en modo consola, el usuario ingresa un comando y sus respectivos argumentos, debiendo al final colocar un punto y coma (;) y oprimir la tecla ENTER para que la orden sea ejecutada
En la consola aparece el símbolo (%I_ ) para indicar que es una entrada provista por el usuario, mientras que (%o __) representa una respuesta del sistema
En el modo consola se usa una impresión rústica, siendo acomodadas las expresiones en diferentes líneas para representar fracciones, potencias y otras.
OPERADORES ARITMÉTICOS:
Maxima reconoce los siguientes: +,-,*,/,( ) y ^, respetando la jerarquía usual de operación:
1. Paréntesis
2. Potencias
3. Producto y cociente
4. Adición y sustracción
Adicionalmente, se pueden usar los paréntesis como signos de agrupación.
Toda la expresión debe quedar en una sola línea
Ejemplos:
NOMBRES RESERVADOS:
En Maxima existen diferentes funciones y operadores que son reservados, es decir que no pueden usarse para otras operaciones. Ejemplos:
solve, sin, sqrt, expand
USO DE MAXIMA COMO CALCULADORA:
Maxima respeta la jerarquía usual de cálculos aritméticos (paréntesis, -potencias, producyo y cociente y por último adición y sustracción)
|
Para efectuar cálculos aritméticos en Maxima, se ingresa la expresión y se finaliza con punto y coma y se oprime ENTER para obtener el resultado. Ejemplos:
2.3 + 5.63;
2.4 / 8.9 ^ 2;
También es posible utilizar paréntesis para agrupar expresiones:
(3 + 4) ^ 2 – 2*(3 + 1)
Hay varias formas de ingresar datos en notación científica:
2.4 ^ 45
2.3*10^70
FUNCIONES MATEMATICAS:
Maxima incluye una enorme lista de funciones, pero las más importantes son las siguientes:
! Factorial de un número entero
exp(.....) antilogaritmo natural
log(.....) Logaritmo natural (el valor no puede ser cero ni negativo)
sqrt(....) Raíz cuadrada (el valor puede ser negativo o positivo)
sin(...) Seno (dato en radianes)
cos(...) Coseno (dato en radianes)
tan(...) Tangente (Dato en radianes)
sec(...) Secante (dato en radianes)
csc(...) Cosecante (dato en radianes)
asin(....) arcoseno (dato entre –1 y 1, respuesta en radianes)
acos(...) arcocoseno (dato entre –1 y 1, respuesta en radianes)
atan(...) Tangente inversa (respuesta en radianes)
asec(...) Secante inversa (respuesta en radianes)
acot(....) Cotangente inversa (respuesta en radianes)
Ejemplos
Log(8.4);
Sqrt(16);
Sqrt([2)
30!
Pi ^ 2
sin[%pi/2]
Sin(20)
Funciones Predefinidas
Aunque existen muchas, las más utilizadas son>
Al finalizar de ingresar una expresión con su respectiva operación, se agrega un punto y coma al final y se oprime la tecla ENTER para obtener la respuesta.
5. OPERACIONES ARITMETICAS
(con números reales o complejor)
> (1.5+2.5*I)^(3.5+4.5*I);
> (-8.)^(1/3);
Calcule el factorial de 100:
> 100!;
Calcule: (15000 x 0.0001)5
> (15000 * 0.0001)^5;
6. NOMBRES DE OBJETOS:
Se puede nombrar un objeto (ecuación o variable), colocando el nombre, seguido de dos puntos e igual.
Ejemplo:
> A : matrix([1,2,3],[1,3,0],[1,4,3]);
7. FACTORIZACION DE EXPRESIONES:
El comando es: factor(..........);
MAXIMA puede factorizar toda clase de polinomios de una o más variables Se debe entender que la factorización es en modo entero, es decir que x2-2, que en los reales se factoriza como
en los enteros es irreducible
Para ello, se coloca el polinomio a factorizar dentro de la orden factor ( ) , se agrega un punto y coma y se oprime la tecla ENTER
Ejercicios: Factorice los siguientes polinomios:
> factor(6*x^2+18*x-24);
> factor(x^3+y^3);
> factor(x^3+5.0);
> factor(x^3+5);
8. DESARROLLO DE PRODUCTOS
En MAXIMA se pueden desarrollar productos de polinomios de una o más variables, incluyendo productos notables.
El comando que se usa es: expand(……..);
Ejemplo: desarrolle (4x-1)3
> expand((4*x-1)^3);
Ejercicios: Opere las siguientes expresiones:
(x-2)4
> expand((x-2)^4);
(3x-2) (2x-4)
> expand((3*x-2)*(2*x-4));
(Sen x-Tan x)4
> expand((sin(x)-tan(x))^4);
9. SIMPLIFICACIÓN DE EXPRESIONES
MAXIMA tiene la capacidad de simplificar una expresión al máximo posible, también en modo entero. Para ello, se debe ingresar el comando ratsimp y la expresión a simplificar en paréntesis.
Si la expresión es muy larga o compleja, se puede almacenar en variables para facilitar el proceso.
Ejemplo: Simplifique:
> ratsimp((x^3-8)/(x-2));
Ejercicios: Simplifique:
> ratsimp((x^3+x^2-21*x-45)/(x^2-2*x-15)-(x^2-9)/(x^2-6*x+9)+(x+5)/(x^2+10*x+25));
> ratsimp((x-x^2/(x-1))/(1+1/(x^2-1)));
Fracciones Parciales
Reduzca a fracciones parciales:
Partfrac(-x/(x^3+4*x^2+5*x+2),x) ;
Respuesta:
2 2 1
(%o1) ----- - ----- + --------
x + 2 x + 1 2
(x+1)
10. SOLUCION DE ECUACIONES DE UNA VARIABLE
El software MAXIMA tiene la capacidad de resolver todo tipo de ecuación de una variable. Para ello, la ecuación se lleva a la forma f(x)=0, usando el comando SOLVE. MAXIMA calcula todas las soluciones posibles, incluyendo soluciones complejas.
Si la ecuación es muy larga o muy compleja, se puede almacenar en variables para faciltar el proceso
Ejemplos: Resolver x2+5x-6=0
> solve(x^2+5*x-6=0,x);
Resuelva: (X-1)(2X+2)=0
> solve((x-1)*(2*x+2)=0,x);
Ejercicios: Resuelva las siguientes ecuaciones
> solve(3*x/24-(2-x)/10=(5+x)/40-1/15,x);
> solve(sqrt(sqrt(x+4)-sqrt(x-2))-9=0,x);
> (no existe solución)
> solve(8*x^4-2*x^3+15*x^2-4*x-2=0,x);
(%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
3 5
(%o1) (2 x + 1) = 13.5 (x + 1)
(%i2) soln: allroots (eqn);
(%o2) [x = .8296749902129361, x = - 1.015755543828121,
También se puede usar el comando realroots: (se debe especificar una tolerancia, ya que se usan métodos numéricos).
(%i1) realroots (-1 - x + x^5, 5e-6);
612003
(%o1) [x = ------]
524288
11. SOLUCION DE SISTEMAS DE ECUACIONES
MAXIMA tiene la capacidad de resolver sistemas de ecuaciones por varios métodos, siendo el más fácil la función solve.
En este caso, lo conveniente es definir primero las ecuaciones, y luego invocar la función solve.
Ejemplo:
> solve([a*x+b*y=3], [x-y=b], [x,y]);
> solve([x+2*y=3],[ y+1/x=1], [{x,y]);
12. OPERACIONES CON MATRICES Y VECTORES
MAXIMA puede operar matrices en los casos más utilizados
Definición de una matriz:
> matrix([[1,2,3],[4,5,6]]);
Otra forma:
> < < 1 | 2 | 3 >, < 4 | 5 | 6 > >;
Inversa de una matriz:
> invert(matrix([a,c],[b,d]));
> invert(matrix([1,2,3,4],[2,3,4,0],[3,4,0,0],[4,0,0,0]));
Determinante de una matriz:
M: (matrix([a,0,0],[[b,c,0],[d,e,f]);
> determinant(M);
acf
Transpuesta de una matriz:
Transpose(M);
Producto punto de vectores:
> V1 : matrix([x,y,1,2]);
> V2 :matriz([3,4,5,6]);
> V1 . V2 ;
Producto Cruz:
> V1 : matrix([1,2,3];
> V2 : matrix([2,3,4]);
> CrossProduct(V1, V2);
13. LIMITES DE FUNCIONES
MAXIMA puede operar con los siguientes tipos de límites: por ambos lados (definición formal de límite), por la derecha, por la izquierda, en menos infinito y en más infinito.
Calcula el límite de expr cuando la variable real x se aproxima al valor val desde la dirección dir. El argumento dir puede ser el valor plus para un límite por la derecha, minus para un límite por la izquierda o simplemente se omite para indicar un límite en ambos sentidos.
Esta opción trabaja con límites que típicamente parecen no tener respuesta y produce la solución correcta, si existe. Por ejemplo, en el MAXIMAo de la conocida función f(x)=sen x /x cuando x tiende a cero, la solución es:
> limit(sin(x)/x, x,0,plus);
1
1
> limit(exp(x), x,inf,minus);
inf
inf
> limit(exp(x), x,minf);
0
0
> limit(1/x, x,0);
undefined
undefined
> limit(sin(x), x,0);
14. DERIVADAS DE FUNCIONES
MAXIMA puede determinar derivadas de funciones de una o varias variables para cualquier orden. Si no se especifica el orden, automáticamente se calcula la primera derivada.
> diff(sin(x),x);
cos x
cos x
> diff((exp(x)+cos(x)^2+Pi+tan(x),x);
exp (x)+tan2 x -2sinx.cosx
exp (x)+tan2 x -2sinx.cosx
> diff(log(x));
1/x
1/x
>diff(x^2+4*x+4,x,2); (segunda derivada)
2
15. DERIVADAS PARCIALES
En MAXIMA se pueden obtener derivadas parciales de funciones. Para ello, se usa la funciòn diff( ……)
> diff(x^2+y^2,x);
2x
2x
> diff(x^2+y^2,y);
2y
2y
> diff(3*x^2-8*y^4+2*x*y,y);
-32y^3+2x
-32y^3+2x
> diff(3*x^2-8*y^4+2*x*y,x);
6x+2y
6x+2y
16. ANTIDERIVADAS (INTEGRALES) DE FUNCIONES:
El Maxima puede obtener la antiderivada de una función, tanto en forma indefinida (el resultado es una función); en forma simbólica (una función en términos de otras variables) , como numérica (el resultado final es una cantidad).
> integrate( sin(x), x );
-cos x
-cos x
> integrate( sin(x), x,0,pi );
2
2
No todas las funciones tienen antiderivada!!!!!
17. GRAFICAS DE FUNCIONES DE UNA VARIABLE
En MAXIMA es posible graficar una o varias funciones, usando el comando
Plot2d( ), o plot3d
(%i1) plot2d (sin(x), [x, -5, 5])$
(%i2) plot2d (sec(x), [x, -2, 2], [y, -20, 20], [nticks, 200])$
Un ejemplo de una gráfica de una función paramétrica:
(%i8) plot2d ([parametric, cos(t), sin(t), [t,-%pi,%pi],
[nticks,80]], [x, -4/3, 4/3])$
Y otro con dos vueltas:
(%i9) plot2d ([parametric, cos(t), sin(t), [t, -%pi*2, %pi*2],
[nticks, 8]], [x, -2, 2], [y, -1.5, 1.5])$
Un ejemplo de una gráfica de barras:
%i1) xgraph_curves ([append (["BarGraph: true", "NoLines: true",
"BarWidth: .2"], create_list ([i - .2, i^2], i, 1, 3)),
append (["BarGraph: true", "NoLines: true", "BarWidth: .2"],
create_list ([i + .2, .7*i^2], i, 1, 3))]);
18. GRAFICAS DE FUNCIONES DE DOS VARIABLES
En MAXIMA es posible graficar funciones de dos variables, usando el comando
plot3d()
(%i7) plot3d (atan (-x^2 + y^3/4), [x, -4, 4], [y, -4, 4],
[grid, 50, 50], [gnuplot_pm3d, true])$
10. ECUACIONES DIFERENCIALES
La función desolve resuelve sistemas de ecuaciones diferenciales ordinarias lineales utilizando la transformada de Laplace. Aquí las eqi (i=1,..,n) son ecuaciones diferenciales con variables dependientes x_1, ..., x_n. La dependencia funcional de x_1, ..., x_n respecto de una variable independiente, por ejemplo x, debe indicarse explícitamente, tanto en las variables como en las derivadas. Por ejemplo,
eqn_1: 'diff(f,x,2) = sin(x) + 'diff(g,x);
eqn_2: 'diff(f,x) + x^2 - f = 2*'diff(g,x,2);
no es el formato apropiado. El método correcto es
eqn_1: 'diff(f(x),x,2) = sin(x) + 'diff(g(x),x);
eqn_2: 'diff(f(x),x) + x^2 - f(x) = 2*'diff(g(x),x,2);
La llamada a la función desolve sería entonces
desolve([eqn_1, eqn_2], [f(x),g(x)]);
Si las condiciones iniciales en x=0 son conocidas, deben ser suministradas antes de llamar a desolve haciendo uso previo de la función atvalue,
'diff(f(x),x)='diff(g(x),x)+sin(x);
d d
(%o1) -- (f(x)) = -- (g(x)) + sin(x)
dx dx
(%i2) 'diff(g(x),x,2)='diff(f(x),x)-cos(x);
2
d d
(%o2) --- (g(x)) = -- (f(x)) - cos(x)
2 dx
dx
(%i3) atvalue('diff(g(x),x),x=0,a);
(%o3) a
(%i4) atvalue(f(x),x=0,1);
(%o4) 1
(%i5) desolve([%o1,%o2],[f(x),g(x)]);
x
(%o5) [f(x) = a %e - a + 1, g(x) =
x
cos(x) + a %e - a + g(0) - 1]
(%i6) [%o1,%o2],%o5,diff;
x x x x
(%o6) [a %e = a %e , a %e - cos(x) = a %e - cos(x)]
La función ode2 resuelve ecuaciones diferenciales ordinarias de primer y segundo orden. Admite tres argumentos: una ecuación diferencial ordinaria ecu, la variable dependiente dvar y la variable independiente ivar. Si ha tenido éxito en la resolución de la ecuación, devuelve una solución, explícita o implícita, para la variable dependiente. El símbolo %c se utiliza para representar la constante en el caso de ecuaciones de primer orden y los símbolos %k1 y %k2 son las constantes de las ecuaciones de segundo orden. Si por cualquier razón ode2 no puede calcular la solución, devolverá false, acompañado quizás de un mensaje de error. Los métodos utilizados para las ecuaciones de primer orden, en el orden en que se hace la tentativa de resolución son: lineal, separable, exacto (pudiendo solicitar en este caso un factor de integración), homogéneo, ecuación de Bernoulli y un método homogéneo generalizado. Para las ecuaciones de segundo orden: coeficiente constante, exacto, homogéneo lineal con coeficientes no constantes que pueden ser transformados en coeficientes constantes, ecuación equidimensional o de Euler, método de variación de parámetros y ecuaciones exentas de las variables dependientes o independientes de manera que se puedan reducir a dos ecuaciones lineales de primer a ser resueltas secuencialmente. Durante el proceso de resolución de ecuaciones diferenciales ordinarias, ciertas variables se utilizan con el único propósito de suministrar información al usuario: method almacena el método utilizado para encontrar la solución (como por ejemplo linear), intfactor para el factor de integración que se haya podido utilizar, odeindex para el índice del método de Bernoulli o el homogéneo generalizado y yp para la solución particular del método de variación de parámetros.
A fin de resolver problemas con valores iniciales y problemas con valores en la frontera, la función ic1 está disponible para ecuaciones de primer orden y las funciones ic2 y bc2 para problemas de valores iniciales y de frontera, respectivamente, en el caso de las ecuaciones de segundo orden.
Ejemplo:
(%i1) x^2*'diff(y,x) + 3*y*x = sin(x)/x;
2 dy sin(x)
(%o1) x -- + 3 x y = ------
dx x
(%i2) ode2(%,y,x);
%c - cos(x)
(%o2) y = -----------
3
x
(%i3) ic1(%o2,x=%pi,y=0);
cos(x) + 1
(%o3) y = - ----------
3
x
(%i4) 'diff(y,x,2) + y*'diff(y,x)^3 = 0;
2
d y dy 3
(%o4) --- + y (--) = 0
2 dx
dx
(%i5) ode2(%,y,x);
3
y + 6 %k1 y
(%o5) ------------ = x + %k2
6
(%i6) ratsimp(ic2(%o5,x=0,y=0,'diff(y,x)=2));
3
2 y - 3 y
(%o6) - ---------- = x
6
(%i7) bc2(%o5,x=0,y=1,x=1,y=3);
3
y - 10 y 3
(%o7) --------- = x - -
No hay comentarios:
Publicar un comentario