UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I....

51
Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006 Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát. UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS DEPARTAMENTO DE MATEMÁTICA APLICADA Y MÉTODOS INFORMÁTICOS Asignatura: PROGRAMACIÓN Y MÉTODOS NUMÉRICOS Examen de Laboratorio (Grupo Experimental A) Fecha: 23 – VI – 2006 INSTRUCCIONES Y RECOMENDACIONES 1ª. El presente examen debe realizarse individualmente. Para la resolución de los ejercicios que se proponen puede utilizarse toda la documentación (impresa o informática) que se desee. Pero no está permitido conectarse a la red informática. 2ª. Al finalizar el examen el profesor grabará el fichero conteniendo tu ejercicio. Puedes solicitar copia de lo grabado al profesor. 3ª. Al fichero en el que se grabe la solución del examen debe asignársele un nombre formado de la siguiente manera: el primer carácter será la inicial del primer nombre propio del alumno. Tras él se escribirá el primer apellido del alumno (en el caso de ser compuesto escríbase todo junto) seguido de la inicial del segundo apellido. Todas las letras del nombre del fichero se escribirán en mayúsculas. Ejemplo: Una alumna que se llamase EVA MARÍA LÓPEZ-GÓMEZ HEREDIA debe asignar al fichero el nombre ELOPEZGOMEZH. 4ª. En el fichero, escribe como primera línea tu nombre y apellidos completos. Además identifica claramente el comienzo y el final de cada uno de los ejercicios. 5ª. Se recomienda grabar periódicamente (cada 5 minutos) para evitar perder el trabajo realizado por bloqueos del ordenador. Asimismo se recomienda no abrir simultáneamente muchas hojas de MAPLE pues ello puede ralentizar el funcionamiento del ordenador llegando incluso a bloquearlo. 6ª. Se recomienda grabar eliminando las respuestas que proporciona MAPLE a las instrucciones. Ello hará que la grabación sea más rápida al ocuparse menos memoria. Recuerda que para eliminar las respuestas de MAPLE puedes seleccionar en la barra de menús de MAPLE la opción “Edit” y en la ventana que se despliegue elegir la opción “Remove_Output” seleccionando en la nueva ventana que se despliegue la opción “FromW orksheet”. Si tienes problemas para realizar esta opción pide ayuda al profesor. 7ª. Lee con atención los enunciados de los ejercicios. Si tienes dudas en la comprensión de los mismos no dudes en solicitar las aclaraciones oportunas al profesor. ¡SUERTE!

Transcript of UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I....

Page 1: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

UNIVERSIDAD POLITÉCNICA DE MADRID

E.T.S.I. MINAS DEPARTAMENTO DE MATEMÁTICA APLICADA

Y MÉTODOS INFORMÁTICOS Asignatura: PROGRAMACIÓN Y MÉTODOS NUMÉRICOS

Examen de Laboratorio (Grupo Experimental A) Fecha: 23 – VI – 2006

INSTRUCCIONES Y RECOMENDACIONES 1ª. El presente examen debe realizarse individualmente. Para la resolución de los ejercicios que se proponen puede utilizarse toda la documentación (impresa o informática) que se desee. Pero no está permitido conectarse a la red informática. 2ª. Al finalizar el examen el profesor grabará el fichero conteniendo tu ejercicio. Puedes solicitar copia de lo grabado al profesor. 3ª. Al fichero en el que se grabe la solución del examen debe asignársele un nombre formado de la siguiente manera: el primer carácter será la inicial del primer nombre propio del alumno. Tras él se escribirá el primer apellido del alumno (en el caso de ser compuesto escríbase todo junto) seguido de la inicial del segundo apellido. Todas las letras del nombre del fichero se escribirán en mayúsculas. Ejemplo: Una alumna que se llamase EVA MARÍA LÓPEZ-GÓMEZ HEREDIA debe asignar al fichero el nombre ELOPEZGOMEZH. 4ª. En el fichero, escribe como primera línea tu nombre y apellidos completos. Además identifica claramente el comienzo y el final de cada uno de los ejercicios. 5ª. Se recomienda grabar periódicamente (cada 5 minutos) para evitar perder el trabajo realizado por bloqueos del ordenador. Asimismo se recomienda no abrir simultáneamente muchas hojas de MAPLE pues ello puede ralentizar el funcionamiento del ordenador llegando incluso a bloquearlo. 6ª. Se recomienda grabar eliminando las respuestas que proporciona MAPLE a las instrucciones. Ello hará que la grabación sea más rápida al ocuparse menos memoria. Recuerda que para eliminar las respuestas de MAPLE puedes seleccionar en la barra de menús de MAPLE la opción “Edit” y en la ventana que se despliegue elegir la opción “Remove_Output” seleccionando en la nueva ventana que se despliegue la opción “FromWorksheet”. Si tienes problemas para realizar esta opción pide ayuda al profesor. 7ª. Lee con atención los enunciados de los ejercicios. Si tienes dudas en la comprensión de los mismos no dudes en solicitar las aclaraciones oportunas al profesor.

¡SUERTE!

Page 2: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

1

Primer ejercicio (2.5 puntos) Se quiere dibujar la curva formada por todos los puntos (x, y) cuyas coordenadas se obtendrán mediante x ·sen( )= ρ θ , y ·cos( )= ρ θ donde a su vez

las coordenadas polares ρ y θ se relacionan mediante:

( )1/32 2

2

2·cos( ) 1 6·sen( )Si 1/ 3

cos( ) 1θ − + θ

ρ = θ < −θ +

( )1/32 2

2

2·cos( ) 1 6·sen(1/ 3)Si 1/ 3 1/ 3

cos( ) 1θ − −

ρ = − ≤ θ ≤θ +

( )1/32 2

2

2·cos(1/ 3) 1 6·sen( )Si 1/ 3

cos( ) 1− − θ

ρ = ≤ θθ +

SE PIDE que escribas un programa MAPLE que en el subintervalo [-π, π] n ángulos θj (j = 1…, n) uniformemente repartidos y para cada uno de ellos evalúe mediante las expresiones antes dadas el valor ρj que le corresponde. Con los valores (θj , ρj) calculará además las coordenadas cartesianas de los puntos [xj, yj] dadas por las expresiones: j j jx ·cos( )= ρ θ ; j j jy ·sen( )= ρ θ

El programa deberá representar en una única gráfica la representación de los n puntos [xj, yj] calculados. Prueba el programa con n=200. Solución: > restart; > with(plots): Warning, the name changecoords has been redefined > n:=200: > h:=evalf(2*Pi/(n-1));

:= h 0.03157379553

> x:=vector(n): y:=vector(n): rho:=vector(n): theta:=vector(n): > for i from 1 to n by 1 do theta[i]:=evalf(-Pi+(i-1)*h): if (theta[i] < -1/3) then aux:=(2*cos(theta[i])^2-1): if (aux > 0) then aux:=aux**(1/3): else aux:=-(abs(aux)**(1/3)): fi:

Page 3: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

2

rho[i]:=evalf((aux+6*sin(theta[i])^2)/(cos(theta[i])^2+1)):

k1:=i: elif (theta[i]<=1/3) then

rho[i]:=evalf(((2*cos(theta[i])^2-1)**(1/3)-6*sin(1/3)^2)/(cos(theta[i])^2+1)):

k2:=i: else

rho[i]:=evalf(((2*cos(1/3)^2-1)**(1/3)-6*sin(theta[i])^2)/(cos(theta[i])^2+1)):

fi: x[i]:=rho[i]*cos(theta[i]): y[i]:=rho[i]*sin(theta[i]): od: > ptos1:=[seq([x[i],y[i]],i=1..k1)]: ptos2:=[seq([x[i],y[i]],i=k1+1..k2)]: ptos3:=[seq([x[i],y[i]],i=k2+1..n)]: > dibu1:=pointplot(ptos1,color=red,connect=true): dibu2:=pointplot(ptos2,color=blue,connect=true): dibu3:=pointplot(ptos3,color=khaki,connect=true): > dibu1;

> dibu2;

Page 4: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

3

> dibu3;

> display(dibu1,dibu2,dibu3);

Page 5: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

4

> fin_del_primer_ejercicio; fin_del_primer_ejercicio

Segundo ejercicio (2.5 puntos) Siendo A una matriz cuadrada:

1,1 1,2 1,n

2,1 2,2 2,n

n,1 n,2 n,n

a a ... aa a ... a

A.... ... ... ...a a ... a

⎡ ⎤⎢ ⎥⎢ ⎥=⎢ ⎥⎢ ⎥⎣ ⎦

Se pide que programes en MAPLE el siguiente algoritmo: 1º. Construir un vector v, de n componentes, en el que cada componente sea de la forma:

n2

i i,kk 1

v (a ) (i 1,....,n)=

= =∑

2º Construir un vector w, de n componentes, en el que cada componente sea de la forma:

1/3n3

j k,jk 1

w (a ) (i 1,....,n)=

⎛ ⎞= =⎜ ⎟

⎝ ⎠∑

3º) Construir una matriz S de dimensiones (n, n), que, considerando que los vectores v y w son vectores columnas y wT es el vector transpuesto de w, responda a la siguiente expresión:

TT1S v·w

w ·v⎡ ⎤= ⎣ ⎦

4º) Calcule las matrices: B = A·S-1 y C = S-1·A Prueba el programa que escribas con la matriz:

:= A

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 2 3 43 4 5 65 6 7 87 8 9 10

Page 6: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

5

Solución: > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected > n:=4: A:=matrix(n,n,[[1,2,3,4],[3,4,5,6],[5,6,7,8],[7,8,9,10]]);

:= A

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 2 3 43 4 5 65 6 7 87 8 9 10

> v:=vector(n): w:=vector(n): > for i from 1 to n by 1 do v[i]:=sqrt(sum(A[i,k]^2,k=1..n)): w[i]:=(sum(A[k,i]^3,k=1..n))^(1/3): od: > evalm(v);evalm(w);

[ ], , ,30 86 174 7 6

[ ], , ,496( )/1 3

800( )/1 3

1224( )/1 3

1792( )/1 3

> evalf(evalm(v));evalf(evalm(w)); [ ], , ,5.477225575 9.273618495 13.19090596 17.14642820 [ ], , ,7.915783219 9.283177667 10.69696248 12.14635589

> S:=matrix(n,n): vv:=matrix(n,1): ww:=matrix(n,1): for i from 1 to n by 1 do vv[i,1]:=(v[i]): ww[i,1]:=(w[i]): od: denomin:=evalf(dotprod(w,v)); S:=evalf(evalm((1/denomin)*(vv&*transpose(ww))));

:= denomin 478.8144237

:= S

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

0.09054975820 0.1061915757 0.1223640592 0.13894387430.1533119096 0.1797954361 0.2071774453 0.23524911750.2180726955 0.2557431805 0.2946916783 0.33462116090.2834655807 0.3324322149 0.3830600962 0.4349631276

> S1:=inverse(S); Error, (in inverse) singular matrix El apartado 4º no puede realizarse ya que S es una matriz singular.

Page 7: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

6

No obstante, si los valores se hubieran aproximado con 10 dígitos los errores de redondeo conducen a una matriz muy cercana a ser singular (su determinante es del orden de 10^(-21)) para la cual: > S:=matrix(n,n): vv:=matrix(n,1): ww:=matrix(n,1): for i from 1 to n by 1 do vv[i,1]:=evalf(v[i]): ww[i,1]:=evalf(w[i]): od: denomin:=evalf(dotprod(w,v)): S:=evalm((1/denomin)*(vv&*transpose(ww)));

:= S

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

0.09054975820 0.1061915757 0.1223640592 0.13894387430.1533119096 0.1797954361 0.2071774453 0.23524911750.2180726955 0.2557431805 0.2946916783 0.33462116090.2834655806 0.3324322147 0.3830600960 0.4349631275

> det(S); -0.11 10-20

> S1:=inverse(S);

:= S1

⎢⎢⎢⎢⎢⎢⎢⎢⎢

0.3952702971 1010 -0.2558356890 1010 -0.7678361455 109 0.7117420764 1-0.3370477326 1010 0.2181515784 1010 0.6547353436 109 -0.6069038218 10.4163994829 1010 -0.7935175027 109 -0.7578438218 109 -0.3179504055 1-0.7935175027 109 0.1188961547 1010 0.1031084782 109 -0.4688904055 1

> B:=evalm(A&*S1); C:=evalm(S1&*A);

:= B

⎢⎢⎢⎢⎢⎢⎢⎢⎢

0.6529662798 1010 0.4179968358 1010 -0.1319463011 1010 -0.3331478406 100.1443506873 1011 0.4217174234 1010 -0.2855135302 1010 -0.4695483519 100.2234047468 1011 0.4254380107 1010 -0.4390807593 1010 -0.6059488631 100.3024588062 1011 0.4291585986 1010 -0.5926479883 1010 -0.7423493744 10

:= C

⎢⎢⎢⎢⎢⎢⎢⎢⎢

-0.2579353892 1010 -0.1241101880 1010 0.97150130 108 0.1435402140 1010

0.2199419991 1010 0.1058289972 1010 -0.82840051 108 -0.1223970069 1010

-0.4231429626 1010 -0.1936746528 1010 0.357936573 109 0.2652619671 1010

0.6676691 107 0.36338808 108 0.66000924 108 0.95663042 108

> Fin_del_segundo_ejercicio; Fin_del_segundo_ejercicio

Tercer ejercicio (5 puntos)

Page 8: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

7

Euclides de Alejandría (~325 a.C. - ~265 a.C.) fue un matemático griego cuya obra principal fueron los trece libros que componen Elementos. Versiones de Elementos se utilizaron como libros de texto para estudiantes de matemáticas durante más de 1900 años desde que fue escrito.

El libro VII de Elementos comienza con 22 definiciones entre las que se encuentra la que, en lenguaje de hoy en día, podríamos formular de la siguiente manera:

Un número natural se dice que es un número perfecto si es igual a la suma

de sus divisores excluido él mismo1. Por ejemplo, el número 6 es un número perfecto ya que, excluido él mismo,

sus divisores (1, 2 y 3) suman 6. Otro número perfecto es 28 ya que sus divisores, excluido el propio número 28, (1, 2, 4, 7 y 14) suman 28.

De los números perfectos aún hoy en día se desconocen muchas cosas2. Algunas de las que sí que se conocen ya se recogían por Euclides en Elementos. Entre ellas, en la proposición 36 del libro IX de Elementos, Euclides demuestra que si un número entero k es tal que el número α = (2k -1) es primo, entonces el número (2(k-1)·α) es un número perfecto.

a) Se pide que escribas un procedimiento MAPLE, llamado perfectos, que

tenga como parámetro de entrada un valor m y un vector v de m elementos en el que cada uno de sus elementos supondremos que es un número primo para el que existe algún valor entero k que permite expresarlo en la forma (2k -1). Con estos datos el procedimiento deberá calcular un vector p en el que cada una de sus componentes es el número perfecto resultante de la expresión:

i

i iv 1p ·v (i 1,2,...,m)

2+

= =

El procedimiento proporcionará como parámetro de salida el vector p conteniendo los m números perfectos calculados.

1 Los griegos atribuían numerosas propiedades “benéficas” a los números perfectos y por ello les asignaron este nombre. 2 Por ejemplo, todos los números perfectos que se conocen son pares. ¡ Pero hasta la fecha nadie ha podido demostrar que no existan números perfectos impares ¡.

Page 9: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

8

b) La proposición 36 del libro IX de Elementos incentivó, aún más, a los matemáticos a buscar números primos que pudieran expresarse en la forma (2k-1) siendo “k” un número natural. Estos números primos se conocen con el nombre de números primos de Mersenne, en honor al padre franciscano Marin Mersenne (1588 – 1648).

Durante mucho tiempo se creyó que si k era un número primo entonces (2k-1) también es primo … pero lamentablemente esto se ha demostrado que es falso. Escribe un procedimiento, llamado mersenne, en el que tomando como parámetro de entrada un valor natural N, se analice para cada uno de los números naturales “k” comprendidos entre 1 y N si son primos o no. En el caso en que k sea primo el procedimiento deberá calcular el número α = (2k – 1) y determinar si α es primo o no. El procedimiento deberá contabilizar el número m de primos de Mersenne que se pueden construir con exponentes “k” comprendidos entre 1 y N calcular un vector v de dimensión m conteniendo los primos de Mersenne calculados. NOTA: Para saber si un número natural z es primo o no puede susar el comando de MAPLE isprime(z) cuyo resultado es true si z es un número primo o false si no lo es.

c) En la última parte del siglo XVIII y comienzos del XIX vivió en París el

matemático Adrien Marie Legendre. Entre otros muchos trabajos Legendre dedicó algunos a los números primos. Tras calcularse (¡a mano!) todos los primos menores de 100000 analizó su distribución y llegó a la conclusión de que el número de números primos menores que un cierto valor z es “aproximadamente” s = z /ln(z). Escribe un procedimiento, llamado primperf en el que dado un valor N determine aplicando la regla de Legendre el número de números primos menores que N, y con ayuda de los dos anteriores determine cuantos de ellos son primos de mersenne y calcule los números perfectos a ellos asociados. El procedimiento primperf deberá proporcionar como parámetros de

Page 10: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

9

salida el porcentaje de primos de Mersenne del total de primos menores que la regla de Legendre determine entre 0 y N, y los números perfectos a ellos asociados.

d) Escribe un programa MAPLE que use los procedimientos anteriores para determinar los números primos de Mersenne y qué porcentaje representan del total de primos existentes menores que 100, 200, 300, 400, …, 3500. Represéntese estas evoluciones porcentuales en una gráfica. Por último, proporciónense también todos los números perfectos asociados a primos de mersenne menores a 3500 que se hayan encontrado. NOTA: En la realización de este ejercicio MAPLE tarda algunos minutos en hacer los cálculos. Por ello te sugerimos que en primer lugar desarrolles el programa para los menores que 10, 20, 30, 40, …., 100. Cuando estés seguro de que MAPLE realiza bien las operaciones, intenta con 100, 200, …., 3500.

Solución: a) > perfectos:=proc(m, v, p) local i: p:=vector(m): for i from 1 to m by 1 do p[i]:=v[i]*(v[i]+1)/2: od: end: > save perfectos,"perfectos.m": > fin_del_primer_procedimiento;

fin_del_primer_procedimiento

b) > mersenne:=proc(N,v,m) local aux, auxm, auxv, k: auxm:=0: for k from 1 to N by 1 do if (isprime(k)) then aux:=2**k-1: if (isprime(aux)) then auxm:=auxm+1: auxv[auxm]:=aux: fi: fi: od: m:=auxm:

Page 11: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

10

v:=vector(auxm): for k from 1 to auxm do v[k]:=auxv[k]: od: end: > save mersenne,"mersenne.m": > fin_del_segundo_procedimiento;

fin_del_segundo_procedimiento

c) > primperf:=proc(N, porcprim,porcperf,porcperfprim, numperf, p) local m, numprim, v: numprim:=N/(ln(N)-1.08366): porcprim:=evalf(numprim/N*100): read "perfectos.m": read "mersenne.m": mersenne(N,v,m): perfectos(m, v, p): numperf:=m: porcperf:=evalf((m/N)*100): porcperfprim:= evalf((m/numprim)*100): end: > save primperf, "primperf.m": > fin_del_tercer_procedimiento;

fin_del_tercer_procedimiento

d) > restart; > read "primperf.m": > NC:=35: Cálculo del porcentaje de números primos menores que "i" (almacenado en la variable primos), del porcentaje de números primos de Mersene menores que "i" (almacenado en la variable perfect ) del porcentaje de números primos menores que "i"que son números de Mersenne (almacenado en perfprim), del número de números perfectos asociados a primos de Mersenne menores que "i" (almacenado en np) y todos los perfectos encontrados menores que "i" (almacenados en el vector p[i]) > for i from 1 to NC by 1 do N[i]:=100*i: primperf(N[i],primos[i], perfect[i], perfprim[i],np[i], p[i]): od: > > for i from 1 to NC by 1 do print(N[i],primos[i], perfect[i], perfprim[i],np[i]); od;

Page 12: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

11

, , , ,100 28.39690778 10. 35.21510186 10 , , , ,200 23.72672113 6. 25.28794420 12 , , , ,300 21.64444786 4. 18.48048990 12 , , , ,400 20.37570955 3. 14.72341364 12

, , , ,500 19.48957543 2.400000000 12.31427544 12 , , , ,600 18.82080272 2.166666667 11.51208425 13

, , , ,700 18.29016133 2. 10.93484067 14 , , , ,800 17.85410853 1.750000000 9.801665520 14 , , , ,900 17.48638539 1.555555556 8.895809637 14 , , , ,1000 17.17004877 1.400000000 8.153733391 14 , , , ,1100 16.89358850 1.272727273 7.533788768 14 , , , ,1200 16.64886116 1.166666667 7.007486311 14 , , , ,1300 16.42991287 1.153846154 7.022837935 15 , , , ,1400 16.23227077 1.071428571 6.600608049 15

, , , ,1500 16.05249709 1. 6.229560387 15 , , , ,1600 15.88789777 0.9375000000 5.900717726 15 , , , ,1700 15.73632583 0.8823529412 5.607108997 15 , , , ,1800 15.59604510 0.8333333333 5.343234953 15 , , , ,1900 15.46563350 0.7894736842 5.104696709 15 , , , ,2000 15.34391280 0.7500000000 4.887931845 15 , , , ,2100 15.22989691 0.7142857143 4.690023303 15 , , , ,2200 15.12275296 0.6818181818 4.508558617 15 , , , ,2300 15.02177165 0.7391304348 4.920394558 17 , , , ,2400 14.92634442 0.7083333333 4.745524511 17 , , , ,2500 14.83594558 0.6800000000 4.583462487 17 , , , ,2600 14.75011812 0.6538461538 4.432819781 17 , , , ,2700 14.66846256 0.6296296296 4.292403700 17 , , , ,2800 14.59062777 0.6071428571 4.161183922 17 , , , ,2900 14.51630366 0.5862068966 4.038265596 17 , , , ,3000 14.44521512 0.5666666667 3.922867622 17 , , , ,3100 14.37711703 0.5483870968 3.814305021 17 , , , ,3200 14.31179019 0.5312500000 3.711974485 17 , , , ,3300 14.24903778 0.5454545455 3.828009680 18

Page 13: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

12

, , , ,3400 14.18868253 0.5294117647 3.731225670 18 , , , ,3500 14.13056423 0.5142857143 3.639527099 18

> ptos1:=[seq([N[j],primos[j]],j=1..NC)]: ptos2:=[seq([N[j],perfect[j]],j=1..NC)]: ptos3:=[seq([N[j],perfprim[j]],j=1..NC)]: dibu1:=pointplot(ptos1,color=red,connect=true): dibu2:=pointplot(ptos2,color=blue,connect=true): dibu3:=pointplot(ptos3,color=green,connect=true): > with(plots): Warning, the name changecoords has been redefined > display(dibu1, dibu2, dibu3);

> for i from 1 to np[NC] by 1 do print(p[NC][i]); od;

Page 14: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

13

6 28

496 8128

33550336 8589869056

137438691328 2305843008139952128

2658455991569831744654692615953842176 191561942608236107294793378084303638130997321548169216

13164036458569648337239753460458722910223472318386943117783728128 14474011154664524427946373126085988481573677491474835889066354349131 \

199152128

23562723457267347065789548996709904988477547858392600710143027597506 \33728317862223973036553960260056136025556646250327017505289257804 \32155433824984287771524270103944969186640286445341280338314397902 \36838624033171435922356643219703101720713163527487298747400647801 \939587165936401087419375649057918549492160555646976

14105378370671206906320795808606318988148674351471566783883867599995 \48677426523801141041933290376902515619505687098293271640877243663 \70087116731268159313652487450652439805877296207297446723295166658 \22884692680778665287018892086787945147836456931392206037069506473 \60735723786951764730552668262532848863837150729743244638353000531 \38429460296575143368065570759537328128

54162526284365847412654465374391316140856490539031695784603920818387 \20699415853485919899992105671992191905739008026364615928001382760 \54397462627889030573034455058270283951394752077690449244314948617 \29435113126280837904930462740681717960465867348720992572190569465 \54529962991982343103109262424446354778963544148139171981644160558 \67880921478866773213987566616247145517269643022175542817842548173 \19611951659855553573937788923405146222324506715979193757372820860 \87821432205222758453755289747625617939517662442631448031344693508 \52036575847982475360211728804037830486028736212593137899949003366 \73941503747224966984028240806042108690077670395259231894666273615 \21277560353576470795225017385830517102860302123489664785136394992 \8904973292145107505979911456221519899345764984291328

Page 15: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

14

10892583550578293376982252735220489819571084543026080673189066185084 \70155298616996291940961858901379546182685531220055762780759342407 \49906604670418208308712462692637816441093145096882635520557367167 \16242026866333608071231094704526683715375996627974849343590397799 \54213666598820299501366380164619080260403235229556730554163992303 \00975265135032061993056367369528015302304949846869661814407202137 \28314259637014605056063781192458413865526001453840729833097171419 \50085498085709671387054868320477972299055273914798446936214147860 \70688705210731238006707260231700942280931477479189470076989100981 \87431693030281543032900711993929842929402838522178001666292291571 \10264080599294016452483028528153331119523441423159614934140265550 \24236000785821593679848950072719634751638604424172198470655832936 \42779959031022920346206280807523424229064012830270346496714455693 \24281946859622177566643375489715678451311792675935981010355562887 \97194856901606003533460787935977037184650765997060161699831198387 \81504207633062894908864299004817864995376453798393652127254944415 \11932772182768149943659849007457246983861558265144823191367758350 \34152778077022155694527556650483163656485683150255607805813304340 \00556535404133132660346393552028340061269054915695605424895510232 \07382276137352665717018261519604817417112576526410535323991500058 \749996247580834453782528

99497054337086473442435202604522816989643863571126408511774020575773 \84932635552917868662949815133641650251664564169951681314039489794 \06365616465459477532323014536035832232680856136472337680816457276 \69037394385696522820301535888041815559513408036145123870584325525 \81395048710964777074382736257182287056764304018472311582564559038 \63133770671126381492531718439147800651373734462224063229535691247 \71480101363180966448099882292453452395428270875732536311539266115 \11649070494016419241774491925000089472740793722982930057825342788 \44943584599495352318197813614496497792529480999098216422074855148 \05768288115583409148969875790523961878753124972681179944234641016 \96001181578884743661019270455163703447255231982033653201456141202 \88204921769404183770742743891499243034849454461051212675380615832 \99291707972378807395016030765440655601759109370564522647989156121 \80427301226601178345110223008138040195138358298714957822994081818 \15140463148193132063213759733367850235654431013056331276102305495 \

Page 16: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

15

88655605951332351485641757542611227108073263889434409595976835137 \41218702534963950440406165465375534916268062929055164415338276068 \18622946774149890474919227957072109204378111367127944834964373559 \80833463329592838140157803182055197821702739206310971006260383262 \54290004407253319613779655274643905176094043008237564115012981796 \01830280810109787809024417336809777148135434387525461363756751399 \15776

33570832131986724437010877211080384841138028499879725454996241573482 \15845044404288204877880943769038844953577426084988557369475990617 \38411574384247301308070476236559422361748505091085378276585906423 \25482494761473196579074656099918600764404702181660294469121778737 \96582219990166347809300607502235922320184998563614417718592540207 \81850730150450977270848594647436355377815002849158802448863064617 \85982956072060013474955617851481680185988557136609224841817877083 \60895119112317488522641613068319771066739235100737450375540335253 \14762279435900716517026975942410319555298989712180012146417746731 \34944471562560957179657881556419122102935450299751813340515170956 \16795109545364948557615066010168916065801177019327422630828050778 \68350495491125766545101196704567459398901942052551753844844899093 \28967646988163155982471564998196261632751283127879509198074253193 \40958045456248866438346537988500273550615398885150664513775927555 \39882194254397647323998247124381250541175238374382567444370550194 \41051006489972341609117978404563794992004873057518455748701444951 \23837713962049428798248952982723314063701483740885615619951545766 \96079640521269081492656017860944475955604400590500917635471140922 \55371397425807867554352112542194784815494784276201170845949274674 \63298521042107553178491835892669039546364972145226540571348438804 \39116344854323586388066453138262065911312662324220078355773455842 \25720310518698143376736219283021119287617896146885584860065048876 \31570108879621959364082631162227332803560330947564239080449946015 \67978553610182466961012539222545672409083153854682409318461669624 \95983407607141601251889544407008815874744654769507268678051757746 \95689121248545626112138666740771113961907153092335582317866270537 \43930350490226038824797423347994071302801487692985977437781930503 \48749740786928096033906295910199238181338557856978191860647256209 \70816822911615630097805919702685572687764976707268496046345276316 \0384093838292277544911857859658328888332628525056

> ptos4:=[seq([N[j],np[j]],j=1..NC)]: dibu4:=pointplot(ptos4,color=red,connect=true): > dibu4;

Page 17: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

16

> > fin_del_tercer_ejercicio;

fin_del_tercer_ejercicio

Page 18: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

17

Examen de Laboratorio (Grupo Experimental B) Fecha: 1 – VI – 2006

Primer ejercicio (2.5 puntos) Una función f(x) continua en el intervalo [-π, π] puede aproximarse mediante polinomios trigonométricos de la siguiente manera:

( ) ( ) ( )2 1

01

n

n k kk

f x S x a a xϕ−

=

≈ = + ∑

donde:

( )

( ) ( )( ) ( )

( ) ( )

012cos , 1, 2, ,

sin , 1, 2, , 1

1

k

n k

k k

x

x kx k n

x kx k n

a f x x dxπ

π

ϕ

ϕ

ϕ

ϕπ

+

=

= =

= = −

= ∫

Se pide:

a) Construir un programa MAPLE que permita aproximar una función en la manera descrita anteriormente.

b) Aplicar el programa del apartado a) a la aproximación de ( ) xf x e= en el

intervalo [-π, π] para n=5.

c) Dibujar en un mismo gráfico f(x) y Sn(x). Solución: > restart: > n:=5: > f:=x->exp(x);

:= f → x ex

> phi[0]:=1/2: > for i from 1 to n do phi[i]:=cos(i*x): od: > for i from 1 to n-1 do phi[n+i]:=sin(i*x): od: > for i from 0 to 2*n-1 do

Page 19: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

18

a[i]:=evalf(int(f(x)*phi[i](x),x=-Pi..Pi)/Pi): od: > s:=a[0]+sum(a[j]*phi[j],j=1..2*n-1); s 3.676077912 3.676077911 ( )cos x 1.470431164 ( )cos 2 x 0.7352155818 ( )cos 3 x − + − :=

0.4324797539 ( )cos 4 x 0.2827752238 ( )cos 5 x 3.676077911 ( )sin x + − + 2.940862328 ( )sin 2 x 2.205646746 ( )sin 3 x 1.729919016 ( )sin 4 x − + −

> plot({f(x),s(x)},x=-Pi..Pi,thickness=3);

> fin_del_ejercicio;

fin_del_ejercicio

Page 20: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

19

Segundo ejercicio (2.5 puntos) Entre los muchos métodos para ordenar una lista, el conocido como método de ordenación por inserción es uno de los más utilizados. Supóngase una lista x, de n elementos x1, x2, …, xn, de los cuales los m primeros ya están ordenados. Esto es:

A continuación se toma el elemento xm+1 y se busca cual seria la posición que ocuparía entre los m primeros. Supongamos que esta posición es entre los elementos xj y xj+1. Se desplazan todos los elementos desde el j+1-ésimo hasta el m-ésimo una posición a la derecha y se sustituye xj por xm. El algoritmo siguiente responde a esta idea:

x1 x2 xm xm+1 xm+2 xn… …

Parte de la lista ordenada

Parte de la lista sin ordenar

Page 21: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

20

Se pide:

a) Construir un programa MAPLE que responda al algoritmo dado. b) Aplicar el programa a la ordenación de la lista:

x = {4,5,3,1,9,8,7,1,5,3}

Solución:

> restart: > n:=10: > x:=vector(n,[4,5,3,1,9,8,7,1,5,3]);

:= x [ ], , , , , , , , ,4 5 3 1 9 8 7 1 5 3

> for m from 1 to n-1 do if x[m+1] < x[m] then

Si x[m+1] < x[m] entonces

pos = 1

Si x[m+1] <= x[1] entonces

Si x[m+1] > x[i] y x[m+1] <= x[i+1] entonces

pos = i+1

Fin condición

Desde j=1 hasta m-1 con paso 1 hacer:

Si no, entonces

Fin condición

Fin condición

aux = x[m+1]

Desde j=m+1 hasta pos+1 con paso -1 hacer:

x[j] = x[j-1]

x[pos] = aux

Desde m=1 hasta n-1 con paso 1 hacer:

Fin bucle

Fin bucle

Fin bucle

Page 22: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

21

if x[m+1] <= x[1] then pos:=1: else for j from 1 to m-1 do if x[m+1] > x[j] and x[m+1] <= x[j+1] then pos:= j+1: fi: od: fi: aux:= x[m+1]: for j from m+1 to pos+1 by -1 do x[j]:= x[j-1]: od: x[pos]:= aux: fi: od: > print(x);

[ ], , , , , , , , ,1 1 3 3 4 5 5 7 8 9

> fin_del_ejercicio; fin_del_ejercicio

>

Tercer ejercicio (5 puntos)

a) Construir un procedimiento MAPLE que, utilizando como variables de entrada una matriz cuadrada A y su dimensión n, calcule un vector v cuyas componentes sean:

2,

1

, 1, 2, ,n

i i jj

v a i n=

= =∑ …

b) Construir un procedimiento MAPLE que, utilizando como variables de entrada una matriz cuadrada A y su dimensión n, calcule un vector v cuyas componentes sean:

33 ,1

, 1, 2, ,n

j i ji

v a j n=

= =∑ …

Page 23: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

22

c) Construir un procedimiento MAPLE que, utilizando como variables de

entrada un vector v de dimensión n, calcule una matriz A tal que:

A = v vT

d) Construir un procedimiento MAPLE que, utilizando como variables de

entrada una matriz cuadrada A y su dimensión n, calcule la traza de la matriz:

1

n

iii

tr a=

= ∑

e) Construir un programa MAPLE que a partir de una matriz cuadrada A de dimensión n y utilizando los procedimientos anteriores calcule:

e-1) Los vectores v y w tales que:

( )2,

1

, 1, 2, ,n

i i jj

v a i n=

= =∑ … y 33 ,1

, 1, 2, ,n

j i ji

w a j n=

= =∑ …

e-2) Las matrices B= v vT y C= w wT e-3) La traza de la matriz BC

Solución: > restart: > suma_filas:=proc(A,n,v) local i,j,s: for i from 1 to n do s:=0: for j from 1 to n do s:=s+A[i,j]^2: od: v[i]:=sqrt(s): od: end: > suma_cols:=proc(A,n,v) local i,j,s: for j from 1 to n do s:=0: for i from 1 to n do s:=s+A[i,j]^3: od:

Page 24: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

23

v[j]:=s^(1/3): od: end: > producto:=proc(v,A) A:=evalm(v&*transpose(v)): end: > traza:=proc(n,A,tr) local i,s: s:=0: for i from 1 to n do s:=s+A[i,i]: od: tr:=s: end: > n:=3: A:=matrix(n,n,[1.,2.,3.,2.,3.,4.,3.,4.,5.]); B:=matrix(n,n); C:=matrix(n,n); DD:=matrix(n,n); v:=vector(n):w:=vector(n):

:= A⎡

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

1. 2. 3.2. 3. 4.3. 4. 5.

:= B ( )array , ,.. 1 3 .. 1 3 [ ] := C ( )array , ,.. 1 3 .. 1 3 [ ] := DD ( )array , ,.. 1 3 .. 1 3 [ ]

> suma_filas(A,n,v): > print(v);

[ ], ,3.741657387 5.385164807 7.071067812

> suma_cols(A,n,w): > print(w);

[ ], ,3.301927249 4.626065009 6.000000000

> producto(v,B): > print(B);

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

14.00000000 20.14944168 26.4575131120.14944168 29.00000000 38.0788655326.45751311 38.07886553 50.00000000

> producto(w,C): > print(C);

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

10.90272356 15.27493011 19.8115634915.27493011 21.40047747 27.7563900519.81156349 27.75639005 36.00000000

> DD:=evalm(B&*C):

Page 25: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

24

> traza(n,DD,tr): > print(`Traza = `, tr);

,Traza = 6351.007693

> fin_del_ejercicio; fin_del_ejercicio

Page 26: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

25

Examen de Laboratorio (Grupo 3º) Fecha: 31 – V – 2006

Primer ejercicio (2,5 puntos)

Dados los 6N+1 puntos {a = x0, x1, …, x6N = b}, equidistantes una distancia h (h>0), la fórmula de integración numérica de Weddle compuesta es:

( ) ( )( )

( )( ) ( ) ( ) ( ) ( )

( ) ( )( ) ( ) [ ]

6

6 11

6 5 6 4 6 3 6 26 11

6 1 6

8

6 41 216 27 272 27840

216 41

3, ,

2800

j

j

xb N

ja x

N

j j j jjj

j j

viii

f x dx f x dx

h f x f x f x f x f x

f x f x

b a hf a bξ ξ

−=

− − − −−=

= =

⎡= + + + + +⎣

⎤+ + +⎦−

+ ∈

∑∫ ∫

Se pide:

a) Construir un programa MAPLE que, dados a, b y N, aproxime la integral de f(x) utilizando la fórmula precedente.

b) Utilizar el programa realizado en el apartado a) para aproximar:

( )/ 2

0

cos x dxπ

con N=5.

c) Obtener una cota del error cometido en el apartado b)

Solución: > restart: > N:=5: a:=0.: b:=evalf(Pi/2);

:= b 1.570796327

> h:=(b-a)/(6*N); := h 0.05235987757

> f:=x->cos(x): > for i from 0 to 6*N do x[i]:=a+i*h: od: > integral:=0: > for j from 1 to N do

Page 27: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

26

integral:=integral + 41*f(x[6*(j-1)]) + 216*f(x[6*j-5]) + 27*f(x[6*j-4]) + 272*f(x[6*j-3]) + 27*f(x[6*j-2])+216*f(x[6*j-1])+41*f(x[6*j]): od: > integral:=6*h*integral/840;

:= integral 1.000000000

Como la derivada octava de f entre 0 y Pi/2 es siempre igual o menor que 1 (en valor absoluto) > err:=3*(b-a)*h^8/2800;

:= err 0.9507625780 10-13

Segundo ejercicio (2,5 puntos)

El sistema de n ecuaciones lineales Ax=b puede resolverse utilizando el método

del doble gradiente conjugado cuyo algoritmo se presenta a continuación: Dados n, A, b, x (solución inicial), ε, maxiter r ← b − Ax r1 ← r; d ← r; d1 ← r norma ← || r ||2 k = 0 mientras (norma > ε) & (k ≤ maxiter) hacer

( )

( )

1

ρ

ρρρ

T

T

T

auxaux

=

← +← −

← −

r r

d1 Adx x dr r Adr1 r1 A d1

norma ← || r ||2

( )1

α

αα

T

aux←

← +← +

r r

d r dd1 r1 d1

k = k+1

fin bucle condicional

Page 28: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

27

Se pide implementar un programa MAPLE que responda al algoritmo anterior y aplicarlo a la resolución del sistema:

1

2

3

4 1 0 123 2 1 102 3 0 9

xxx

⎛ ⎞⎛ ⎞ ⎛ ⎞⎜ ⎟⎜ ⎟ ⎜ ⎟=⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠⎝ ⎠ ⎝ ⎠

partiendo del vector inicial: x = (1,1,1)T

Solución: > restart: with(linalg): Warning, the protected names norm and trace have been redefined and unprotected > n:=3: > A:=matrix(n,n,[[4,1,0],[3,2,1],[2,3,0]]): b:=vector(n,[12.,10.,9.]): x:=vector(n,[1,1,1]): > r:=evalm(b-A&*x);

:= r [ ], ,7. 4. 4.

> r1:=evalm(r): d:=evalm(r): d1:=evalm(r): > norma:=norm(r,2): > k:=0: eps:=0.0001: maxiter:= 10: > while (norma >= eps) and (k <= maxiter) do aux:=dotprod(r1,r): rho:=aux/evalm(transpose(d1)&*A&*d): x:=evalm(x+rho*d): r:=evalm(r-rho*A&*d): r1:=evalm(r1-rho*transpose(A)&*d1): norma:=norm(r,2): alpha:=dotprod(r1,r)/aux: d:=evalm(r+alpha*d): d1:=evalm(r1+alpha*d1): k:=k+1: od;

:= aux 81. := ρ 0.1760869565

:= x [ ], ,2.232608696 1.704347826 1.704347826 := r [ ], ,1.365217392 -1.810869564 -0.578260869 := r1 [ ], ,-1.452173912 -0.754347826 3.295652174

:= norma 2.340395851 := α -0.03113894138

:= d [ ], ,1.147244802 -1.935425330 -0.7028166345

Page 29: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

28

:= d1 [ ], ,-1.670146502 -0.8789035915 3.171096408 := k 1

:= aux -2.522254252 := ρ 0.1730751122

:= x [ ], ,2.431168219 1.369373870 1.582707758 := r [ ], ,0.9059532568 -1.614960152 0.0295419538 := r1 [ ], ,-0.9372574593 -1.807567957 3.447768512

:= norma 1.851950411 := α -0.8610918551

:= d [ ], ,-0.0819298980 0.051618836 0.6347316334 := d1 [ ], ,0.5008920907 -1.050751233 0.717163223

:= k 2 := aux 2.171892593

:= ρ -3.281241464 := x [ ], ,2.699999998 1.200000005 -0.499999996

:= r [ ], ,0.80 10-8 -0.3 10-8 -0.810 10-8

:= r1 [ ], ,-0.53 10-8 0.24 10-7 -0.2 10-8

:= norma 0.1177327482 10-7

:= α -0.452140222410-16

:= d [ ], ,0.8000000004 10-8 -0.3000000002 10-8 -0.8100000029 10-8

:= d1 [ ], ,-0.5300000023 10-8 0.2400000005 10-7 -0.2000000032 10-8 := k 3

> fin_del_ejercicio; fin_del_ejercicio

Page 30: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

29

Tercer ejercicio (5 puntos)

La familia de polinomios ortogonales de Legendre puede obtenerse por recurrencia mediante:

( )( )

( ) ( ) ( )

0

1

2

1 12

1

4 1n n n

p x

p x x

np x xp x p xn+ −

=

=

= −−

donde los subíndices hacen referencia al grado del polinomio. Estos polinomios tienen, entre otras, la propiedad de que todas sus raíces están en el intervalo [-1,1].

Se pide: a) Construir un procedimiento MAPLE, denominado pol_n_Lgdre que

construya el polinomio de Legendre de un grado n dado.

Variable de entrada: n (grado del polinomio) Variable de salida p (polinomio de Legendre de grado n)

(1.5 puntos)

b) Construir un procedimiento MAPLE, denominado newton, que

obtenga mediante el método de Newton una solución de la ecuación f(x)=0.

Variable de entrada: f (expresión en x), x0 (valor inicial de la solución) Variable de salida: z (solución)

(2 puntos)

c) Construir un procedimiento en MAPLE que, mediante las correspondientes llamadas a los procedimientos pol_n_Lgdre y newton, permita determinar dos raíces del polinomio de Legendre de grado n.

Variables de entrada: n (grado del polinomio de Legendre)

x0, x1 (valores iniciales de las dos soluciones buscadas)

Variables de salida: z0, z1

(1 punto)

d) Construir un programa MAPLE que, utilizando los procedimientos anteriores permita calcular dos raíces del polinomio de Legendre de grado 6 a partir de las soluciones iniciales x0=-1 y x1=1.

(0.5 puntos)

Page 31: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

30

Notas: 1. Si f es una expresión en x (no una función) y queremos evaluarla para un cierto valor de x, por ejemplo x=a, deberemos escribir:

subs(x=a, f) 2. La derivada de una expresión f en x puede obtenerse mediante:

diff(f, x) Solución: > restart: > pol_n_Lgdre:=proc(n,P) local i, p; p:=array(0..n): p[0]:=1: p[1]:=x: for i from 1 to n-1 do p[i+1]:=expand(x*p[i]-(i^2/(4*i^2-1))*p[i-1]); od; P:=p[n]: end: > newton:=proc(f,x0,z) local eps, df, tol, xx, zz: df:=diff(f,x): eps:=0.0000001: tol:=2*eps: xx:=x0: while tol > eps do zz:=xx-evalf(subs(x=xx,f)/subs(x=xx,df)); tol:=abs(zz-xx): xx:=zz: od: z:=zz: end: > procedimiento:=proc(n,x0,x1,z0,z1) pol_n_Lgdre(n,P): newton(P,x0,z0): newton(P,x1,z1): end: > procedimiento(6,-1,1,z0,z1): > z0;

-0.9324695141

> z1; 0.9324695141

> fin_del_ejercicio; fin_del_ejercicio

Page 32: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

31

Examen de Laboratorio (Grupo 5º) Fecha: 1 – VI – 2006

Primer ejercicio (2.5 puntos) Sylvestre François LACROIX fue un matemático nacido en París en 1765 y fallecido, también en París, en 1843. Entre otras contribuciones al desarrollo de las matemática, Lacroix se interesó por la denominada CURVA DEL DIABLO. Esta curva, en coordenadas cartesianas, es el lugar geométrico de los puntos (x, y) cuyas coordenadas satisfacen la relación:

2 2 2 2 2 2y ·(y a ) x ·(x b ) 0− + − =

El grafo de dicha curva, para a= 1 y b = 0.825 tiene la apariencia que se muestra en la figura siguiente:

El dibujo de la curva del diablo puede realizarse fácilmente en coordenadas polares. Para los valores de “a” y “b” antes seleccionados es fácil comprobar que se verifica la relación:

( ) ( )2 2

2

20· 2·cos( ) 1 · 689·cos( ) 289

800·cos( ) 400

θ − θ −ρ =

θ −

La raíz que aparece en la expresión anterior no tiene valor real para algunos parámetros de θ; más concretamente, la expresión anterior puede ser evaluada en los siguientes intervalos del ángulo θ: [ ] [ ]1 1, 0, 0.785θ ∈ α β =

[ ] [ ]2 2, 0.866303, 2.2823705θ ∈ α β =

Page 33: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

32

[ ] [ ]3 3, 2.361, 3.9315θ ∈ α β =

[ ] [ ]4 4, 4.007896, 5.423963θ ∈ α β =

[ ] [ ]5 5, 5.501, 6.283θ ∈ α β =

SE PIDE que escribas un programa MAPLE que en cada subintervalo [αi , βi] anterior determine n ángulos θj (j = 1…, n) y para cada uno de ellos evalúe mediante la expresión antes dada el valor ρj que le corresponde. Con los valores (θj , ρj) calculará además las coordenadas cartesianas de los puntos [xj, yj] dadas por las expresiones: j j jx ·cos( )= ρ θ ; j j jy ·sen( )= ρ θ

El programa deberá representar en una misma gráfica los 5 dibujos de los tramos de la representación de los n puntos [xj, yj] calculados en cada subintervalo [αi , βi].. Prueba el programa con n=200. Solución: > restart; > with(plots): with(linalg): Warning, the name changecoords has been redefined Warning, the protected names norm and trace have been redefined and unprotected Intervalos en los que la expresión no conduce a valores imaginarios > a[1]:=0.: b[1]:=0.785: a[2]:=0.866303: b[2]:=2.2823705: a[3]:=2.361: b[3]:=3.9315: a[4]:=4.007896: b[4]:=5.423963: a[5]:=5.501: b[5]:=6.283: Cálculo de n = 200 puntos en cada intervalo anterior y elaboración del tramo de dibujo correspondiente > n:=200: x:=vector(n): y:=vector(n): for i from 1 to 5 by 1 do h:=abs(b[i]-a[i])/n: theta:=a[i]: for j from 1 to n by 1 do rho:=20./(800.*cos(theta)^2- 400.)*((2.*cos(theta)^2-1.)* (689.*cos(theta)^2-289.))^(1/2): x[j]:=rho*cos(theta): y[j]:=rho*sin(theta): theta:= theta+h: od: ptos:=[seq([x[j],y[j]],j=1..n)]:

Page 34: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

33

dibu[i]:=pointplot(ptos,connect=true,color=blue, thickness=3): od: Representación conjunta de los 5 tramos de dibujo > texto:=textplot([-1.5,2.3,`CURVA DEL DIABLO`], align= {ABOVE,RIGHT}, color=blue): display([seq(dibu[i],i=1..5)],texto);

> fin_del_primer_ejercicio;

fin_del_primer_ejercicio

Segundo ejercicio (2.5 puntos) Como probablemente conocerás por tus estudios de Álgebra Lineal, cualquier matriz cuadrada A de elementos reales puede expresarse como suma de una matriz simétrica S y otra antisimétrica M. Para obtener las matrices S y M, siendo AT la matriz transpuesta de A, basta con denominar:

12

= + TS ·(A A ) y ( )12

= − TM A A

El algoritmo que sigue verifica la propiedad de que la suma de los valores absolutos de los elementos no diagonales de la matriz A siempre es igual a la suma de los valores absolutos de los elementos no diagonales de la matriz S pero es diferente de la suma de los valores absolutos de los elementos no diagonales de la matriz M. En el algoritmo que sigue se denota por n al número de filas (o columnas) de la matriz A y por Ai,j al elemento que está en la fila i-ésima y en la columna j-ésima de la matriz A (usándose la

Page 35: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

34

misma notación para las matrices S y M). Finalmente se designa por AT a la matriz transpuesta de A.

INICIO DATOS: n, A

AT ← AT

S ( )12

← +· A AT

M ( )12

← −· A AT

anod ( )(n 1) n

i,j j,ii 1 j i 1

A A−

= = +

⎛ ⎞← +⎜ ⎟

⎝ ⎠∑ ∑

snod (n 1) n

i,ji 1 j i 1

2· S−

= = +

⎛ ⎞⎛ ⎞← ⎜ ⎟⎜ ⎟⎜ ⎟⎝ ⎠⎝ ⎠

∑ ∑

mnod (n 1) n

i,ji 1 j i 1

2· M−

= = +

⎛ ⎞⎛ ⎞← ⎜ ⎟⎜ ⎟⎜ ⎟⎝ ⎠⎝ ⎠

∑ ∑

Escribir anod, snod, (anod-snod), mnod, (anod-mnod) FIN

Prueba el programa que escribas con la matriz:

:= A

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 2 3 43 4 5 65 6 7 87 8 9 10

Solución: > restart; > with(linalg): with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined Datos del ejercicio y dimensionamiento de las matrices que se utilizarán > n:=4: > A:=matrix(n,n,[[1,2,3,4],[3,4,5,6],[5,6,7,8],[7,8,9,10]]); S:=matrix(n,n):

Page 36: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

35

M:=matrix(n,n):

:= A

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 2 3 43 4 5 65 6 7 87 8 9 10

Cálculo de la matriz transpuesta y de las matrices > AT:=transpose(A);

:= AT

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 3 5 72 4 6 83 5 7 94 6 8 10

> S:=evalm((A+AT)*1/2); M:=evalm((A-AT)*1/2);

:= S

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

152 4 11

252 4 11

2 7

4112 7

172

112 7

172 10

:= M

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

0-12 -1 -3

212 0 -1

2 -1

112 0

-12

32 1

12 0

Cálculo del sumatorio de los valores absolutos de los elementos no diagonales de la matriz A. > anod:=0: for i from 1 to (n-1) by 1 do for j from i+1 to n by 1 do anod:=anod+abs(A[i,j])+abs(A[j,i]): od: od: Cálculo del sumatorio de los valores absolutos de los elementos no diagonales de las matrices S y M. > snod:=0: mnod:=0: for i from 1 to (n-1) by 1 do for j from i+1 to n by 1 do snod:=snod+abs(S[i,j]);

Page 37: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

36

mnod:=mnod+abs(M[i,j]); od: od: snod:=2*snod: mnod:=2*mnod: Escritura de resultados > anod;snod;(anod-snod);mnod;(anod-mnod);

66 66 0

10 56

> Fin_segundo_ejercicio; Fin_segundo_ejercicio

OTRA FORMA DE REALIZAR EL PROGRAMA > restart; > with(linalg): with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined > n:=4: > A:=matrix(n,n,[[1,2,3,4],[3,4,5,6],[5,6,7,8],[7,8,9,10]]); S:=matrix(n,n): M:=matrix(n,n):

:= A

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 2 3 43 4 5 65 6 7 87 8 9 10

> AT:=transpose(A); S:=evalm((A+AT)*1/2); M:=evalm((A-AT)*1/2);

:= AT

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1 3 5 72 4 6 83 5 7 94 6 8 10

Page 38: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

37

:= S

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

152 4 11

252 4 11

2 7

4112 7

172

112 7

172 10

:= M

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

0-12 -1 -3

212 0 -1

2 -1

112 0

-12

32 1

12 0

> anod:=sum(sum(abs(A[i,j])+abs(A[j,i]),j=i+1..n),i=1..(n-1));

:= anod 66

> snod:=2*sum(sum(abs(S[i,j]),j=i+1..n),i=1..(n-1)); := snod 66

> mnod:=2*sum(sum(abs(M[i,j]),j=i+1..n),i=1..(n-1)); := mnod 10

> anod;snod;(anod-snod);mnod;(anod-mnod); 66 66 0

10 56

> Fin_segundo_ejercicio; Fin_segundo_ejercicio

Page 39: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

38

Tercer ejercicio (5 puntos)

a) Un indicador “k” de la salud del cocodrilo toma valores comprendidos entre 0 y 450 unidades. Según el valor de dicho indicador debe suministrársele, de lunes a viernes, una dosis diaria “d” del medicamento cocodrientolin dada por la expresión siguiente:

( )k si k 75

d k7 7 si k 75

⎧ ≤⎪⎪= ⎨ +⎪ >⎪⎩

Se pide que escribas un procedimiento MAPLE llamado dosis_diaria, en el que, siendo un parámetro de entrada el indicador “k”, se calcule el valor de la dosis diaria “d” que debe suministrársele al cocodrilo de lunes a viernes.

b) Dado un número m tal que 0 ≤ m < 5 se desea dar a las 5 componentes de un vector v los valores siguientes:

Si 4 ≤ m < 5: v = {1, 1, 1, 1, 0} Si 3 ≤ m < 4: v = {1, 0, 1, 0, 1} Si 2 ≤ m < 3: v = {0, 1, 0, 1, 0} Si 1 ≤ m < 2: v = {0, 0, 1, 0, 0} Si 0 ≤ m < 1: v = {0, 0, 0, 0, 0}

Escribe un procedimiento MAPLE, llamado resto, en el que siendo un parámetro de entrada la variable “m”, se calcule el vector v correspondiente.

c) La empresa farmacéutica que fabrica el medicamento cocodrientolin

sólo fabrica comprimidos de 1 mg (de color blanco) y de 3 mg (de color rojo). Puesto que la dosis máxima de este medicamento que se le puede administrar al cocodrilo es de 3mg diarios, los veterinarios que se ocupen de él tienen la opción de suministrarle cada uno de los 5 días de lunes a viernes un comprimido “rojo”, dos comprimidos blancos, un comprimido “blanco” o ningún comprimido. Para saber cuál debe administrársele en cada tanda de cinco días, a partir de la dosis a administrar cada día (llamada “d”) quieren dar valor alfanumérico a las 5 componentes de un vector c según la regla siguiente:

Si d ≥ 3: c1 = c2 = c3 = c4 = c5 = “rojo”

Page 40: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

39

Si 2 ≤ d <3 : se calculará el valor m = 5·d – 10 y se usará el

procedimiento resto para determinar con ese valor de m el vector v correspondiente. Tras ello, si vi = 0 (i = 1, .., 5) se tomará ci = “blanca+blanca” y en caso contrario ci = “roja”.

Si 1 ≤ d <2 : se calculará el valor m = 5·d – 5 y se usará el

procedimiento resto para determinar con ese valor de m el vector v correspondiente. Tras ello, si vi = 0 (i = 1, .., 5) se tomará ci = “blanca” y en caso contrario ci = “blanca+blanca”.

Si 0 ≤ d <1 : se calculará el valor m = 5·d y se usará el

procedimiento resto para determinar con ese valor de m el vector v correspondiente. Tras ello, si vi = 0 (i = 1, .., 5) se tomará ci = “libre” y en caso contrario ci = “blanca”.

Se pide que escribas un procedimiento MAPLE, llamado comprimidos, que tomando como dato la dosis d, y utilizando el procedimiento resto escrito en el apartado b), calcule el vector c conteniendo el color de la pastilla o pastillas que deben administrársele al cocodrilo cada uno de los 5 días de tratamiento. NOTA: Para asignar a una variable w el valor alfanumérico “patatin” debes escribir en MAPLE:

w:= “patatin”:

d) Escribe un programa MAPLE que, usando los procedimientos anteriores, calcule el color de las pastillas a suministrar a dos cocodrilos cuyos indicadores de salud tienen respectivamente los valores:

k1 = 16 y k2 = 333 Se recuerda que debes salvar todos los procedimientos escritos y leerlos en los programas y procedimientos en que vayas a utilizarlos.

(Apartado a): 1 punto; Apartado b) 1 punto; Apartado c) 2 puntos; Apartado d) 1 punto)

Page 41: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

40

Solución: a) > restart; > dosis_diaria:=proc(k,d) if (k <= 7) then d:=k/5.: else d:= evalf((7+sqrt(k/7))/5.) fi: end: Se salva el procedimiento > save dosis_diaria,"dosis_diaria.m": > Fin_del_primer_procedimiento;

Fin_del_primer_procedimiento

b) > restart; Calculo del vector indicador de los días en que se acumulan los restos según la regla siguiente: Si 4 < m < 5: v = {1, 1, 1, 1, 0} Si 3 < m < 4: v = {1, 0, 1, 0, 1} Si 2 < m < 3: v = {0, 1, 0, 1, 0} Si 1 < m < 2: v = {0, 0, 1, 0, 0} Si 0 < m < 1: v = {0, 0, 0, 0, 0} > resto:=proc(m,v) local i: v:=vector(5,i->0): if (m >= 4) then for i from 1 to 4 by 1 do v[i]:=1: od: elif (m >= 3) then v[1]:=1: v[3]:=1: v[5]:=1: elif (m >= 2) then v[2]:=1: v[4]:=1: elif (m >= 1) then v[3]:=1: fi: end: Se salva el procedimiento en la unidad "F" > save resto,"resto.m": > Fin_del_segundo_procedimiento;

Fin_del_segundo_procedimiento

Page 42: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

41

c) > restart; Cálculo de los comprimidos a administrar cada día > comprimidos:=proc(d,c) local i, ind, m: c:=vector(5): ind:=vector(5): if (d >= 3) then for i from 1 to 5 by 1 do c[i]:="roja": od: elif (d > 2) then for i from 1 to 5 by 1 do c[i]:="blanca+blanca" od: m:= 5*d - 10: resto(m,ind): for i from 1 to 5 by 1 do if (ind[i] = 1) then c[i]:="roja": fi: od: elif (d > 1) then for i from 1 to 5 by 1 do c[i]:="blanca" od: m:= 5*d - 5: resto(m,ind): for i from 1 to 5 by 1 do if (ind[i] = 1) then c[i]:="blanca+blanca": fi: od: else for i from 1 to 5 by 1 do c[i]:="libre" od: m:= 5*d: resto(m,ind): for i from 1 to 5 by 1 do if (ind[i] = 1) then c[i]:="blanca": fi: od: fi: end: Se salva el procedimiento. > save comprimidos,"comprimidos.m": > Fin_del_tercer_procedimiento;

Fin_del_tercer_procedimiento

Page 43: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

42

d) > restart; > with(linalg): with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined > k1:=16.: k2:=333.: > c1:=vector(5): c2:=vector(5): > read "dosis_diaria.m": read "resto.m": read "comprimidos.m": > dosis_diaria(k1,d1): > d1;

1.702371578

> comprimidos(d1,c1): > print(c1);

[ ], , , ,"blanca+blanca" "blanca" "blanca+blanca" "blanca" "blanca+blanca"

> dosis_diaria(k2,d2): > d2;

2.779440880

> comprimidos(d2,c2): > print(c2);

[ ], , , ,"roja" "blanca+blanca" "roja" "blanca+blanca" "roja"

> > Extensión (no pedida en examen) > with(plottools): for i from 1 to 5 by 1 do if (c2[i]= "libre") then d1[i]:=line([i-0.2,0], [i+0.2,0], color=black, linestyle=3): elif (c2[i]= "blanca") then d1[i] := disk([i,0.], 0.2, color=blue): elif (c2[i]= "blanca+blanca") then aux1:=disk([i-0.2,0.], 0.2, color=white): aux2:=disk([i+0.2,0.], 0.2, color=white): d1[i] := display(aux1,aux2): elif (c2[i]= "roja") then d1[i] := disk([i,0.], 0.2, color=red): fi: od: Warning, the name arrow has been redefined > display([seq(d1[i],i=1..5)],scaling=CONSTRAINED);

Page 44: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

43

> fin_programa;

fin_programa

Page 45: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

44

Examen de Laboratorio (Convocatoria de septiembre) Fecha: 26 – IX – 2006

Primer ejercicio (2,5 puntos)

Se desea dibujar la curva de ecuaciones paramétricas:

21

x ttyt

=

=−

en el intervalo [-4, 4] de t. Esta curva presenta obviamente asíntotas verticales para

1t = ± . Para salvar este problema se consideran los puntos t = –1.1, t = –0.9, t = 0.9 y t = 1.1 y se pide:

a) Obtener 101 puntos del tramo de curva comprendido entre t = –4 y t = –1.1 de tal forma que (x0 , y0) = (x(–4) , y(–4)) y (x100 , y100) = (x(–1.1) , y(–1.1)).

b) Obtener 51 puntos del tramo de curva comprendido entre t = –0.9 y t = 0.9

de tal forma que (x101 , y101) = (x(–0.9) , y(–0.9)) y (x151 , y151) = (x(0.9) , y(0.9)).

c) Obtener 101 puntos del tramo de curva comprendido entre t = 1.1 y t = 4 de

tal forma que (x152 , y152) = (x(1.1) , y(1.1)) y (x252 , y252) = (x(4) , y(4)).

d) Representar gráficamente los puntos obtenidos anteriormente.

Solución: > restart: > with(plots): Warning, the name changecoords has been redefined > xx:=t->t: yy:=t->t/(1-t^2): > a:=-4.: b:=-1.1: n1:=100: h:=(b-a)/n1: tt:=a: > for i from 0 to n1 do x[i]:=xx(tt): y[i]:=yy(tt): tt:=tt+h: od: > dibusec:=[seq([x[j],y[j]],j=0..n1)]: > dibu1:=plot(dibusec, color=red, thickness=2): > a:=-0.9: b:=0.9: n2:=50: h:=(b-a)/n2: tt:=a: > for i from n1+1 to n1+n2+1 do x[i]:=xx(tt): y[i]:=yy(tt): tt:=tt+h:

Page 46: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

45

od: > dibusec:=[seq([x[j],y[j]],j=n1+1..n1+n2+1)]: > dibu2:=plot(dibusec, color=blue, thickness=2): > a:=1.1: b:=4.: n3:=100: h:=(b-a)/n3: tt:=a: > for i from n1+n2+2 to n1+n2+n3+2 do x[i]:=xx(tt): y[i]:=yy(tt): tt:=tt+h: od: > dibusec:=[seq([x[j],y[j]],j=n1+n2+2..n1+n2+n3+2)]: > dibu3:=plot(dibusec, color=red, thickness=2): > display(dibu1,dibu2,dibu3);

> fin_del_primer_ejercicio;

Page 47: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

46

Segundo ejercicio (2,5 puntos)

Uno de los métodos de ordenación de una lista más populares es el denominado “método de la burbuja” y responde al siguiente algoritmo:

Dados un número natural, n, y una lista x = [x0, x1, …, xn] Desde j = 1 hasta n-1 con paso 1 hacer: pos = j Desde i = j+1 hasta n con paso 1 hacer: Si x[i] < x[pos] entonces: pos = i

Fin condición Terminar para i

Si pos ≠ j entonces: Intercambiar los valores de x[j] y x[pos]

Fin condición Terminar para j

Se pide realizar un programa MAPLE que realice las siguientes operaciones:

a) Dada una matriz A de dimensión (n,m) construir el vector b de tal forma que

,1

m

i i jj

b a=

= ∑ .

(0.5 puntos)

b) Utilizando el algoritmo anterior, ordene los elementos del vector b de menor a mayor.

(2 puntos) Nota: Probar el programa realizado con la matriz:

1 0 14 1 2

2 2 57 1 23 4 00 0 1

−⎛ ⎞⎜ ⎟−⎜ ⎟⎜ ⎟

= ⎜ ⎟⎜ ⎟⎜ ⎟−⎜ ⎟⎜ ⎟⎝ ⎠

A

Solución:

Page 48: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

47

> restart: > m:=6: n:=3: > a:=matrix(m,n,[[1,0,-1],[-4,1,2],[2,2,5],[7,1,2],[3,-4,0],[0,0,1]]): b:=vector(m): > for i from 1 to m do b[i]:=0: for j from 1 to n do b[i]:=b[i]+a[i,j]: od: od: > print(b);

[ ], , , , ,0 -1 9 10 -1 1 > for j from 1 to m-1 do pos:= j: for i from j+1 to m do if b[i] < b[pos] then pos:=i: fi: od: if pos <> j then aux:=b[j]: b[j]:=b[pos]: b[pos]:=aux: fi: od: > print(b);

[ ], , , , ,-1 -1 0 1 9 10 > fin_del_segundo_ejercicio;

fin_del_segundo_ejercicio Tercer ejercicio (5 puntos) En este ejercicio se pide resolver los siguientes problemas:

1. Dada la función:

( ) 1 1 ,2

w we eh w sen ww g

−⎛ ⎞−= − −⎜ ⎟

⎝ ⎠

Escribir un procedimiento que determine el valor de h en función de w y g. El procedimiento se llamará hache; las variables de entrada serán w y g y la variable de salida será h.

Page 49: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

48

2. Escribir un procedimiento en Maple que realice una iteración del método de Newton de resolución de ecuaciones no lineales. El procedimiento se llamará it_newton; los argumentos de entrada serán a y f, en donde a es un real cualquiera y f es la función que determina la ecuación a resolver (f(x) = 0). El argumento de salida será un número real al que se denominará b. Se recuerda que:

( )( )

f ab a

f a= =

3. Escribir, utilizando el procedimiento it_newton, un procedimiento que

utilice el método de Newton para resolver una ecuación no lineal. El procedimiento se llamará newton; los argumentos de entrada serán x0 (solución inicial), f (función que determina la ecuación a resolver), maxiter (número máximo de iteraciones) y tol (máximo error admisible). Los

argumentos de salida serán fx (la raíz aproximada de f) y niter (número de iteraciones realizadas).

4. Determinar la solución de la ecuación h(w) = 0 con g = 9.81 utilizando el

procedimiento newton.

Nota: si se parte de w = –1,5 y se impone un máximo error admisible de 1.e-5, la raíz obtenida al aplicar el método de Newton a la resolución de h(w) = 0 es w=0,3058072137.

Solución: > restart: with(linalg):with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined Primer procedimiento > hache:=proc(w,g,h) h:=((exp(w)-exp(-w))/2-sin(w))/w^2-1/g; end;

:= hache proc( ) end proc, ,w g h := h − ( )/× − × − /1 2 ( )exp w /1 2 ( )exp −w ( )sin w ^w 2 /1 g Chequeo del procedimiento: > hache(w,g,'h'): > h;

− − −

12 ew 1

2 e( )−w ( )sin w

w21g

Page 50: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

49

Segundo procedimiento > it_newton:=proc(a,f,b) local f1; f1:=D(f); b:=a-f(a)/f1(a); end;

:= it_newton proc( ) end proc, ,a f b local ;f1 ;:= f1 ( )D f := b − a /( )f a ( )f1 a Chequeo del procedimiento. > f:=x->x*exp(x);a-f(a)/D(f)(a);0.5-f(0.5)/D(f)(0.5);

:= f → x x ex

− aa ea

+ ea a ea

0.1666666666 > it_newton(a,f,'b'):it_newton(0.5,f,'c'): > b;c;

− aa ea

+ ea a ea

0.1666666666 1.000036971

Tercer procedimiento > newton:=proc(x0,f,maxiter,tol,xf,niter) local x,i,err; x:=x0: i:=0: err:=2*tol: while (err > tol and i < maxiter) do it_newton(x,f,'x1'): err:=abs(x-x1): x:=x1: i:=i+1: od: if (err > tol) then print("No se puede asegurar que el error cometido sea menor que: ",tol): print("Para disminuir el error hay que aumentar maxiter o cambiar el valor de x0"): print("Todo ello suponiendo que el método converga para la ecuación en cuestion -> analizar convergencia.") else print("El error cometido es menor que: ",tol); fi: niter:=i; xf:=x; end: > Para chequear el procedimiento resolvemos el cuarto apartado del enunciado: > g:=9.81;

:= g 9.81

Page 51: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. …ocw.upm.es/matematica-aplicada/.../contenidos/.../curso05_06.pdf · > display (dibu1,dibu2,dibu3); ... si los valores se hubieran aproximado

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2005- 2006

Universidad Politécnica de Madrid – ETSI Minas – Depto. Matemática Aplic. y Méts. Informát.

50

> hache(w,g,'h'): > h;

− − −

12 ew 1

2 e( )−w ( )sin w

w2 0.1019367992

Convertimos la expresión h en una función > hf:=unapply(h,w);

:= hf → w − − −

12 ew 1

2 e( )−w ( )sin w

w2 0.1019367992

Aplicamos el procedimiento newton para hallar la raíz partiendo de w=0.5: > newton(-1.5,hf,5,1e-5,'xf','niter'):

,"El error cometido es menor que: "0.00001 > xf;niter;

0.3058072107 3

Resultado que coincide con el del enunciado. También se podía haber comprobado el resultado utilizando el comando fsolve: > fsolve(hf(w)=0,w=0..1);

0.3058072137 > fin_del_tercer_ejercicio;

fin_del_tercer_ejercicio