Sunteți pe pagina 1din 10

Outline Funciones y programas

Funciones y programas

J. Ram rez, M.S. Bruzn o

Maxima

Outline Funciones y programas

Todo programa tiene una introduccin de datos, un clculo o a intermedio y una salida de los resultados. Los datos pueden incorporarse al programa o ya estar en alguna variable denida antes en Maxima. La forma ms fcil de escribir programas dentro Maxima es a a a travs de funciones o bloques, por ejemplo, suma(x,y):=x+y; e crea una funcin que devuelve la suma de los argumentos, o para usarla puedes hacer suma(1,2); que devuelve 3.
Para denir funciones se utiliza := por ejemplo, (x,y):=sqrt(x 2+y 2); hace que (1,-1) sea 2 si queremos que el cuerpo de la funcin sea una sucesin de expresiones se o o hace f(x):=(expr1,expr2,...,exprn); y se devuelve la ultima. Es una buena costumbre, al empezar a programar, que antes de denir una funcin de nombre (el que sea), la borres con o kill(nombre) (el que sea) as evitas que haya deniciones anteriores de la funcin, con dispfun(all); puedes ver las o deniciones de las funciones que has hecho.
J. Ram rez, M.S. Bruzn o Maxima

Outline Funciones y programas

Es muy importante que los programas estn documentados e con comentarios situados entre /* */ por ejemplo /* aqu dentro est el comentario*/ para que se comprenda lo a que hacen y cmo lo hacen. Por supuesto los comentarios no o afectan a lo que hace el programa sino le facilitan la vida al usuario o al programador. En un programa block se pueden utilizar variables locales que no intereren con el resto de Maxima, esto es importante para no machacar los valores externos si la variable se llama igual que otra denida fuera. Los programas de Maxima devuelven usualmente la ultima instruccin realizada, por lo que si alguna vez vamos a usar la o salida de un programa como entrada de otro (o del mismo) y se necesitan varios datos de entrada es posible que tengamos que poner la entrada y la salida del programa como una lista de valores.
J. Ram rez, M.S. Bruzn o Maxima

Outline Funciones y programas

Las estructuras bsicas de programacin son: a o Los condicionales, si una condicin es cierta se realiza algo y o si no es cierta se hace otra cosa (o nada). Por ejemplo, para calcular el valor absoluto de un nmero, si el nmero es menor u u que cero se devuelve el nmero con el signo cambiado y si no u el nmero como estaba. u
if cond then expresin1 else expresin2 es la forma de los o o condicionales, si la condicin es cierta se realiza la expresin1, o o si no lo es la expresin2. Por ejemplo, o absoluto(x):=if x>0 then x else -x; devuelve |x|. La parte else expresin2 es optativa. Los o condicionales pueden ponerse dentro de otros condicionales, los relaciones son >, <, <=, and, or , not, equal...

J. Ram rez, M.S. Bruzn o

Maxima

Outline Funciones y programas

Otra estructura bsica de programacin son los bucles, a o consisten en repetir un mismo proceso un nmero jo de u veces, o aplicarlo mientras se cumple una condicin o bien o aplicarlo a todos los elementos de una lista. Intuitivamente escribir la tabla de multiplicar del 5 equivale a multiplicar por 5 los nmeros 1, 2, 3, ...10 as que podemos u hacer que una variable (pongamos que se llama i) tome los valores del 1 al 10 de uno en uno.

J. Ram rez, M.S. Bruzn o

Maxima

Outline Funciones y programas

En Maxima hay varias formas de bucles, entre ellas: for var:varini thru vnal step inc do cuerpo; si inc vale 1 puede eliminarse; en cuerpo pueden ponerse varias instrucciones de Maxima separadas por , y metidas en un parntesis. e Por ejemplo, for i:1 thru 10 step 2 do print(i vale ,i); escribe i vale 1, i vale 3, ... hasta i vale 9 for j:1 thru 10 do print(5 por ,j, vale ,5*j); escribe la tabla de multiplicar del 5. for j:1 thru 10 do (print(5 por ,j, vale ),print(5*j)); hace casi lo mismo (el producto lo escribe en otra l nea) con dos instrucciones print. suma:0; for i:1 thru 100 do suma:suma+i; acumula en la variable suma el valor de 1+2+3+....100 for var in lista do cuerpo por ejemplo, for i in [1,2,3,4] do print(el cuadrado de , i, es ,i 2); escribe los elementos de la lista y sus cuadrados.
J. Ram rez, M.S. Bruzn o Maxima

Outline Funciones y programas

while cond do cuerpo se ejecuta el cuerpo mientras que la condicin sea cierta, o por ejemplo, suma:0;i:1;while i<10 do (suma:suma+i,i:i+1); guarda en la variable suma 1+2+...+9=45, observa que no escribe el resultado y que tenemos que cambiar el valor de i dentro del cuerpo, si no podemos entrar en un bucle que no termine nunca. Es util usar block para crear subrutinas, de esta forma se pueden usar variables locales que no intereren con las variables que usemos fuera ejemplo f(x):=block([lista de variables locales, si es preciso asignadas],cuerpo); por ejemplo, media(x,y):=block([xm:(x+y)/2],xm); devuelve la media aritmtica de x,y usando una variable local que llamamos xm. e Tambin pod e amos hacer media(x,y):=(x+y)/2;
J. Ram rez, M.S. Bruzn o Maxima

Outline Funciones y programas

Maxima evala una o dos veces las sentencias (busca ev en la u ayuda o en el manual para ms precisin), en cambio otros a o programas de Clculo simblico (Maple,Mathematica) evalan a o u las sentencias hasta que no hay cambios, esto hace que los procedimientos no sean idnticos. e Prueba a escribir kill(all); /* Para eliminar todas las asignaciones */ a:b; b:c; c:d; d:1; /*si haces ahora c; veras que tiene el valor d pero no lo que d vale que es 1, ev(b); te da d es decir ev evalua un nivel ms a hacia dentro, si quieres evaluar un nivel ms haz ev(b,ev); que a te dar d, nalmente ev(a,infeval); o equivalentemente a a,infeval; evala hasta que no hay cambios es decir hasta el u valor 1, por supuesto ev(x,x=x+1,infeval) genera un bucle sin n, comprubalo */ e
J. Ram rez, M.S. Bruzn o Maxima

Outline Funciones y programas

Ejercicios.

Dene una funcin que valga 1 para x < 1 y x 2 para o 1 x < 2, dibjala en [-5,5]. (Ayuda: usa un condicional, u por ejemplo if x < 1 then 1 else x 2 ) Dene una funcin que valga 1 para x < 1, x 2 para o 1 x < 2 y x 2 para x 2, dibjala. (Ayuda: usa dos u condicionales, por ejemplo, if x < 1 then 1 else (if x < 2 then x 2 else x 2) )

J. Ram rez, M.S. Bruzn o

Maxima

Outline Funciones y programas

Dene una funcin que calcule el factorial de un nmero a o u partir de un bucle (Ayuda, 10!=1*2*3*..*9*10, haz que prod valga 1 y acumula en prod el producto 1*2*...*9*10). Una aproximacin a la derivada de f en x esta dada por o f (x+h)f (xh) con h pequeo. Dene una funcin que tenga n o 2h como entradas x, h y devuelva la aproximacin de la derivada o de la funcin exponencial con esos valores de x, h; elige x = 1 o y h = 1., 10.3 , 10.6 , 10.12 , 10.18 , 10.24 e interpreta los resultados.

J. Ram rez, M.S. Bruzn o

Maxima

S-ar putea să vă placă și