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

66
Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde Curso 2001- 2002 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 Examen de Laboratorio (Grupo 3º - Martes de 16h a 18h) Fecha: 4 – VI – 2002 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) 2ª. Al finalizar el examen debe entregarse un disquette etiquetado en el que se graben los ejercicios resueltos. En la etiqueta debe figurar el nombre del alumno , el número del grupo de Laboratorio en el que realizó las prácticas y la fecha de hoy. 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 nombre del alumno (en el caso de tener un nombre compuesto utilícense los dos primeros caracteres para las iniciales de cada uno de ellos). El carácter siguiente será un guión bajo (_). Tras él se escribirá el primer apellido del alumno. Ejemplo: Una alumna que se llamase EVA MARÍA DE HEREDIA GÓMEZ-RICO debe asignar al fichero el nombre EM_DEHEREDIA 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.

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

Page 1: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde Curso 2001- 2002 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

Examen de Laboratorio (Grupo 3º - Martes de 16h a 18h)

Fecha: 4 – VI – 2002

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) 2ª. Al finalizar el examen debe entregarse un disquette etiquetado en el que se graben los ejercicios resueltos. En la etiqueta debe figurar el nombre del alumno , el número del grupo de Laboratorio en el que realizó las prácticas y la fecha de hoy. 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 nombre del alumno (en el caso de tener un nombre compuesto utilícense los dos primeros caracteres para las iniciales de cada uno de ellos). El carácter siguiente será un guión bajo (_). Tras él se escribirá el primer apellido del alumno. Ejemplo: Una alumna que se llamase EVA MARÍA DE HEREDIA GÓMEZ-RICO debe asignar al fichero el nombre EM_DEHEREDIA 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.

Page 2: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

1

Primer ejercicio (2’5 Puntos) Dibuja los 1001 primeros puntos de la secuencia de puntos (xk , yk) construida a partir del punto (x0 = 0, y0 = 5) mediante las reglas de recurrencia:

xi = xi-1 + h yi = yi-1 + h.f(xi-1 , yy-1)

donde h = 0’005 y f(x, y) = 2 y

1y .sen(7.x) e−−

.

Solución: > restart; > with(plots): Warning, the name changecoords has been redefined > f:=(x,y)->1./((y^2)*sin(7*x)-exp(-y));

:= f → ( ),x y1.

− y2 ( )sin 7 x e( )−y

> npasos:=1000;h:=0.005; := npasos 1000

:= h 0.005

> x:=array(0..npasos): y:=array(0..npasos): x[0]:=0: y[0]:=5.: > for i from 1 to npasos by 1 do x[i]:=x[0]+i*h: y[i]:=y[i-1]+h*f(x[i-1],y[i-1]): od: > ptos:=[seq([x[k],y[k]],k=0..npasos)]: > dibp:=pointplot(ptos,color=red,symbol=cross,connect=true): > display(dibp);

Page 3: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

2

> fin_primer_ejercicio;

fin_primer_ejercicio

Segundo ejercicio (2’5 Puntos) Los sistemas [A].{x} = {b} con más ecuaciones que incógnitas en los que la matriz del sistema tiene rango mayor que el número de incógnitas no admiten solución. Por ello, en tales sistemas se busca la denominada seudo-solución que se define como el vector {x*} para el que se hace mínimo el valor de la norma-2 del vector residuo del sistema, o, lo que es lo mismo, el vector que minimiza la funcional J({x}) = || [A].{x} – {b}||22. Se puede demostrar1 que el vector seudo-solución de tales sistemas está dado como solución del sistema:

[A]T.[A].{x} = [A]T.{b} 1 Véase, por ejemplo, P. Lascaux & R. Théodor “Analyse numérique maticielle appliquée a l’art de l’ingémieur. Tome 1: méthodes directes”. Ed. Masson (1993).

Page 4: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

3

En este ejercicio se pide que programes el algoritmo siguiente para encontrar la solución de un sistema con más ecuaciones que incógnitas y estimes el valor de la norma-2 del residuo: Datos: [A], {b} [M] [A]T.[A] {c} [A]T.{b} [P] [M]-1 {x} [P].{c} r || [A].{x} – {b} ||2

Aplica el programa que realices a la determinación de la solución del sistema

1

2

1 1 0x1 1 1

.x2 1 2

3 1 3

⎡ ⎤ ⎧ ⎫⎢ ⎥ ⎪ ⎪− ⎧ ⎫ ⎪ ⎪⎢ ⎥ =⎨ ⎬ ⎨ ⎬⎢ ⎥ ⎩ ⎭ ⎪ ⎪⎢ ⎥ ⎪ ⎪−⎣ ⎦ ⎩ ⎭

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

:= A

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

1. 1.-1. 1.2. 1.-3. 1.

> b:=vector(4,[0,1,2,3]); := b [ ], , ,0 1 2 3

> AT:=transpose(A);

:= AT ⎡⎣⎢⎢

⎤⎦⎥⎥

1. -1. 2. -3.1. 1. 1. 1.

> M:=evalm(AT&*A);

:= M ⎡⎣⎢⎢

⎤⎦⎥⎥

15. -1.-1. 4.

Page 5: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

4

> c:=evalm(AT&*b); := c [ ],-6. 6.

> P:=inverse(M);

:= P ⎡⎣⎢⎢

⎤⎦⎥⎥

0.06779661017 0.016949152540.01694915254 0.2542372881

> x:=evalm(P&*c); := x [ ],-0.3050847458 1.423728814

> r:=norm(A&*x-b,2); := r 1.904499579

> fin_del_segundo_ejercicio; fin_del_segundo_ejercicio

Tercer ejercicio (5 Puntos)

A) Escribe un procedimiento, llamado coeft, que con los parámetros de entrada (datos en el momento de utilizarlo) n (número entero no negativo), z (número real) y f (función de una variable x), calcule los (n+1) primeros coeficientes del polinomio de Taylor de grado n de la función f(x) en torno al punto z. Se recuerda que estos coeficientes están dados por la expresión:

ci = (if (z)i!

(i = 0, ..., n)

y que la derivada i-ésima de una función en el punto z puede calcularse con en MAPLE 7 escribiendo (D@@i)(f)(z). Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero coeft.m

B) Escribe un procedimiento, llamado poltay, que tomando como parámetros de entrada el entero no negativo n, el número real z y el vector c = {c0, c1, ..., cn} de los coeficientes del polinomio de Taylor de una cierta función, calcule el polinomio de Taylor de grado n de la función en torno al punto z. Este polinomio, p(x), deberá obtenerse como una función y se recuerda que dicho polinomio responde a la expresión:

nj

jj 0

p(x) c .(x z)=

= −∑

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero poltay.m

Page 6: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

5

C) Escribe un programa MAPLE en el que leyendo del disquete y utilizando

los procedimientos anteriores se calculen los 11 polinomios de Taylor que se obtienen al desarrollar en torno al punto z = 1 la función

x

10f(x) x.cos(x).e⎛ ⎞⎜ ⎟⎝ ⎠=

considerando n = 0, n = 1, n = 2, ....., n = 10. Estos 11 polinomios deberán representarse, junto a la función f(x), en una misma gráfica en la que la ventana de dibujo sea el producto cartesiano de la porción de ejes –2 < x < 4, -5 < y < 2.

Solución: A) > restart; > coeft:=proc(n,z,f,c) local i: for i from 0 to n by 1 do c[i]:=(D@@i)(f)(z)/i!: od: end: > save coeft,"coeft.m": > fin;

fin

B) > restart; > poltay:=proc(n,z,c,p) p:=x->sum(c[j]*(x-z)^j,j=0..n): end: > save poltay, "poltay.m": > fin;

fin

C) > restart; > with(plots): Warning, the name changecoords has been redefined > read "coeft.m": read "poltay.m": > nmax:=10:

Page 7: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

6

> c:=array(0..nmax): > z:=1.;

:= z 1.

> f:=x->x*cos(x)*exp(x/10); := f → x x ( )cos x e( )/1 10 x

> dibuf:=plot(f(x),x=-2..4,-5..2,color=blue):dibuf;

> col[0]:=`black`:col[1]:=`green`:col[2]:=`grey`: col[3]:=`magenta`:col[4]:=`khaki`:col[5]:=`brown`: col[6]:=`gold`:col[7]:=`plum`:col[8]:=`sienna`: col[9]:=`navy`: col[10]:=`red`: > for n from 0 to nmax by 1 do coeft(n,z,f,c): poltay(n,z,c,p[n]): dibp[n]:=plot(p[n](x),x=-2..4,-5..2,color=col[n]): od: > for i from 0 to nmax by 1 do print(`p[`,i, `](x) = `, expand(p[i](x))); od;

, , ,p[ 0 ](x) = 0.5971263954 , , ,p[ 1 ](x) = − 0.8702566212 0.2731302258 x

, , ,p[ 2 ](x) = − + − 0.3885744908 2.244531998 x 1.258831112 x2

, , ,p[ 3 ](x) = − + − − 0.1205882310 1.440573219 x 0.4548723326 x2 0.2679862598 x3

Page 8: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

7

p[ 4 ](x) = 0.0387344321 0.803282566 x 0.5010636460 x2 0.9052769122 x3 + + − , , ,0.1593226631 x4 +

p[ 5 ](x) = 0.00454032923 0.974253081 x 0.1591226170 x2 0.5633358835 x3 + + − , , ,0.0116478513 x4 0.03419410287 x5 − +

p[ 6 ](x) = 0.06918663847 x2 0.005995731922 x6 0.07016849440 x5 − + , , ,1.010227472 x 0.001455402692 0.4434212451 x3 0.1015838301 x4 + − − −

p[ 7 ](x) = 0.000067600355 0.09833048725 x2 0.001387802337 x7− + − , , ,0.003718884437 x6 0.04102464532 x5 1.000512857 x 0.4919943269 x3 + + + −

0.05301074830 x4 −

p[ 8 ](x) = 0.1010056189 x2 0.00002794004718 0.002152125554 x7 + − , , ,0.006394015698 x6 0.03567438280 x5 0.9997485336 x 0.4973445894 x3 + + + −

0.04632292013 x4 0.00009554040218 x8 − +

p[ 9 ](x) = 0.00002761184843 x9 0.1000115924 x2 0.001158099011 x7 + − , , ,0.004074620430 x6 0.03915347570 x5 0.9999970406 x 0.32819875 10-6 + + + +

0.4950251941 x3 0.04980201300 x4 0.0001529662337 x8 − − −

p[ 10 ](x) = 0.00003408694966 x9 0.09998245357 x2 0.001080397796 x7 + − , , ,0.003938643304 x6 0.03931664825 x5 0.6475101235 10-6 x10 1.000003515 x + + − +

0.3193113735 10-6 0.4949474929 x3 0.0499379901 x4 0.0001821041893 x8 − − − −

> display(dibuf,seq(dibp[j],j=0..nmax));

Page 9: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

8

LO QUE SIGUE NO SE PIDE EN ESTE EJERCICIO Y SE MUESTRA PARA AQUELLOS ALUMNOS QUE QUIERAN AMPLIAR SUS CONOCIMIENTOS

CON ANIMACIONES EN MAPLE.

Page 10: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

9

Examen de Laboratorio (Grupo 4º - Martes de 18h a 20h)

Fecha: 4 – VI – 2001

Primer ejercicio (2,5 puntos) El diagrama de fase de un sistema de 2 ecuaciones diferenciales de la forma:

x '(t) f(t,x(t),y(t)) 0<t T

y '(t) g(t,x(t),y(t))=⎧ ⎫

≤⎨ ⎬=⎩ ⎭

x(0) = x0 , y(0) =y0

es la curva del plano formada por todos los puntos (x(t), y(t)). Para el caso del sistema diferencial :

cos(y(t ))

cos(5.x( t ))

x '(t) 2.(e sen(x(t)) 0<t 10y '(t) e sen(y(t))

⎧ ⎫= −≤⎨ ⎬

= −⎩ ⎭

x(0)= 12 , y(0) = 1’6

se pueden obtener algunos puntos del diagrama de fases utilizando el método de Euler. Más concretamente, siendo (N+1) el número de puntos (xk, yk) que se desean obtener del diagrama de fases, se denominará: h = 10/ N, y con este valor se calcularán las coordenadas:

( )( )

k

k

cos(y )k 1 k k

cos(5.x )k 1 k k

x x 2.h. e sen(x ) (k = 0, 1, ..., N-1)

y y h. e sen(y )

+

+

⎫= + − ⎪⎬

= + − ⎪⎭

partiendo de (x0, y0) = (12, 1’6). Se pide calcular y representar en una figura los 501 primeros puntos (es decir N = 500) del diagrama de fases del sistema diferencial anterior . Solución: > restart; > with(plots): Warning, the name changecoords has been redefined > np:=500: TF:=10.: h:=TF/np;

:= h 0.02000000000

> x:=array(0..np): y:=array(0..np): > x[0]:=12.;y[0]:=1.6;

:= x0 12.

:= y0 1.6

Page 11: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

10

> for i from 0 to np-1 by 1 do t:=i*h: x[i+1]:=x[i]+h*2*(exp(cos(y[i]))-sin(x[i])): y[i+1]:=y[i]+h*(exp(cos(5*x[i]))-sin(y[i])): od: > ptos:=[seq([x[k],y[k]],k=0..np)]: > pointplot(ptos,symbol=circle,color=blue,connect=true);

LO QUE SIGUE NO SE PIDE EN ESTE EJERCICIO Y SE MUESTRA PARA AQUELLOS ALUMNOS QUE QUIERAN AMPLIAR SUS CONOCIMIENTOS

CON ANIMACIONES EN MAPLE

Page 12: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

11

Segundo ejercicio (2’5 Puntos) El método de Jacobi cíclico permite determinar los valores y los vectores propios de una matriz simétrica. Para ello se realizan una serie de transformaciones que convierten a la matriz dada inicialmente en una matriz “prácticamente” diagonal con lo que los valores de su diagonal pueden ser tomados como valores propios de la matriz. En el algoritmo siguiente se recoge este método. En él, al finalizar los bucles indicados, la matriz [A] contiene en su diagonal los valores propios buscados, y las columnas de la matriz [VP] son los vectores propios buscados.

Page 13: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

12

Datos: números: n, eps, maxiter matriz de dimensiones (n, n): [A] Definir la matriz [I] como la matriz identidad dimensiones (n, n) Definir dos matrices de dimensiones (n, n): [VP], [G]. [VP] [ I ]

Calcular M:= n 1 n

2i,j

i 1 j i 12. A

= = +∑ ∑

iter 1 Mientras ((M> eps) Y (iter < maxiter)) hacer: Para i desde 1 hasta (n-1) con paso 1 hacer: Para j desde (i+1) hasta n con paso 1 hacer: Si (A[i , j] ≠ 0) entonces: [G] [I]: β (A[j , j] – A[i , i]) / (2.A[i , j]) t - β + 21+ β

t1 - β - 21+ β

Si ( | t1 | < | t | ) entonces: t t1 Fin condición

c 2

11 t+

s t.c Gi,j s Gj,i -s Gi,i c Gjj c M M – 2.(A[i ,j])2 [A] [G]T.[A].[G] [VP] [VP].[G] Fin condición Fin bucle en j Fin bucle en i iter iter +1 Fin bucle condicional Se pide que escribas un programa en MAPLE recogiendo el algoritmo siguiente y que lo apliques con los datos: n = 5, eps = 10-6, maxiter = 100, y buscando los valores y vectores propios de la matriz:

Page 14: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

13

[ ]

1 2 3 4 52 5 7 9 11

A 3 7 4 6 84 9 6 1 15 11 8 1 10

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

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

:= A

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

1. 2. 3. 4. 5.2. -5. 7. -9. 11.3. 7. -4. -6. -8.4. -9. -6. 1. -1.5. 11. -8. -1. 10.

> AA:=evalm(A): > UNO:=matrix(n,n,[1.,0.,0.,0.,0.,0.,1.,0.,0.,0.,0.,0.,1.,0.,0.,0.,0.,0.,1.,0.,0.,0.,0.,0.,1.]);

:= UNO

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

1. 0. 0. 0. 0.0. 1. 0. 0. 0.0. 0. 1. 0. 0.0. 0. 0. 1. 0.0. 0. 0. 0. 1.

También podría hacerse más brevemente > UNO:=Matrix(n,n,shape=identity);

:= UNO

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 1

> VP:=matrix(n,n,[]):VP:=evalm(UNO): > m:=0.: for i from 1 to (n-1) by 1 do for j from (i+1) to n by 1 do m:= m + 2.*A[i,j]^2: od: od:

Page 15: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

14

> eps:=1.*10^(-6.): maxit:=100: > iter:=0.: while ((m>eps) and (iter < maxit)) do for i from 1 to n-1 by 1 do for j from (i+1) to n by 1 do if (A[i,j] <> 0.) then G:=evalm(UNO): beta:=(A[j,j]-A[i,i])/(2.*A[i,j]): t:=-beta+sqrt(1+beta^2): t1:=-beta-sqrt(1+beta^2): if (abs(t1) < abs(t)) then t:=t1: fi: c:=1./sqrt(1.+t^2): s:=t*c: G[i,j]:= s: G[j,i]:=-s: G[i,i]:= c: G[j,j]:= c: m:=m-2.*A[i,j]^2: GT:=transpose(G): A:=evalm(GT&*A&*G): VP:=evalm(VP&*G): fi: od: od: iter:=iter+1: od: > m;

-0.7453435817 10-6

> for i from 1 to n by 1 do lambda[i]:=A[i,i]; od;

:= λ1 2.793745847

:= λ2 -11.28497758

:= λ3 -18.55347321

:= λ4 11.53876576

:= λ5 18.50593917

Comprobemos que estan bien calculados los valores propios: > eigenvalues(AA);

, , , ,-18.55347318 -11.28497755 2.793745846 11.53876571 18.50593917

Los vectores propios asociados pueden generarse con las columnas de la siguiente matriz > evalm(VP);

Page 16: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

15

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

0.8487976544 -0.4332583086 -0.1031687352 0.1692299709 0.22923178470.06272882533 0.3916908762 -0.6951488626 -0.3722133985 0.46996659320.4264315200 0.4597349846 0.5513579576 -0.5472178313 -0.057939220750.2501753630 0.6609534096 -0.1073426228 0.6649957215 -0.2163588053-0.1765675091 0.1031980312 0.4365847420 0.3019134644 0.8224451999

> fin_del_segundo_ejercicio; fin_del_segundo_ejercicio

Tercer ejercicio (5 Puntos). a) Escribir un procedimiento, llamado schebys, en el que se calculen los (n+1)

puntos del soporte de Chebyshev en un intervalo [a, b] que están dados por la expresión:

ia b b a 2.i 1x .cos .

2 2 2.n 2+ − +⎛ ⎞= + π⎜ ⎟+⎝ ⎠

Serán datos del procedimiento los valores del indicador del número de puntos (n), y los valores del extremo del intervalo (a y b). El resultado del procedimiento será un vector conteniendo los (n+1) puntos del soporte.

b) Escribir un procedimiento, llamado polgri, que teniendo como datos los

valores del indicador del número de puntos (n), el valor del índice i, y el vector {s} conteniendo los (n+1) puntos de un soporte, calcule el i-ésimo polinomio de base de Lagrange dado por la expresión:

nj

ij 0 i jj i

x sL (x)

s s=≠

−=

−∏

c) Escribir un procedimiento, llamado pbasel, que utilizando el procedimiento

polgri descrito en el apartado anterior, calcule los (n+1) polinomios de base de Lagrange asociados a un soporte {s} de (n+1) puntos. Serán datos del procedimiento el valor de n y el vector de puntos del soporte. El resultado serán los (n+1) polinomios de base.

d) Escribir un procedimiento, llamado coefintegr, que utilizando el

procedimiento pbasel descrito en el apartado anterior, calcule los (n+1) coeficientes de una fórmula de integración numérica de tipo interpolatorio

Page 17: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

16

construida sobre el soporte {s}. Para ello se sabe que estos coeficientes están dados por:

b

i ia

c L (x).dx= ∫ (i = 0...n)

Serán datos de este procedimiento el valor de n, los extremos del intervalo [a, b] y los puntos del soporte s. El resultado será el vector de coeficientes {c}. Se recuerda que la integral entre α y β de una función g(x) puede calcularse en MAPLE con el comando: >int(g(x), x=α..β): e) Aplicar las subrutinas schebys y coefintegr para determinar la fórmula de integración numérica de tipo interpolatorio construida sobre un soporte de Chebyshev con 6 puntos en el intervalo de integración [-1, 1]. Aplicar la fórmula

a la determinación de la integral: 1

sen(2.x)

1

e dx−∫ , y comparar con el valor exacto

de dicha integral.

Solución: A) > restart; > schebys:=proc(n,a,b,s) local ab, amb, i: ab:=(a+b)/2.: amb:=(b-a)/2.: for i from 0 to n by 1 do s[i]:= ab + amb*evalf(cos((2*i+1.)*Pi/(2*n+2.))): od: end: > save schebys,"schebys.m": > fin_del_primer_procedimiento;

fin_del_primer_procedimiento

B) > restart; > polgri:=proc(n,i,s,p) p:=x->mul((x-s[j])/(s[i]-s[j]),j=0..i-1)*mul((x-s[j])/(s[i]-s[j]),j=i+1..n): end: > pbasel:=proc(n,s,L) local i: for i from 0 to n by 1 do polgri(n,i,s,L[i]): od: end:

Page 18: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

17

> save polgri,pbasel,"pbasel.m": > fin_del_segundo_procedimiento;

fin_del_segundo_procedimiento

C) > restart; > coefintegr:=proc(n,s,a,b,c) local i, L: L:=array(0..n): read "pbasel.m": pbasel(n,s,L): for i from 0 to n by 1 do c[i]:=int(L[i](x),x=a..b): od: end: > save coefintegr,"coefintegr.m": > fin_del_tercer_procedimiento;

fin_del_tercer_procedimiento

D) > restart; > with(plots): Warning, the name changecoords has been redefined > read "coefintegr.m": read "schebys.m": > n:=5:a:=-1.:b:=1.: > s:=array(0..n): > schebys(n,a,b,s): > c:=array(0..n): > coefintegr(n,s,a,b,c): > formula:=sum(c[i]*f(s[i]),i=0..n); formula 0.1186610215 ( )f 0.9659258263 0.3777777775 ( )f 0.7071067811 + :=

0.5035612006 ( )f 0.2588190451 0.5035612007 ( )f -0.2588190455 + + 0.3777777771 ( )f -0.7071067811 0.1186610217 ( )f -0.9659258263 + +

> f:=x->exp(sin(2*x)); := f → x e ( )sin 2 x

> plot(f(x),x=-1..1);

Page 19: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

18

> formula;

2.637039680

> int(f(x),x=-1...1.); 2.636223942

> fin_del_ejercicio; fin_del_ejercicio

Page 20: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

19

Examen de Laboratorio (Grupo 5º - Jueves de 16h a 18h)

Fecha: 6 – VI – 2002 Primer ejercicio (2’5 Puntos) El modelo depredador-presa de Lotka y Volterra simula la evolución de la población de una especie depredadora (por ejemplo, zorros) y una especie presa (por ejemplo, conejos) en un ecosistema ideal (cerrado, en el que sólo existan estas dos especies y en el que haya alimento suficiente para la especie presa). Dicho modelo se expresa por el sistema diferencial:

z '(t)f(z(t),c(t) t>0

c '(t)⎫⎧ ⎫

=⎨ ⎬ ⎬⎩ ⎭ ⎭

z(0) = z0 , c(0) = c0 donde z(t) es la población de depredadores en el instante t, c(t) la población de presas en el instante t, z0 y c0 son las poblaciones iniciales que se suponen conocidas y f(z(t),c(t)) es una función vectorial de dos componentes y

dependientes de dos variables (las poblaciones de depredadores y presas). Una forma (aproximada) de conocer la evolución de la población en el periodo (0 , T) consiste en tomar (NP+1) instantes ti en dicho periodo y estimar por el método de Euler las poblaciones existentes en el instante ti+1 a partir de las existentes en el instante ti. Más concretamente, partiendo de:

t0 = 0, z0 conocido y c0 conocido se genera: ti+1 = ti + h (i = 0, 1, ...., NP-1)

i 1 i 1 i i

i 1 i 2 i i

z z f (z ,c )h. (i 0,1,...,NP 1)

c c f (z ,c )+

+

⎫⎧ ⎫ ⎧ ⎫ ⎧ ⎫⎪= + = −⎨ ⎬ ⎨ ⎬ ⎨ ⎬⎬⎪⎩ ⎭ ⎩ ⎭ ⎩ ⎭⎭

siendo h = T / NP, y f1(z, c) y f2(z, c) las dos componentes de la función vectorial f(z(t),c(t)) .

Se pide que calcules según el esquema anterior la evolución de una población de zorros y conejos en un ecosistema ideal en el que inicialmente haya 4 zorros y 20 conejos (z0 = 4, c0 = 20), tomando NP = 5000 y T = 25.0 y sabiendo que la función que rige el equilibrio entre ambas especies está dada por la expresión:

0.16 z 0.03 z cf(z,c)

4.5 c 0.9 z c− ⋅ + ⋅ ⋅⎧ ⎫

= ⎨ ⎬⋅ − ⋅ ⋅⎩ ⎭

Page 21: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

20

Una vez calculados los valores de cada población en los instantes ti, deberá representarse en una misma gráfica las dos secuencias de puntos (ti, zi) y (ti, ci). Solución: > restart; > with(plots): Warning, the name changecoords has been redefined > f:=(z,c)->vector(2,[-0.16*z+0.03*z*c,4.5*c-0.9*z*c]);

:= f → ( ),z c ( )vector ,2 [ ],− + 0.16 z 0.03 z c − 4.5 c 0.9 z c

> np:=5000; T:=25.; := np 5000 := T 25.

> z:=array(0..np): c:=array(0..np): t:=array(0..np): v:=vector(2,[]): t[0]:=0.: z[0]:=4.: c[0]:=20.: > h:=T/np: for i from 0 to (np-1) by 1 do v:=f(z[i],c[i]): t[i+1]:=i*h: z[i+1]:=z[i]+h*v[1]: c[i+1]:=c[i]+h*v[2]: od: > zorros:=[seq([t[k],z[k]],k=0..np)]: conejos:=[seq([t[k],c[k]],k=0..np)]: > dzorros:=pointplot(zorros,symbol=box,color=red,connect=true): dconejos:=pointplot(conejos,symbol=circle,color=blue,connect=true): > display(dzorros,dconejos,labels=[`tiempo`,`unidades`],labeldirections=[HORIZONTAL,VERTICAL]);

Page 22: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

21

LO QUE SIGUE NO SE PIDE EN ESTE EJERCICIO Y SE MUESTRA PARA AQUELLOS ALUMNOS QUE QUIERAN AMPLIAR SUS CONOCIMIENTOS

CON ANIMACIONES EN MAPLE

Page 23: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

22

Segundo ejercicio (2’5 Puntos) Dada una base {{v(1)}, {v(2)}, ..., {v(n)}} de nR , el proceso de ortonormalización de Gramm-Schmidt permite obtener a partir de ella otra base {{u1)}, {u(2)}, ..., {u(n)}} ortogonal. Asimismo, denotaremos por [A] y [B] a las matrices cuyas columnas son las componentes de los vectores de ambas bases, es decir:

(1) (2) (n)1 1 1(1) (2) (n)2 2 2

(1) (2) (n)n n n

v v ... vv v ... v

[A]... ... ... ...v v ... v

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

,

(1) (2) (n)1 1 1(1) (2) (n)2 2 2

(1) (2) (n)n n n

u u ... uu u ... u

[B]... ... ... ...u u ... u

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

Con ellas, la matriz de cambio de coordenadas de la base original a la

base ortonormal puede obtenerse como [C] = [A].[B]-1. En este ejercicio se pide que escribas un programa MAPLE para obtener una base ortonormal a partir de una base dada de nR y para determinar la matriz de cambio de base de una a otra. Para ello, utilizando la notación empleada anteriormente, debes seguir el siguiente algoritmo: Dados: n, [A] Para i = 1 hasta i = n, con paso 1, hacer Para j = 1 hasta j = n, con paso 1, hacer (i)

j j,iv A← Fin bucle en j Fin bucle en i

{ } { } { }(1) (1)

(1)

2

1u . vv

Para i = 2 hasta i = n, con paso 1, hacer

{ } { } { } { }( ) { }(i 1)

(i) (i) (i) ( j) ( j)

k 1u v v u . u

=

← − ∑ i (Nota: ( {u} . {v} ) representa el

producto escalar de {u} y {v})

{ } { } { }(i) (i)

(i)

2

1u . uu

Fin bucle en i. Para i = 1 hasta i = n, con paso 1, hacer Para j = 1 hasta j = n, con paso 1, hacer (i)

j,i jB u← Fin bucle en j Fin bucle en i [C] [A].[B]-1

Page 24: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

23

Utiliza el programa anterior con n = 3 y con

1 2 1[A] 1 0 1

4 1 1

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

Solución: > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected > n:=3: > A:=matrix(3,3,[1,2,1,1,0,-1,-4,1,1]);B:=matrix(3,3,[]):

:= A⎡

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

1 2 11 0 -1

-4 1 1

> w:=vector(3,[1,1,-4]); := w [ ], ,1 1 -4

> evalm(inverse(A)&*w); [ ], ,1 0 0

> for i from 1 to n by 1 do v[i]:=vector(3,[]): u[i]:=vector(3,[]): od: > for i from 1 to n by 1 do for j from 1 to n by 1 do v[i][j]:=A[j,i]: od: od: > u[1]:=evalm((1/norm(v[1],2))*v[1]);

:= u1⎡⎣⎢⎢

⎤⎦⎥⎥, ,2

62

6 −2 2

3

> for i from 2 to n by 1 do u[i]:=evalm(v[i]): for j from 1 to (i-1) by 1 do aux:=dotprod(v[i],u[j]): u[i]:=evalm(u[i]-aux*u[j]): od: u[i]:=evalm((1/norm(u[i],2))*u[i]): od: > evalm(u[2]);evalm(u[3]);

Page 25: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

24

⎡⎣⎢⎢

⎤⎦⎥⎥, ,19 43

12943

1295 43129

⎡⎣⎢⎢

⎤⎦⎥⎥, ,86

86 −9 86

86 −86

43

> for i from 1 to n by 1 do for j from 1 to n by 1 do B[i,j]:=u[j][i]: od: od: > C:=evalm(A&*inverse(B));

:= C

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

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

+ + 2

638 43

12986

86 + − 2

62 43

1299 86

86 − + − 2 2

310 43

12986

43

− 2

686

86 + 2

69 86

86 − + 2 2

386

43

− + + 2 2

319 43

12986

86 − + − 2 2

343

1299 86

86 + − 8 2

35 43129

8643

> evalf(evalm(C)); ⎡

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

2.275183590 -0.6331269849 -0.65014602010.1278694872 1.206197219 -0.72714349500.1308480105 -1.862471144 3.809734904

> fin_del_segundo_ejercicio; fin_del_segundo_ejercicio

Tercer ejercicio (5 Puntos)

A) Escribe un procedimiento, llamado respectral, que con los parámetros de entrada (datos en el momento de utilizarlo) n (número entero estrictamente positivo) y L (matriz de dimensiones (n,n)), calcule el radio espectral de la matriz L. Se recuerda que el radio espectral es el mayor de los módulos de los valores propios de la matriz y que le sentencia eigenvalues(A) proporciona todos los valores propios de la matriz A. Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero respectral.m

B) Escribe un procedimiento, llamado edf, que tomando como parámetros de entrada el entero no negativo n, y la matriz A de dimensiones (n,n) , calcule otras tres matrices DD, E y F definidas mediante las expresiones:

Page 26: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

25

i,ji,j

0 si i jDD (i,j=1,...,n)

A si i=j≠⎧ ⎫

= ⎨ ⎬⎩ ⎭

i,ji,j

0 si i<jE (i,j=1,...,n)

-A si i>j⎧ ⎫

= ⎨ ⎬⎩ ⎭

i,ji,j

-A si i<jF (i,j=1,...,n)

0 si i>j⎧ ⎫

= ⎨ ⎬⎩ ⎭

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero edf.m

C) Escribe un procedimiento, llamado mrelaj, que tomando como

parámetros de entrada el número real w, y tres matrices cuadradas DD, E y F, calcule otras matriz cuadrada L definida mediante la expresión:

L = [DD-w.E]-1.[(1-w).DD+w.F]

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero mrelaj.m

D) Escribe un programa MAPLE en el que dados un valor del entero

positivo n, un número real eps, otro entero positivo maxiter, una matriz A cuadrada y de dimensiones (n, n), un vector x de n elementos, un vector b de n elementos y leyendo del disquete y utilizando los procedimientos anteriores se realice el siguiente proceso:

D-1º) Se descomponga la matriz A en las matrices DD, E y F descritas en el procedimiento edf. D-2º) Para los valores del parámetro w = 0, 0.05, 0.10, 0.15, 0.20, ......, 1.90, 1.95, 2.00, se evalúe la correspondiente matriz

Lw = [DD-w.E]-1.[(1-w).DD+w.F] así como el radio espectral de ella. D-3º) Se seleccione, de entre los anteriores valores de w, aquél w* para el que se hace menor el valor del radio espectral de la matriz Lw. Para dicho valor w* se calculará la matriz Lw* correspondiente y el vector c = w.[DD-w.E]-1.b.

Page 27: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

26

D-4º) Inicializándose la variable iter con el valor 0 y la variable tol con el valor (2.eps), mientras iter sea menor que maxiter y además tol sea mayor que eps, se repetirá el proceso iterativo: xn Lw*.x + c tol || xn – x||2 iter iter + 1 x xn D-5º) Se escriba tras el proceso iterativo el valor de iter, de tol y el vector A.xn – b. Como datos de este programa del apartado D) utilícense: n = 4, eps = 10-7, maxiter = 100,

5. 1.2 1. 2.5. 5 1. 1.

A1. 1. 4. 1.

1. 1. 1. 12.

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

,

4.1.

b4.1.

⎧ ⎫⎪ ⎪−⎪ ⎪= ⎨ ⎬⎪ ⎪⎪ ⎪⎩ ⎭

,

1.1.

x1.1.

⎧ ⎫⎪ ⎪⎪ ⎪= ⎨ ⎬⎪ ⎪⎪ ⎪⎩ ⎭

Solución: A) > restart; > respectral:=proc(n,A,radio) local VP: with(linalg): VP:=vector(n,[]): VP:= evalf(eigenvalues(A)): radio:=max(seq(abs(VP[j]),j=1..n)); end: > save respectral,"respectral.m": > fin_primer_procedimiento;

fin_primer_procedimiento

B) > restart; > edf:=proc(n,A,DD,E,F) local i, j: with(linalg): DD:=matrix(n,n,[]): E:= matrix(n,n,[]): F:= matrix(n,n,[]):

Page 28: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

27

for i from 1 to n by 1 do for j from 1 to n by 1 do if (i > j) then DD[i,j]:=0.: E[i,j]:=-A[i,j]: F[i,j]:= 0.: elif (i < j) then DD[i,j]:=0.: E[i,j]:=0.: F[i,j]:=-A[i,j]: else DD[i,j]:=A[i,j]: E[i,j]:=0.: F[i,j]:=0.: fi: od: od: end: > save edf,"edf.m": > fin_segundo_procedimiento;

fin_segundo_procedimiento

C) > restart; > mrelaj:=proc(w,DD,E,F,L) L:= evalm((inverse(evalm(DD-w*E))) &* ((1.-w)*DD + w*F)): end: > save mrelaj,"mrelaj.m": > fin_tercer_procedimiento;

fin_tercer_procedimiento

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 > n:=4;maxiter:=100;eps:=1.*10^(-7.);

:= n 4 := maxiter 100

:= eps 0.1000000000 10-6

> A:=matrix(n,n,[]): L:=matrix(n,n,[]): b:=vector(n,[4,-1,4,1.]): c:=vector(n,[]): x:=vector(n,[1.,1.,1.,1.]): xn:=vector(n,[]):

Page 29: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

28

r:=array(0..40): > > A[1,1]:=5.: A[1,2]:=1.2: A[1,3]:=1.: A[1,4]:=-2.: A[2,1]:=5.: A[2,2]:=5.: A[2,3]:=1.: A[2,4]:=-1.: A[3,1]:=-1.: A[3,2]:=1.: A[3,3]:=4.: A[3,4]:=1.: A[4,1]:=1.: A[4,2]:=-1.: A[4,3]:=1.: A[4,4]:=-12.: > evalm(A);

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

5. 1.2 1. -2.5. 5. 1. -1.-1. 1. 4. 1.1. -1. 1. -12.

> read "respectral.m": read "mrelaj.m": read "edf.m": > edf(n,A,DD,E,F): > for i from 0 to 40 by 1 do w:=i*0.05: mrelaj(w,DD,E,F,L): respectral(n,L,r[i]): end: > prades:=[seq([0.05*k,r[k]],k=0..40)]: > pointplot(prades,symbol=box,color=red,labels=[`omega`,`radio espectral`], labeldirections=[HORIZONTAL,VERTICAL]);

Page 30: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

29

> j:=0:rmin:=r[0]: > for k from 1 to 40 by 1 do if (r[k]<rmin) then rmin:=r[k]: j:=k: fi: od: > rmin;j;w:=j*0.05;

0.1919393863 21

:= w 1.05

> mrelaj(w,DD,E,F,L): > c:= evalm(w*inverse(evalm(DD-w*E))&*b);

:= c [ ], , ,0.8400000000 -1.092000000 1.557150000 0.2178006250

> iter:=0: tol:=2.*eps: while ((iter<maxiter) and (tol>eps)) do xn:=evalm(evalm(L&*x)+c): tol:=norm(evalm(xn-x),2): iter:=iter+1: x:=evalm(xn): od: > iter;tol;

12

0.3953226530 10-7

> evalm(xn); [ ], , ,0.9212215029 -1.377517144 1.516043371 0.2345651684

> evalm(A&*x-b); [ ], , ,-0.25 10-7 -0.3 10-8 0.5 10-8 -0.3 10-8

> fin_ejercicio; fin_ejercicio

Page 31: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

30

Examen de Laboratorio (Grupo 6º - Jueves de 18h a 20h)

Fecha: 6 – VI – 2002 Primer ejercicio (2’5 Puntos) Considera las 4 abscisas s1 = 27., s2 = 27.7, s3 = 28. y s4 = 29, y las cuatro funciones: f1(x) = 5’2 – 1’263 . (x – s1 ) – 0.660 .(x – s1)2 + 0.314 . (x – s1)3

f2(x) = 4’1 + 0’749 . (x – s2 ) – 0.910 . (x – s2)3

f3(x) = 4’3 + 0’503 . (x – s3 ) – 0.819 .(x – s3)2 + 0.116 . (x – s3)3

f4(x) = 4’1 – 0’787 . (x – s4 ) – 0.470 .(x – s4)2 + 0.157 . (x – s4)3

En el intervalo (27, 30) se seleccionan un total de (np+1) abscisas pi uniformemente distribuidas. A cada abscisa pi se le asocia una ordenada vali mediante la siguiente regla: Si pi < s2 entonces vali = f1(pi) Si s2 ≤ pi < s3 entonces vali = f2(pi) Si s3 ≤ pi < s4 entonces vali = f3(pi) En otro caso vali = f4(pi) Se pide que calcules y dibujes la secuencia de puntos (pi, vali) (i = 0, 1, ..., np), tomando como valor indicador del número de puntos np = 100. Solución: > restart; > with(plots): Warning, the name changecoords has been redefined > n:=4;np:=100;

:= n 4 := np 100

> a:=27.;b:=30.;

Page 32: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

31

:= a 27. := b 30.

> s:=vector(n,[27.,27.7,28.,29.]): p:=array(0..np): val:=array(0..np): > f:=array(1..n): > f[1]:=x->5.2-1.263*(x-s[1])-0.660*(x-s[1])^2+0.314*(x-s[1])^3: f[2]:=x->4.1+0.749*(x-s[2])-0.910*(x-s[2])^3: f[3]:=x->4.3+0.503*(x-s[3])-0.819*(x-s[3])^2+0.116*(x-s[3])^3: f[4]:=x->4.1-0.787*(x-s[4])-0.470*(x-s[4])^2+0.157*(x-s[4])^3: > h:=(b-a)/np: for i from 0 to np by 1 do p[i]:=a+i*h: if (p[i] < s[2]) then: val[i]:=f[1](p[i]): elif (p[i] < s[3]) then val[i]:=f[2](p[i]): elif (p[i] < s[4]) then val[i]:=f[3](p[i]): else val[i]:=f[4](p[i]): fi: od: > ptos:=[seq([p[k],val[k]],k=0..np)]: > pointplot(ptos,symbol=circle,color=blue);

Page 33: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

32

> fin_primer_ejercicio;

fin_primer_ejercicio

Segundo ejercicio (2’5 Puntos) Una forma de triangularizar una matriz es utilizando las llamadas matrices de Householder. Escribe un programa en MAPLE que realice dicho proceso siguiendo para ello el algoritmo siguiente. En él se denota por [H] a la matriz de Householder en cada etapa del proceso iterativo, por {x}, {v} y {bç a tres vector de n elementos que se consideran vectores columna y el superíndice T denota la operación de trasponer. Asimismo se denota por (v iw) al producto escalar del vector {v} por el vector {w}. Con esta notación el algoritmo citado es el siguiente:

Page 34: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

33

Dados: n (entero positivo), [A] (matriz de dimensiones (n,n)) e [I] (matriz identidad de dimensiones (n, n))

Para i desde 1 hasta n con paso 1 hacer Para j desde 1 hasta n con paso 1 hacer Si (j < i) entonces xj 0 si no xj Aj,I fin condición bj Ij,I Fin bucle en j {v} {x} + ||{x}||2.{b}

[ ] [ ] { } { }T2H I . v . v(v v)

← −i

[A] [H].[A] Fin bucle Escribir la matriz [A]. Utiliza el programa anterior aplicándolo a la matriz de dimensiones (3, 3) siguiente:

1. 2. 3.[A] 1. 4. 6.

1. 2. 3.

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

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

:= A⎡

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

1. 2. 3.-1. 4. 6.1. -2. 3.

> II:=matrix(n,n): > for i from 1 to n by 1 do for j from 1 to n by 1 do if (i = j) then II[i,j]:=1: else II[i,j]:=0: fi: od: od: > evalm(II);

Page 35: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

34

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

1 0 00 1 00 0 1

También sería válido (y más breve) > II:=Matrix(n,n,shape=identity);

:= II⎡

⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥

1 0 00 1 00 0 1

> x:=vector(n,[]): v:=vector(n,[]): b:=vector(n,[]): H:=matrix(n,n,[]): > for i from 1 to n by 1 do for j from 1 to n by 1 do if (j < i) then x[j]:=0.: else x[j]:=A[j,i]: fi: b[j]:=II[j,i]: od: v:=evalm(x+norm(x,2)*b): H:=evalm(II-(evalm((2./dotprod(v,v))*evalm(v&*transpose(v))))): A:=evalm(H&*A): od: > evalm(A);

⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥

-1.732050808 2.309401076 -0.2 10-8

-0.1336306210 10-9 -4.320493800 -5.5549206020.4629100493 10-10 0. -4.810702350

> fin_del_segundo_ejercicio; fin_del_segundo_ejercicio

Page 36: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

35

Tercer ejercicio (5 Puntos)

A) Escribe un procedimiento, llamado mmincua, que con los parámetros de entrada (datos en el momento de utilizarlo) n (número entero estrictamente positivo), np (número entero positivo) y {s} (vector de np elementos), calcule una matriz [A] de dimensiones (n, n) dada por:

np np np

2 n 1k k k

k 1 k 1 k 1np np np np

2 3 nk k k k

k 1 k 1 k 1 k 1np np np np

2 3 4 n 1k k k k

k 1 k 1 k 1 k 1

np np npn 1 n 2.(n 1)k k k

k 1 k 1 k 1

np s s ... s

s s s ... s

[A]s s s ... s

... ... ... ... ...

s s ... s

= = =

= = = =

+

= = = =

− −

= = =

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

∑ ∑ ∑

∑ ∑ ∑ ∑

∑ ∑ ∑ ∑

∑ ∑ ∑

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero mmincua.m

B) Escribe un procedimiento, llamado vmincua, que tomando como datos n (número entero estrictamente positivo), np (número entero positivo) , {s} (vector de np elementos) y {y} (vector de np elementos), calcule un vector {c} de n elementos dado por:

{ }

np

kk 1

np

k kk 1np

2k k

k 1

npn 1

k kk 1

y

y .x

c y .x

...

y .x

=

=

=

=

⎧ ⎫⎪ ⎪⎪ ⎪⎪ ⎪⎪ ⎪⎪ ⎪⎪ ⎪= ⎨ ⎬⎪ ⎪⎪ ⎪⎪ ⎪⎪ ⎪⎪ ⎪⎪ ⎪⎩ ⎭

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero vmincua.m

Page 37: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

36

C) Escribe un programa MAPLE en el que dados un valor del entero positivo n, otro valor del enetero np, los extremos de un intervalo (a, b), y una función f(x), leyendo y utilizando los procedimientos anteriores se realice el siguiente proceso:

C-1º) Se obtengan np abscisas si uniformemente distribuidas en todo el intervalo (a, b) así como los valores yi = f(si). C-2º) Se calcule con el procedimiento descrito en mmincua la matriz de ajuste por mínimos cuadrados [A]. C-3º) Se calcule utilizando el procedimiento vmincua el vector {c} del ajuste por mínimos cuadrados. C-4º) Se resuelva el sistema [A].{coef} = {c} (ver “nota” al final del ejercicio.

C-5º) Se defina el polinomio p(x) = n

(i 1)i

i 1coef .x −

=∑

C-6º) Se represente en una misma gráfica y en colores diferentes, la función f(x) y el polinomio p(x). Dichas gráficas se realizarán en el rango de abscisas (a, b). Como datos de este programa del apartado D) utilícense: n = 7, np = 201, a = 0, b = 4, f(x) = esen(5.x)

NOTA: Un sistema de la forma A.x = b puede resolverse en MAPLE mediante el método de eliminación gaussiana mediante el procedimiento siguiente:

A:=augment(A,b): B:=gausselim(A): x:= backsub(B):

Solución:

Page 38: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

37

A) > restart; > mmincua:=proc(n,np,s,A) local i, j: for i from 1 to n by 1 do for j from 1 to n by 1 do A[i,j]:=sum(s[k]^(i+j-2),k=1..np): od: od: end: > save mmincua,"mmincua.m": > fin_primer_procedimiento;

fin_primer_procedimiento

B) > restart; > vmincua:=proc(n,np,s,y,b) local i: for i from 1 to n by 1 do b[i]:=sum(y[kk]*(s[kk]^(i-1)),kk=1..np): od: end: > save vmincua,"vmincua.m": > fin_segundo_procedimiento;

fin_segundo_procedimiento

C) > restart; > with(linalg):with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined > read "mmincua.m": > read "vmincua.m": > n:=7:np:=201: > s:=vector(np,[]): y:=vector(np,[]): A:=matrix(n,n,[]): c:=vector(n,[]): > a:=0.;b:=4;

:= a 0. := b 4

> f:=x->evalf(exp(sin(5.*x))); := f → x ( )evalf e ( )sin 5. x

Page 39: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

38

> h:=(b-a)/(np-1): > for i from 1 to np by 1 do s[i]:=a+(i-1)*h: y[i]:=f(s[i]): od: > mmincua(n,np,s,A): > evalm(A);

201 402.0000000 1074.680000 3232.080000 10368.42667 34647.46666[ , , , , , ,119086.8113]402.0000000 1074.680000 3232.080000 10368.42667 34647.46666[ , , , , ,

119086.8113 417839.7861, ]1074.680000 3232.080000 10368.42667 34647.46666 119086.8113[ , , , , ,

417839.7861 0.1489342004 107, ]3232.080000 10368.42667 34647.46666 119086.8113 417839.7861[ , , , , ,

0.1489342004 107 0.5374935017 107, ]10368.42667 34647.46666 119086.8113 417839.7861 0.1489342004 107[ , , , , ,

0.5374935017 107 0.1959367513 108, ]34647.46666 119086.8113 417839.7861 0.1489342004 107 0.5374935017 107[ , , , , ,

0.1959367513 108 0.7202144185 108, ]119086.8113 417839.7861 0.1489342004 107 0.5374935017 107[ , , , ,

0.1959367513 108 0.7202144185 108 0.2665835056 109, , ]

> vmincua(n,np,s,y,c): > evalm(c);

260.3361807 490.6206401 1294.847164 3869.728571 12389.14104 41514.57362, , , , , ,[143735.5653]

> A:=augment(A,c): > B:=gausselim(A): > coefs:=backsub(B): > p:=x->sum(coefs[k]*x^(k-1),k=1..n);

:= p → x ∑ = k 1

n

coefsk x( ) − k 1

> expand(p(x)); 2.055734742 1.351875306 x 1.290003145 x2 1.983358996 x3 1.595761483 x4 − + − +

0.5151333282 x5 0.05640549565 x6 − +

> dibp:=plot(p(x),x=a..b,color=red): dibf:=plot(f(x),x=a..b,color=blue): > display(dibp,dibf);

Page 40: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

39

> fin_del_tercer_ejercicio;

fin_del_tercer_ejercicio

Page 41: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

40

Asignatura: PROGRAMACIÓN Y MÉTODOS NUMÉRICOS

Examen de Laboratorio (Grupo A-Septiembre-02)

Fecha: 3 – IX – 2002 Duración: 2 horas Primer ejercicio (2’5 Puntos) Un problema curioso de la combinatoria consiste en determinar la probabilidad de que al reordenar al azar un conjunto de n elementos ninguno de ellos ocupe la misma posición que tenía. Por ejemplo, si el conjunto sólo tiene un elemento, llamémosle {a}, al reordenarlo seguirá siendo {a} y la probabilidad buscada es 0. Si el conjunto tiene 2 elementos, {a, b}, al reordenarlo al azar se podrá obtener {a, b} o {b, a}. De estas dos posibilidades sólo la primera satisface la condición de que ninguno de sus elementos está en el orden en que estaba. En resumen de las dos posibilidades sólo una de ellas tiene sus dos elementos en distinto orden por lo que la probabilidad buscada es ½ = 0.5. Si el conjunto tiene 3 elementos, {a, b, c}, al reordenarlo se podría obtener cualquiera de los casos siguientes: {a, b, c}, {a, c, b}, {b, a, c}, {c, b, a}, {b, c, a}, {c, a, b}. Sólo las dos últimas ordenaciones de las seis posibles verifican la condición de que ninguno de los elementos del conjunto no está en la misma posición que inicialmente ocupaba. Por tanto la probabilidad buscada es 2/6 = 1/3 = 0.333.... La probabilidad, pn, de que en la reordenación al azar de un conjunto de n elementos ninguno vuelva a ocupar la posición que tenía está dada por la expresión:

nP(n)pn!

=

donde n! es el número de reordenaciones posibles de los n elementos y P(n) es el número de permutaciones con desplazamiento de los n elementos. Aunque previamente otros matemáticos habían encontrado formas de determinar P(n), a finales del siglo XVIII Leonhard Euler determinó diferentes fórmulas para el cálculo de las permutaciones con desplazamiento de n elementos. Una de ellas, la que se utilizará en este ejercicio, es:

P(n) = (n-1).[P(n-1)+P(n-2)] siendo P(1) = 0 y P(2) = 1. Se pide que escribas un programa MAPLE que:

a) Para n = 1, 2, 3, ....., 35 y utlizando las expresiones anteriores determine la probabilidad pn de que al reordenar al azar un conjunto de n elementos ninguno de sus elementos ocupe la misma posición que tenía inicialmente.

Page 42: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

41

b) Representes en un mismo gráfico los puntos (m, pm) (con m = 1, 2, ..., 35) y la recta horizontal que pasa por la abscisa e-1. Los puntos represéntalos poniendo en la posición que ocupan un círculo rojo y la recta dibújala en color azul y en el intervalo (1, 35).

Solución: > restart; > with(plots):with(plottools): Warning, the name changecoords has been redefined Warning, the name arrow has been redefined > Digits:=20: > P[1]:=0: > P[2]:=1: > f[1]:=1: > f[2]:=2: > n:=35: > for i from 3 to n by 1 do f[i]:=i*f[i-1]: P[i]:=(i-1)*(P[i-1]+P[i-2]): od: > for i from 1 to n by 1 do prob[i]:=evalf(P[i]/f[i]): print(i," probabilidad = ",prob[i]): od:

Page 43: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

42

> recta:=x->exp(-1);

> puntos:=[seq( [j,prob[j]], j=1..n )]: > dibpun:=pointplot(puntos,color=red,symbol=CIRCLE): dibrec:=plot(recta,1..n,color=blue): > display(dibpun,dibrec);

Page 44: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

43

> fin;

Page 45: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

44

Segundo ejercicio (2’5 Puntos) El método de Lanczos es utilizado para transformar una matriz simétrica dada A en otra matriz tridiagonal T con los mismos valores propios que A (lo cual tene gran utilidad, por ejemplo, en el calculo de valores propios). Un algoritmo del método de Lanczos es el que se describe a continuación y en el que se denotan por A a la matriz simétrica original, de dimensiones (n, n), por T a la matriz tridiagonal buscada, por q, p, v y z a cuatro vectores de n elementos, por α y β a dos números reales y, finalmente, por i, j, k denotaremos enteros

estrictamente positivos. Se denota mediante (q • z) al producto escalar euclídeo de los vectores q y z. Asimismo, en el algoritmo se ha representado por 0 al vector nulo de n elementos, por [0] a la matriz nula de dimensiones (n, n) y para referirnos al elemento j-ésimo de un vector (por ejemplo de p) se indica como pj y para referirnos al elemento (i, j) de la matriz T lo denotaremos por Ti,j. Con esta notación el algoritmo de Lanczos es q 0 , p 0 q1 1 , k 1 , β 1

T [0] Mientras ( (k ≤ n) Y (β ≠ 0) ) hacer: z A.q - β .p

α (q • z) v z - α .q β ||v||2

p q Si (β ≠ 0) entonces: q (1/β ).v

fin condición. Si (k < n) entonces: Tk,k α Tk+1,k β Tk,k+1 β

sino: Tk,k α fin condición. k k + 1 Fin bucle condicional. Se pide que escribas un programa MAPLE que refleje el algoritmo anterior y escriba la matriz tridiagonal T resultante. Aplica el programa a la matriz:

Page 46: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

45

A =

1 2 0 1 02 7 1 0 1

0 1 5 1 21 0 1 6 1

0 1 2 1 9

− −⎡ ⎤⎢ ⎥− −⎢ ⎥⎢ ⎥−⎢ ⎥− −⎢ ⎥⎢ ⎥−⎣ ⎦

Solución: > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected > n:=5: > A:=matrix(n,n,[]);

:= A ( )array , ,.. 1 5 .. 1 5 [ ]

> A[1,1]:= 1.: A[2,1]:=-2.: A[2,2]:= 7.: A[3,1]:= 0: A[3,2]:= 1: A[3,3]:= 5.: A[4,1]:=-1.: A[4,2]:= 0: A[4,3]:=-1.: A[4,4]:= 6.: A[5,1]:= 0.: A[5,2]:=-1.: A[5,3]:= 2.: A[5,4]:= 1.: A[5,5]:=9.: for i from 1 by 1 to n-1 do: for j from i+1 by 1 to n do: A[i,j]:= A[j,i]: od: od: > evalm(A);

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

1. -2. 0 -1. 0.-2. 7. 1 0 -1.0 1 5. -1. 2.

-1. 0 -1. 6. 1.0. -1. 2. 1. 9.

> T:=matrix(n, n,[]): > q:=vector(n,[]): > qa:=vector(n,[]): > for i from 1 to n by 1 do qa[i]:=0.: if (i = 1) then q[i]:=1.: else q[i]:=0. fi: for j from 1 to n by 1 do T[i, j]:=0.: od: od:

Page 47: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

46

> beta:=1.: > k:=1: > while (k <= n) and (beta <> 0.) do z:= evalm(evalm(A&*q) - evalm(beta*qa)): alpha:=dotprod(q,z): v:=evalm(z - alpha*q): beta:=norm(v,2): qa:=evalm(q): if (beta<>0) then q:= evalm((1./beta)*v): fi: if (k < n) then T[k,k]:=alpha: T[k+1,k]:=beta: T[k,k+1]:=beta: else T[k,k]:=alpha: fi: k:=k+1: od: > evalm(T);

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

1. 2.236067977 0. 0. 0.2.236067977 6.800000003 0.7483314770 0. 0.

0. 0.7483314770 7.057142849 2.166535844 0.0. 0. 2.166535844 6.055900619 2.6028920910. 0. 0. 2.602892091 7.086956533

> fin; fin

Page 48: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

47

Tercer ejercicio (5 Puntos)

D) Escribe un procedimiento, llamado eat, que con los parámetros de entrada (datos en el momento de utilizarlo) n (número entero no negativo), m (número entero no negativo), t (número real) y A (matriz cuadrada de dimensiones (n, n)), calcule los (m+1) primeros sumandos que intervienen en la matriz exponencial eA.t. En otros términos, denotando por E a la matriz que se quiere calcular y por I a la matriz identidad de orden (n, n), la matriz E estará dada por:

t t tt. . . .... .2! 3! m!

+ + + + +2 3 mE = I A A A A

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero eat.m

E) Escribe un programa MAPLE en el que leyendo del disquete y utilizando el procedimiento anterior se calcule, en ciertos instantes ti, la solución del problema de valor inicial:

'

1 1 2y (t) 2.y (t) 8.y (t)= + '

2 1 2y (t) y (t) 2.y (t)= − −

y1(0) = 0, y2(0) = -1. Para ello llama A a la matriz:

A = 2 81 2

⎛ ⎞⎜ ⎟− −⎝ ⎠

y calcula, como se detalla más adelante, los elementos de la matriz:

Y = 1,0 1,1 1,3 1,NT

2,0 2,1 2,3 2,NT

y y y .... yy y y .... y

⎡ ⎤⎢ ⎥⎣ ⎦

La primera columna de esta matriz contiene los valores iniciales y1(0) e y2(0) por lo que:

y1,0 = 0 , y2,0 = -1

Page 49: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

48

El resto de las columnas de la matriz Y contendrán las aproximaciones de la solución en diferentes instantes de cálculo t1, t2, ..., tNT. Por ello debes, en primer lugar calcular los instantes ti = i.h (con i = 1, 2, ..., NT) y siendo h un valor al que se le puede asignar valor arbitrario (y para el que se te propone que uses el valor h = 0.05). En cada uno de los instantes de cálculo ti debes calcular (utilizando el procedimiento eat que realices en el primer apartado del ejercicio) la matriz E que aproxime a i.teA y, finalmente, conocida esta matriz:

E = 11 12

21 22

E EE E

⎛ ⎞⎜ ⎟⎝ ⎠

se procede a evaluar la i-ésima columna de Y mediante:

1,i 11 12 1

2,i 21 22 2

y E E y (0).

y E E y (0)⎧ ⎫ ⎡ ⎤ ⎧ ⎫

=⎨ ⎬ ⎨ ⎬⎢ ⎥⎣ ⎦ ⎩ ⎭⎩ ⎭

El programa que realices, además debe representar gráficamente las secuencias de puntos (ti, y1,i) y (ti, y2,i) (i = 0, 1, 2, ..., NT) diferenciando con símbolos y colores distintos una secuencia de otra. Utiliza el programa con los valores h = 0.05, NT = 100 y cuando llames el procedimiento eat asígnale al argumento m el valor m = 30. NOTA: No obstante lo anterior, es aconsejable que mientras realizas el programa asignes a NT y a m valores más pequeños (como por ejemplo NT = 10 y m = 10) para que de esta forma las pruebas sean más rápidas y el ordenador no se “cuelgue”. Una vez que estés seguro del correcto funcionamiento del programa asigna a los parámetros los valores que se proponen más arriba. Solución:

Page 50: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

49

A) > eat:=proc(n,m,t,A,E) local i,B: B:=array(identity,1..n,1..n): E:=array(identity,1..n,1..n): for i from 1 to m by 1 do B:=evalm((t/i)*A&*B): E:=evalm(E+B): od: end: > save eat,"eat.m": > fin_primer_procedimiento;

fin_primer_procedimiento

B)

Programa de resolución de un sistema de e.d.o. lineales, homogeneo con coefs. ctes > restart; > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected > with(plots): with(plottools): Warning, the name changecoords has been redefined Warning, the name arrow has been redefined > n:=2;m:=30;

:= n 2 := m 30

> y:=array(1..2,0..100,[]); := y ( )array , ,.. 1 2 .. 0 100 [ ]

> vinic:=vector(2,[0.,-1.]);aux:=vector(2,[]); := vinic [ ],0. -1.

:= aux ( )array ,.. 1 2 [ ]

> A:=matrix(2,2,[2.,8.,-1.,-2.]);

:= A ⎡⎣⎢⎢

⎤⎦⎥⎥

2. 8.-1. -2.

> h:=0.05: > NT:=100: t[0]:=0.: > y[1,0]:=vinic[1]:y[2,0]:=vinic[2]: > read "eat.m": > for i from 1 to NT by 1 do t[i]:=i*h:

Page 51: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

50

tiempo:=t[i]: eat(n,m,tiempo,A,E): aux:=evalm(vinic&*E): y[1,i]:=aux[1]: y[2,i]:=aux[2]: od: > for i from 0 to NT by 1 do print(t[i],y[1,i],y[2,i]); od;

, ,0. 0. -1. , ,0.05 0.04991670833 -0.8951707487 , ,0.10 0.09933466539 -0.7813972470 , ,0.15 0.1477601033 -0.6598162824 , ,0.20 0.1947091713 -0.5316426519 , ,0.25 0.2397127693 -0.3981570232 , ,0.30 0.2823212368 -0.2606931415 , ,0.35 0.3221088437 -0.1206245001 , ,0.40 0.3586780453 0.02064938159 , ,0.45 0.3916634548 0.1617169412 , ,0.50 0.4207354925 0.3011686788 , ,0.55 0.4456036801 0.4376112387 , ,0.60 0.4660195430 0.5696813315 , ,0.65 0.4817790927 0.6960593568 , ,0.70 0.4927248650 0.8154825872 , ,0.75 0.4987474932 0.9267577849 , ,0.80 0.4997868015 1.028773125 , ,0.85 0.4958324052 1.120509304 , ,0.90 0.4869238154 1.201049725 , ,0.95 0.4731500439 1.269589654 , ,1.00 0.4546487136 1.325444264 , ,1.05 0.4316046833 1.368055471 , ,1.10 0.4042482019 1.396997521 , ,1.15 0.3728526061 1.411981235 , ,1.20 0.3377315903 1.412856896 , ,1.25 0.2992360717 1.399615758 , ,1.30 0.2577506861 1.372390126

Page 52: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

51

, ,1.35 0.2136899402 1.331452022 , ,1.40 0.1674940748 1.277210491 , ,1.45 0.1196246649 1.210207494 , ,1.50 0.07056000404 1.131112504 , ,1.55 0.02079033087 1.040715811

, ,1.60 -0.02918707125 0.9399206338 , ,1.65 -0.07887284696 0.8297340755 , ,1.70 -0.1277705512 0.7112570886 , ,1.75 -0.1753916134 0.5856734608 , ,1.80 -0.2212602214 0.4542379740 , ,1.85 -0.2649180700 0.3182638889 , ,1.90 -0.3059289446 0.1791098223 , ,1.95 -0.3438830794 0.03816614413 , ,2.00 -0.3784012501 -0.1031588745 , ,2.05 -0.4091385538 -0.2434531650 , ,2.10 -0.4357878863 -0.3813149517 , ,2.15 -0.4580829699 -0.5153667524 , ,2.20 -0.4758010348 -0.6442692121 , ,2.25 -0.4887650580 -0.7667343168 , ,2.30 -0.4968455034 -0.8815384663 , ,2.35 -0.4999616291 -0.9875345963 , ,2.40 -0.4980823052 -1.083663592 , ,2.45 -0.4912263084 -1.168964977 , ,2.50 -0.4794621357 -1.242586472 , ,2.55 -0.4629073449 -1.303792424 , ,2.60 -0.4417273336 -1.351971311 , ,2.65 -0.4161337242 -1.386641794 , ,2.70 -0.3863822456 -1.407457382 , ,2.75 -0.3527701813 -1.414210122 , ,2.80 -0.3156333094 -1.406832519 , ,2.85 -0.2753427638 -1.385398340 , ,2.90 -0.2323010976 -1.350121712 , ,2.95 -0.1869383374 -1.301355088

Page 53: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

52

, ,3.00 -0.1397077425 -1.239585792 , ,3.05 -0.09108124723 -1.165430949 , ,3.10 -0.04154472294 -1.079631509

, ,3.15 0.008406951772 -0.9830447307 , ,3.20 0.05827458390 -0.8766356983 , ,3.25 0.1075599955 -0.7614676565 , ,3.30 0.1557706881 -0.6386912433 , ,3.35 0.2024249681 -0.5095331220 , ,3.40 0.2470566749 -0.3752842019 , ,3.45 0.2892198953 -0.2372852651 , ,3.50 0.3284932707 -0.09691569099 , ,3.55 0.3644845494 0.04442239060 , ,3.60 0.3968339550 0.1853164690 , ,3.65 0.4252183548 0.3243591236 , ,3.70 0.4493541130 0.4601609848 , ,3.75 0.4689999914 0.5913647326 , ,3.80 0.4839599165 0.7166600841 , ,3.85 0.4940842886 0.8347948764 , ,3.90 0.4992719234 0.9445883730 , ,3.95 0.4994710260 1.044944256 , ,4.00 0.4946797789 1.134859673 , ,4.05 0.4849457080 1.213436380 , ,4.10 0.4703664261 1.279888976 , ,4.15 0.4510876711 1.333553237 , ,4.20 0.4273020028 1.373894320 , ,4.25 0.3992471482 1.400508246 , ,4.30 0.3672038548 1.413130779 , ,4.35 0.3314920681 1.411634680 , ,4.40 0.2924690635 1.396037589 , ,4.45 0.2505255267 1.366494998 , ,4.50 0.2060807782 1.323303505 , ,4.55 0.1595792483 1.266898187 , ,4.60 0.1114873597 1.197842038

Page 54: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

53

, ,4.65 0.06228693167 1.116834265 , ,4.70 0.01246976276 1.024682694

, ,4.75 -0.03746159060 0.9223155636 , ,4.80 -0.08700632604 0.8107718619 , ,4.85 -0.1356632217 0.6911715106 , ,4.90 -0.1829415054 0.5647240334 , ,4.95 -0.2283611755 0.4327224447 , ,5.00 -0.2714554998 0.2965100953

> puntos1:=[seq( [t[j],y[1,j]], j=0..NT )]: puntos2:=[seq( [t[j],y[2,j]], j=0..NT )]: > dibp1:=pointplot(puntos1,color=red,symbol=CIRCLE): dibp2:=pointplot(puntos2,color=blue,symbol=BOX): > display(dibp1,dibp2);

> fin_ejercicio;

fin_ejercicio

Page 55: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

54

Examen de Laboratorio – Convocatoria de Diciembre 2002

Fecha: 10 – XII – 2002 Duración: 2 horas

Primer ejercicio (2’5 Puntos) La ecuación logística permite estimar el crecimiento de una población, de una epidemia, etc. Como caso particular de dicha ecuación, se propone el siguiente ejemplo: Se considera un conjunto de N personas, una de las cuales es portadora del virus de la gripe. Se supone que la velocidad de propagación del virus es proporcional, tanto a la cantidad de personas infectadas (x) como de personas no infectadas (N-x). La ecuación diferencial que rige este problema es:

dx(t) K.x(t).(N x(t))dt

= − (1)

Al haber inicialmente una sola persona infectada por el virus, como condición inicial, para resolver el problema se toma: x(0) 1= (2)

La solución de la ecuación diferencial (1) con la condición inicial (2) es:

N.K.tNx(t)

1 (N 1).e−=+ −

(3)

Esta última expresión permite conocer el número de individuos infectados en el transcurso del tiempo. SE PIDE: Realizar un programa Maple en el que, tomando N = 10000,

a) Se evalúe la constante de proporcionalidad K. Para ello, se considerará la condición de que el número de personas infectadas al cabo de 4 días es 50. Es decir: x(4) = 50

b) Se utilice (3), con el valor de la constante obtenido en el apartado a), para calcular x(t) en los instantes de tiempo t = 1, 2, 3, 4, ….,30 días.

Page 56: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

55

c) Se almacenen los resultados del apartado b) en una secuencia (ti, x(ti)) (I = 0, 1, …, 30) y se representen, en un mismo gráfico, la secuencia de puntos anterior y la curva definida por la expresión:

N.K.tNx(t)

1 (N 1).e−=+ −

empleando el valor de K obtenido en el apartado b) y en el rango 0 < t < 30. NOTA: Si no resolviste el apartado a) utiliza en los dos siguientes K = 0.0001. Solución: a) > restart; > with(plots): Warning, the name changecoords has been redefined Apartado a) > N:=10000;

:= N 10000

> eq:=N/(1+(N-1)*exp(-N*K*4))=50;

:= eq = 10000

+ 1 9999 e( )−40000 K 50

> solve(eq,K);

−1

40000⎛⎝⎜⎜

⎞⎠⎟⎟ln

1999999

> K:=evalf(%); := K 0.00009792338855

b) Apartado b) > f:=t->N/(1+(N-1)*exp(-N*K*t));

:= f → tN

+ 1 ( ) − N 1 e( )−N K t

> x:=array(0..30);t:=array(0..30); := x ( )array ,.. 0 30 [ ] := t ( )array ,.. 0 30 [ ]

> t[0]:=0;x[0]:=1; := t0 0

:= x0 1

Page 57: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

56

> for i from 1 to 30 by 1 do t[i]:=i: x[i]:=f(t[i]): od: > for i from 1 to 30 by 1 do print(t[i],x[i]); od;

,1 2.661973215 ,2 7.084144447 ,3 18.83875170 ,4 50.00000000 ,5 132.0233984 ,6 343.9521883 ,7 866.2143193 ,8 2015.927418 ,9 4020.007857 ,10 6415.501255 ,11 8265.444567 ,12 9269.371861 ,13 9712.459235 ,14 9890.025556 ,15 9958.408131 ,16 9984.337470 ,17 9994.111420 ,18 9997.787440 ,19 9999.168849 ,20 9999.687810 ,21 9999.882741 ,22 9999.955960 ,23 9999.983460 ,24 9999.993790 ,25 9999.997670 ,26 9999.999120 ,27 9999.999670 ,28 9999.999880

Page 58: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

57

,29 9999.999950 ,30 9999.999980

c) Apartado c) > > dibuf:=plot(f,0..30,color=blue): > seqpun:=[seq([t[j],x[j]],j=0..30)]: > dibpun:=pointplot(seqpun,color=red,symbol=circle): > display(dibuf,dibpun);

> fin_del_primer_ejercicio;

fin_del_primer_ejercicio

Segundo ejercicio (2’5 Puntos) El método de integración de Romberg es un método de integración numérica basado en utilizar la regla del trapecio compuesta combinada con la técnica de

Page 59: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

58

extrapolación de Richardson. Ello permite obtener aproximaciones de los valores de las integrales que se deseen calcular con un bajo coste

computacional. Un algoritmo del método de Romberg, para aproximar ∫b

a

f(x)·dx ,

puede ser el que se detalla a continuación:

Algoritmo del método de Romberg Datos: a, b (números reales) ε (número real positivo) N (número entero positivo) f(x) (función a integrar) h b – a R1,1 h· (f(a) + f(b)) / 2 i 1 tol 2·ε Mientras ( ( i < N) Y (tol > ε)) hacer: i i + 1

R2,1 ( )

=

+ + −∑( i 2 )2

1,1k 1

R h· f a (k 0.5)·h

2

Para j = 2, hasta j = i , con paso 1, hacer:

R2,j R2,(j-1) + − −−

−−

2,( j 1) 1,( j 1)( j 1)

R R4 1

Fin bucle en j. Si (i > 2) entonces: tol |R2,i – R2,(i-1)| + |R2,(i-1) – R2,(i-2)| sino: tol |R2,i – R2,(i-1)| Fin condición. Si (tol < ε) entonces V R2,i sino: Para j = 1, hasta j = i, con paso 1 hacer: R1,j R2,j Fin bucle en j. h h / 2 Fin condición. Fin bucle condicional.

Page 60: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

59

Si (tol < ε) entonces: Escribir “Valor aproximado de la integral = “, V sino: Escribir un mensaje indicando que no ha habido convergencia Fin condición. FIN Se pide que escribas un programa en MAPLE recogiendo el algoritmo anterior

y que lo apliques al cálculo de la integral π

∫0

sen(x)·dx , asignándole a N el valor

N = 8 y a ε el valor ε = 10-8. > restart; Datos del problema > a:=0; b:=evalf(Pi); eps:=1.*10^(-8.); N:=8;f:=x->sin(x);

:= a 0 := b 3.141592654

:= eps 0.1000000000 10-7 := N 8

:= f → x ( )sin x

INICIALIZACIÓN DEL ALGORITMO > h:=b-a; R:=matrix(2,N);

:= h 3.141592654 := R ( )array , ,.. 1 2 .. 1 8 [ ]

> R[1,1]:=h*(f(a)+f(b))/2.; := R ,1 1 -0.6443512745 10-9

> i:=1; tol:=2.*eps;

:= i 1

:= tol 0.2000000000 10-7

PROCESO ITERATIVO > while((i<N) and (tol>eps)) do i:=i+1: R[2,1]:=(R[1,1]+h*sum(f(a+(k-0.5)*h),k=1..2^(i-2)))/2.:

Page 61: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

60

for j from 2 to i by 1 do R[2,j]:=R[2,(j-1)]+(R[2,(j-1)]-R[1,(j-1)])/((4^(j-1))-1.): od: if (i > 2) then tol:= abs(R[2,i]-R[2,i-1])+abs(R[2,i-1]-R[2,i-2]): else tol:= abs(R[2,i]-R[2,i-1]): fi: if (tol < eps) then V:=R[2,i]: else for j from 1 to i by 1 do R[1,j]:=R[2,j]: od: h:= h/2.: fi: od: > if (tol <=eps) then print("Valor aproximado de la integral =", V); print("iteraciones realizadas = ",i); else print("Con los parámetros dados no se alcanzó la convergencia"); fi;

,"Valor aproximado de la integral =" 2.000000002 ,"iteraciones realizadas = " 6

> fin_del_segundo_ejercicio; fin_del_segundo_ejercicio

Tercer ejercicio (5 Puntos)

D) Escribe un procedimiento, llamado ctayl, que con los parámetros de entrada (datos en el momento de utilizarlo) N (número entero no negativo), y f (función de una variable), calcule los (m+1) primeros coeficientes del desarrollo en serie de Taylor en torno al punto 0 de la función f(x). Dichos coeficientes están dados por las expresiones:

=0a f(0) , =(i

if (0)a

i! (i=1, 2, ..., N)

Se recuerda que en MAPLE la derivada i-ésima de una función de una variable evaluada en el punto x se puede obtener mediante el comando (D@@ i)(f)(x).

Page 62: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

61

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero ctayl.m

E) Escribe un procedimiento, llamado sistema, que con los parámetros de entrada (datos en el momento de utilizarlo) n, m (números enteros positivos), y a (vector de (n+m+1) componentes), calcule una matriz B de dimensiones (n+m, n+m) y un vector c de (n+m) elementos utilizando para ello el algoritmo siguiente:

Calcular T n + m Para i desde 1 hasta T con paso 1 HACER: Para j desde 1 hasta (i-1) con paso 1 HACER: Si ( j < n) entonces: Bi,j 0 Fin condición Fin bucle en j Si (i < n ) entonces Bi,i 1 Fin condición Para j desde (i+1) hasta T con paso 1 HACER: Bi,j 0 Fin bucle en j Para j desde 1 hasta i con paso 1 HACER: Si ( j < m) entonces: Bi,(n+j) - ai-j Fin condición Fin bucle en j Para j desde (n+i+1) hasta T con paso 1 HACER: Bi,j 0 Fin bucle en j ci ai

Fin bucle en i

Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero sistema.m

Page 63: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

62

C) Escribe un programa MAPLE en el que leyendo del disquete y utilizando los procedimientos anteriores se calcule en primer lugar los (n +m +1) primeros coeficientes del desarrollo en serie de Taylor en torno a 0 de una función f(x). Dichos coeficientes se almacenarán en un vector {a0, a1, ...., an, ...,an+m}. Tras ello se utilizará el procedimiento sistema para calcular una matriz [B] de dimensiones (m+n, n+m) y un vector {c} de (n+m) elementos y se resolverá el sistema [B]·{z} = {c}. Con todo lo anterior se calcularán los coeficientes de dos polinomios:

= + + + +2 n0 1 2 np(x) p p ·x p ·x .... p ·x

= + + + +2 m

0 1 2 mq(x) q q ·x q ·x .... q ·x

en los que p0 = a0, pi = zi (i = 1, ..., n), q0 = 1, y qi = zn+i (i = 1, ..., m). Por último se definirá la función r(x) = p(x) / q(x) y se representarán en un mismo dibujo las gráficas de f(x) y r(x). Usa el programa anterior con los datos siguientes: n = 3, m = 2, f(x) = e-x, y el dibujo pedido realízalo en el intervalo –1 < x < 5. NOTA: La función r(x) así definida se conoce como el aproximante de Padé de orden (n, m) de

la función f(x).

Solución: A) > restart; > ctayl:=proc(N,f,a) local i: a[0]:=f(0): for i from 1 to N by 1 do a[i]:=(D@@i)(f)(0)/i!: od: end: > save ctayl,"ctayl.m": > fin_del_procedimiento_ctayl;

fin_del_procedimiento_ctayl

Page 64: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

63

B) > restart; > sistema:=proc(n,m,a,B,c) local i, j, T: T:=n + m: for i from 1 to T by 1 do for j from 1 to i-1 by 1 do if (j <= n) then B[i, j]:=0.: fi: od: if (i <= n) then B[i, i]:=1.: fi: for j from (i+1) to T by 1 do B[i, j]:=0.: od: for j from 1 to i by 1 do if (j <= m) then B[i, n+j]:=-a[i-j]: fi: od: for j from n+i+1 to T by 1 do B[i, j]:=0.: od: c[i]:=a[i]: od: end: > save sistema,"sistema.m": > fin_del_procedimiento_sistema;

fin_del_procedimiento_sistema

C) > 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: > f:=x->exp(-x);

:= f → x e( )−x

> n:=3;m:=2; := n 3 := m 2

Inicialización

Page 65: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

64

> T:=n+m; := T 5

> a:=array(0..T): p:=array(0..n): q:=array(0..m): B:=matrix(T,T): c:=vector(T): Lectura de los procedimientos > read "ctayl.m": read "sistema.m": > ctayl(T,f,a): > print(a);

.. 0 5array( , [ = ( )0 1 = ( )1 -1

= ( )212

= ( )3-16

= ( )4124

= ( )5-1

120])

> p[0]:=a[0];q[0]:=1; := p0 1

:= q0 1

> sistema(n,m,a,B,c): > evalm(B);evalm(c);

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

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

1. 0. 0. -1 0.0. 1. 0. 1 -1

0. 0. 1.-12 1

0. 0. 0.16

-12

0. 0. 0.-124

16

⎡⎣⎢⎢

⎤⎦⎥⎥, , , ,-1

12

-16

124

-1120

> sol:=evalm(inverse(B)&*c); := sol [ ], , , ,-0.6000000004 0.1500000002 -0.01666666673 0.3999999996 0.0500000000

> for i from 1 to n by 1 do p[i]:=sol[i]: od: > for i from 1 to m by 1 do q[i]:=sol[n+i]: od: > > r:=x->(p[0]+sum(p[k]*x^k,k=1..n))/((q[0]+sum(q[k]*x^k,k=1..m)));

Page 66: UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS ...ocw.upm.es/...metodos-numericos/contenidos/...examenes/curso01_02.pdf · Programación y Métodos Numéricos Examen de Laboratorio

Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde 3 de Septiembre de 2002

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

65

:= r → x + p0

⎝⎜⎜⎜

⎠⎟⎟⎟∑

= k 1

n

pk xk

+ q0⎛

⎝⎜⎜⎜

⎠⎟⎟⎟∑

= k 1

m

qk xk

> dibr:=plot(r,-1..5,color=blue): dibf:=plot(f,-1..5,color=red): > display(dibr,dibf);

> fin_del_programa;

fin_del_programa

>