• No se han encontrado resultados

MAPLE como lenguaje de programación

N/A
N/A
Protected

Academic year: 2020

Share "MAPLE como lenguaje de programación"

Copied!
9
0
0

Texto completo

(1)

LABORATORIO 5 MATEMATICAS V

MAPLE COMO LENGUAJE DE PROGRAMACIÓN.

Muchos de los comandos y funciones de MAPLE permiten resolver de manera directa bastantes problemas y aplicaciones en distintos campos de las matemáticas o de la física. MAPLE dispone de un conjunto de sentencias y estructuras similares a las de un lenguaje de programación.

La utilización de estas sentencias permite construir procedimientos propios por parte del usuario.

SENTENCIA CONDICIONAL: if.

Se utiliza cuando es necesario que un proceso se realice sólo cuando se cumplan una o varias condiciones. La sintaxis es de la forma:

Si condición entonces acción a realizar.

En MAPLE se escribiría:

if condición then acción fi;

La sentencia if admite que se establezca la acción que se realizará cuando no se cumpla la condición establecida, siendo la sintaxis:

if condición then acción_verdadera else acción_falsa fi;

donde acción_verdadera se realizará cuando la condición sea cierta, y acción_falsa se realizará en caso contrario.

EJEMPLO: Definir un procedimiento que asigne a cada valor de la varible x su cuadrado, tomando sólo los valores en el conjunto de los números enteros.

> cuadrado:=proc(x)

> options operator,arrow;

> if frac(x)=0 then x^2 else `No definida para`,x fi > end:

> cuadrado(1/2);

Cuando las acciones que van a realizarse tienen una sintaxis más extensa o están

compuestas por más de una sentencia, se utilizarán varias líneas para expresar la estructura condicional:

if condición then

acción_verdadera else

acción falsa fi;

Las sangrías que aparecen no son necesarias, pero facilitan la legibilidad de los procesos construidos.

CONDICIONES COMPUESTAS: OPERADORES LÓGICOS.

(2)

porque ser una condición simple, pudiendo incluirse condiciones compuestas con ayuda de los operadores lógicos.

Los operadores lógicos disponibles son: and, or y not (y, o, no, respectivamente). El ejemplo anterior se puede modificar para restringir la función cuadrado a un dominio formado por los números naturales.

> cuadradonat:=proc(x) > options operator,arrow;

> if frac(x)=0 and x>=0 then x^2 else `No definida para`,x fi > end:

> cuadradonat(-5);

La sentencia if puede emplearse para construir funciones definidas a trozos. Realizar la gráfica de la función:

> f:=x->if x<1 then sin(x) else x+1/x fi; > plot(f,-5..5);

Se puede observar que la selección LINE está seleccionada por defecto, lo cual permite que se unan los dos extremos de los trozos de gráfica; para evitar esta acción se añade la opción discont=true.

> plot(f,-5..5,discont=true);

La estructura condicional admite que puedan incluirse múltiples condiciones y varias acciones asociadas a cada una de ellas. En este caso,escribiremos:

if condición_1 then acción_1 elif condición_2 then acción_2 ...

...

elif condición_k then acción_k else acción_falsa

fi;

donde acción_i( i = 1,2,...,k) se realiza cuando sea cierta condición_i, y acción_falsa se realizará cuando no se haya cumplido ninguna de las condiciones anteriores.

Las estructuras if pueden anidarse, es decir, la acción a realizar puede ser, a su vez, una nueva estructura condicional.

Definir y representar la función:

utilizando una estructura condicional múltiple:

> g:=x->if x<=-1 then 1+x > elif x<2 then x^2-1 > else 10+x+x^2

> fi;

(3)

SENTENCIA DE ITERACIÓN: for

Para repetir un proceso un número determinado de veces, se utiliza la sentencia for cuya sintaxis es:

for var from inicio by cambio to final do

acciones a realizar od;

en la que cada una de las variables utilizadas tiene el siguiente significado:

var: variable índice que irá aumentando o disminuyendo conforme se ejecuta el proceso expresado por las acciones a realizar.

inicio: valor inicial que tomará la variable var para comenzar las iteraciones. cambio: valor que se añadirá o restará a la variable var después de cada iteración. final: valor final que determina la conclusión del proceso, que se producirá cuando la variable var iguale osupere a este valor.

acción(es) a realizar: conjunto de sentencias que se ejecutarán para cada uno de los valores que irá tomando la variable var.

Cuando se omite la variable cambio, por defecto asumirá el valor 1. EJEMPLO: obtener los múltiplos de 7 menores que 100:

> for n from 0 by 7 to 100 do n od;

EJEMPLO:Obtener los cincuenta primeros números primos:

> for i from 1 to 50 do ithprime(i) od;

Los bucles formados con las estructurasdel tipo for pueden anidarse, como en el siguiente ejemplo:

EJEMPLO: Definir una matriz de dimensiones 10 x 15 cuyos elementos se obtengan a partir de la siguiente ley:

.

En primer lugar se declara la matriz utilizando el comando array.

> A:=array(1..10,1..15); > for i from 1 to 10 do

> for j from 1 to 15 do A[i,j]:=j-i od > od;

> print(A);

SENTENCIA DE ITERACIÓN SEGÚN UNA CONDICIÓN: while

(4)

Para realizar un proceso mientras sea cierta una condición, se utilizará la sentencia while, cuya estructura es la siguiente:

while condición

do accion(es) a realizar od;

donde la acción o las acciones se realizarán mientras condición sea cierta.

EJEMPLO: Hallar el menor número de números primos cuya suma sea mayor que 1000. El proceso que se deba realizar consiste en ir sumando los sucesivos números primos hasta obtener un valor de la suma mayor que 1000.

Para este cálculo se desconoce el número de veces que se repitirá el proceso de sumar un número primo, por lo que es necesario utilizar una estructura de tipo while.

Se debe inicializar la variable suma (valor inicial cero) y la variable que irá recorriendo la sucesión de números primos.

> suma:=0;i:=1;

> while suma<1000 do

> suma:=suma+ithprime(i); > i:=i+1;

> od;

> print(i,`numeros primos`); > print(`La suma es: `,suma);

COMANDO: readstat

> plotdiff:=proc() > local yp,tr;

> yp:=readstat("Por favor digite una función: "); > tr:=diff(yp,x);

> a:=readstat("Digite el límite inferior:"); > b:=readstat("Digite el límite superior:");

> plot([yp,tr],x=a..b,title=`GRÁFICA DE LA FUNCIÓN Y SU DERIVADA`);

> end:

Warning, `a` is implicitly declared local

> plotdiff();

Por favor digite una funci363n: sin(x); Digite el l355mite inferior:-Pi;

Digite el l355mite superior:Pi;

EJEMPLOS VARIOS

MAYOR COEFICIENTE.

(5)

de los coeficientes resulte ser el mayor.Un procedimiento para hallarlo sería:

> HGHT:=proc(p::polynom,x::name) > local i,c,height;

> height:=0;

> for i from 0 to degree(p,x) do > c:=coeff(p,x,i);

> height:=max(height,abs(c)); > od;

> height; > end:

Hallar el mayor coeficiente de se calcularía:

> p:=-18*x^5+45*x^4+14*x^3-59*x^2+35*x-23;

> HGHT(p,x);

INTEGRACIÓN POR PARTES

Maple es una poderosa herramienta para evaluar integrales indefinidas. En este aparte se verá como se puede escribir un procedimiento para integrar fórmulas de la forma

p(x)f(x)

en donde p(x) es un monomio y f(x) es una función especial, específicamente para éste caso:

> IntExpMonomial:=proc(n::nonnegint,x::name) > if n=0 then RETURN(exp(x)) fi;

> x^n*exp(x)-n*IntExpMonomial(n-1,x); > end:

Para integrar se escribe el exponente de la variable y la variaable.

> IntExpMonomial(4,x);

TECNICA DE REDONDEO. (Burden).

La aritmética de redondeo se efectua facilmente en Maple. El comando Digits:=t

hace que todas las operaciones sean redondeadas a t digitos. Por ejemplo, fl(fl(x)+fl(y)) se efectua usando la aritmética de redondeo t dígito por medio de

evalf(evalf(x)+evalf(y));

(6)

> chop:=proc(X,t) > if X=0 then 0 > else

> e:=trunc(evalf(log10(abs(X)))); > if abs(X)>1 then e:=e+1 fi;

> x2:=evalf(trunc(X*10^(t-e))*10^(e-t); > fi;

> end:

`;` unexpected

> chop(124.031,5);

COMANDOS IQUO E IREM

iquo(x,y) es un comando de Maple que arroja el cociente de x entre y. > iquo(20,3);

irem(x,y) es un comando que arroja el residuo de x entre y.

> irem(8,3);

EJERCICIOS

Cree un archivo llamado TALLERLVMN6 en donde desarrolle procedimientos

interactivos, es decir que pida al usuario los datos necesarios para poder ejecutarlos, así como hacerle notar el resultado. En el encabezamiento del taller junto a su nombre o su código, escriba su estatura.

EJERCICIO 1

EJERCICIO 2

EJERCICIO 3

a) Al procedimiento chop le hace falta un elemento en su sintaxis para funcione adecuadamente, escríbaselo.

b) Con el procedimiento correcto y modificado obtenga los valores (tomado de Burden, página 30, sexta edición):

i) X = 124.036, t = 5

ii) X = -124.036, t = 5

(7)

iv) X = -0.00656, t = 2

EJERCICIO 4.

La ley de gravitación universal de Newton dice, en términos matemáticos:

F = G

m1 + m2

d2

Realice un procedimiento que le permita hallar: 1. La fuerza de gravedad entre dos objetos.

2. La fuerza de gravedad entre dos bolas de bolos, cada una de 25/3 kg de masa, con sus centros separados 0.37 cm.

3. La fuerza gravitatoria entre Usted y un compañero de masa 75 kg.

EJERCICIO 5.

Explique que hace el siguiente procedimiento. > dividirpor2:=proc(n::posint) > local q;

> q:=n;

> while irem(q,2)=0 do > q:=iquo(q,2);

> od; > q; > end:

> dividirpor2(24); > dividirpor2(104);

EJERCICIO 6.

El comando de Maple add(n,n = 1..100); arroja la suma de los primeros n naturales. El siguiente proceso suma los primeros n números naturales. Analícelo.

> SUM:=proc(n)

> local i,total; > total:=0;

> for i from 1 to n do > total:=total+i; > od;

> total; > end:

Empleando el proceso se puede calcular la suma de los primeros 100 números

> SUM(100);

(8)

en donde n < m y n diferente de cero, para hallar la suma de los naturales entre 425 y 505.

EJERCICIO 7.

Observe los siguientes son ejemplos:

a) VALOR ABSOLUTO. > ABS:=proc(x)

> if type(x,numeric) then > if x<0 then -x else x fi; > else

> 'abs'(x); > fi;

> end:

> ABS(-8);

b) ASIGNACION DE VALORES FUNCIONALES PARA INTERVALOS DADOS. Dada la función se crea un programa que arroje los valores funcionales pedidos.

> HAT1:=proc(x)

> if type (x,numeric) then > if x<=0 then 0;

> elif x<= 1 then x; > elif x<=2 then 2-x; > else 0;

> fi; > else

> 'HAT'(x); > fi;

> end:

> HAT1

Modifique el anterior programa para hallar los valores funcionales de:

Halle mediante el programa: f (-11/2), f ( - 3 ), f (10/3) y f (2 π +e).

c.Modifique el anterior programa para hallar la gráfica de la segunda función HAT(x).

EJERCICIO 8.

(9)

El comando nops (x), devuelve el número de datos.

El comando X[n] devuelve el dato ubicado en la posición n.

> X:=[10,15,12,23,35,50,58];

> nops(X);

> X[5];

Un proceso para hallar el promedio aritmético es :

> average:=proc(X::list) > local n,i,total; > n:=nops(X);

> if n=0 then ERROR ("empty list") fi; > total:=add(i,i=X);

> total/n; > end:

> average(X);

Para este ejercicio el trabajo a realizar es:

a) Cree una lista con la estatura en cm de 20 compañeros. b) Halle el promedio aritmético de las edades.

c) Escriba un procedimiento para hallar la desviación estandar de una serie de valores. Recuerde desviación estandar = σ

μ

es el promedio aritmético. d) Halle σ para la estatura

EJERCICIO 9

Cree un programa que arroje una tabla de multiplicar pedida por el usuario ( en particular la del 17).

EJERCICIO 10

Referencias

Documento similar

Este estatuto nos sirve para realizar alguna(s) instrucción(es) en vez de otra(s) de acuerdo a alguna condición que resulte verdadera, analizaremos la sintaxis de las decisiones

i) Las estructuras de datos : son el resultado del proceso de abstracción, que permite realizar un esquema lógico, para manipular los datos y representar el comportamiento de

1.- Tiempo de programación: Como es un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel.. Por otro