+ All Categories
Home > Documents > UNIVERSIDAD POLITÉCNICA DE MADRID E.T.S.I. MINAS...

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

Date post: 04-Nov-2018
Category:
Upload: trinhnguyet
View: 219 times
Download: 0 times
Share this document with a friend
39
Programación y Métodos Numéricos Examen de Laboratorio Carlos Conde, Arturo Hidalgo, Alfredo López Curso 2004- 2005 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 EXÁMEN DE LABORATORIO – GRUPO 3 Curso 2004-05 Fecha: 1 – VI – 2005 Hora: 18:00 a 20:00 INSTRUCCIONES Y RECOMENDACIONES . 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. . 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 y el grupo de Laboratorio al que pertenece (Grupo 4º) y la fecha de hoy (1- VI – 2005). 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 . En el fichero debes escribir como primera línea tu nombre y apellidos completos. Además debes identificar claramente el comienzo y el final de cada uno de los ejercicios (se sugiere que cada ejercicio lo realices en una sección de MAPLE vinculada a un “botón”). . 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. . 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 operación pide ayuda al profesor. . 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

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

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

EXÁMEN DE LABORATORIO – GRUPO 3 Curso 2004-05

Fecha: 1 – VI – 2005 Hora: 18:00 a 20:00

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 y el grupo de Laboratorio al que pertenece (Grupo 4º) y la fecha de hoy (1- VI – 2005). 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 debes escribir como primera línea tu nombre y apellidos completos. Además debes identificar claramente el comienzo y el final de cada uno de los ejercicios (se sugiere que cada ejercicio lo realices en una sección de MAPLE vinculada a un “botón”). 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 operació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.

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

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

1

Primer ejercicio (2.5 puntos)

El método de Müller permite obtener soluciones de ecuaciones no lineales de la forma f(x)=0. Consiste en, partiendo de tres aproximaciones p0, p1, p2, generar una nueva aproximación p3 mediante:

( )3 2

2

2

4

cp p bb b acabs b

= −+ −

donde:

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

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

( )( )( )

2

2 20 2 1 2 1 2 0 2

0 2 1 2 0 1

21 2 0 2 0 2 1 2

0 2 1 2 0 1

c f p

p p f p f p p p f p f pb

p p p p p p

p p f p f p p p f p f pa

p p p p p p

=

− − − − −⎡ ⎤ ⎡ ⎤⎣ ⎦ ⎣ ⎦=− − −

− − − − −⎡ ⎤ ⎡ ⎤⎣ ⎦ ⎣ ⎦=− − −

A continuación se comprueba el valor de f(p3). Si este no es lo suficientemente pequeño aún estaremos lejos de la solución, por lo que se sustituyen p0, p1 y p2 respectivamente por p1, p2 y p3 y se realiza una nueva iteración.

Se pide construir un programa MAPLE que permita calcular una raíz de una función utilizando el método de Müller descrito y aplicarlo al siguiente ejemplo:

( ) 4 3 216 40 5 20 6f x x x x x= − + + +

utilizando como valores iniciales p0 = 0.5, p1 = -0.5, p2 = 0. El programa parará cuando abs(f(p3))≤ 10-5 o cuando haya realizado más de 100 iteraciones. Solución: > restart: > f:=x->16*x^4-40*x^3+5*x^2+20*x+6;

:= f → x − + + + 16 x4 40 x3 5 x2 20 x 6

> p0:=0.5; p1:=-0.5;p2:=0; eps:= 1e-5; maxiter:=100; := p0 0.5 := p1 -0.5

:= p2 0 := eps 0.00001

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

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

2

:= maxiter 100

> tol:=2*eps; iter:=0; := tol 0.00002

:= iter 0

> while iter <= maxiter and tol>= eps do iter; f0:=f(p0); f1:=f(p1); f2:=f(p2); c:=f2; b:=((p0-p2)^2*(f1-f2)-(p1-p2)^2*(f0-f2))/((p0-p2)*(p1-p2)*(p0-p1)); a:=((p1-p2)*(f0-f2)-(p0-p2)*(f1-f2))/((p0-p2)*(p1-p2)*(p0-p1)); p3:=p2-2*c/(b+(b/abs(b))*sqrt(b^2-4*a*c)); tol:=abs(f(p3)); iter:=iter+1; p0:=p1; p1:=p2; p2:=p3; od: > print(`iteraciones = `, iter, `resultado =` , p3); >

, , ,iteraciones = 69 resultado = + -0.3560621852 0.1627582207 I

> fin_del_primer_ejercicio; fin_del_primer_ejercicio

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

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

3

Segundo ejercicio (2.5 puntos) La determinación del mínimo de una función f(x) en un intervalo [a,b] puede realizarse mediante el método de Fibonacci que responde al siguiente algoritmo: Dados f(x), a, b, ε, n F[0] ← 1, F[1] ← 1 Para i desde 2 hasta n con paso 1 hacer F[i] ← F[i-1] + F[i-2] Terminar para i L2 ← (F[n-1]*(b-a) + (-1)n ε)/F[n] x ← a + L2 y ← b – L2 Para i desde 2 hasta n con paso 1 hacer vx ← f(x) vy ← f(y) Si vx > vy entonces Si y < x entonces b ← x en caso contrario a ← x fin de la condición x ← a – y + b en caso contrario Si x < y entonces b ← y en caso contrario a ← y fin de la condición y ← a – x + b fin de la condición Terminar para i Se pide:

a) Implementar un programa MAPLE que responda al algoritmo anterior b) Aplicarlo a la determinación del mínimo de la función f(x) = 2x2 – ex en

[0,1] con un parámetro ε = 10-5 y n = 100. Solución:

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

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

4

> restart: > eps:=0.00001; n:= 10; a:=0.; b:=1;f:=x->2*x^2-exp(x);

:= eps 0.00001 := n 10 := a 0. := b 1

:= f → x − 2 x2 ex

> F[0]:=1; F[1]:=1; := F0 1

:= F1 1

> for i from 2 to n do F[i]:= F[i-1]+F[i-2]: od: > L2:=(F[n-1]*(b-a) + (-1)^n*eps)/F[n]: x:=a + L2: y:=b - L2: > for i from 2 to n do vx:=f(x): vy:=f(y): if vx > vy then if y < x then b:=x: else a:=x: fi: x:=a - y + b: else if x < y then b:=y: else a:=y: fi: y := a - x + b: fi: od: > print((a+b)/2);

0.3539329212

> fin_del_segundo_ejercicio; fin_del_segundo_ejercicio

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

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

5

Tercer ejercicio (5 puntos) Las fórmulas de integración numérica de Gauss son de la forma:

( ) ( )1

11

n

i ii

f x dx c f x=−

≈ ∑∫

donde 1 2, , , nx x x… son las n raíces del polinomio pn+1(x) de Legendre de grado n y los coeficientes 1 2, , , nc c c… vienen dados por:

1

11

1, 2,...,n

ji

j i jj i

x xc dx i n

x x=−≠

−= =

−∏∫ (*)

Se pide:

a) Elaborar un procedimiento MAPLE, llamado pLegendre, que calcule el polinomio de Legendre de grado n sabiendo que:

( )( )

( ) ( ) ( )

1

2

1 2

1

2 3 2 3, 4, , 11 1i i i

p x

p x xi ip x x p x p x i ni i− −

=

=

− −= − = +

− −…

Variable de entrada: n (grado del polinomio) Variable de salida: pl (n+1-ésimo polinomio de Legendre)

b) Si 1 2, , , nx x x… son las raíces del polinomio calculado anteriormente, elaborar un procedimiento MAPLE, llamado coefGauss, que determine los coeficientes 1 2, , , nc c c… utilizando la expresión (*)

Variable de entrada: n, x (vector que contiene las n raíces de pl) Variable de salida: c (vector que contiene los n coeficientes ci)

c) Elaborar un procedimiento MAPLE, llamado intGauss, que permita

aproximar, utilizando la fórmula de Gauss, ( )1

1

f x dx−∫

Variable de entrada: n, f Variable de salida: resultado

d) Aproximar el valor de ( )1

1

cos x dxπ−∫ mediante una fórmula de cuadratura

gaussiana de 5 puntos.

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

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

6

Notas: 1. Una vez determinado el n+1-ésimo polinomio de Legendre, pl, sus raíces

pueden ser halladas utilizando el comando solve de MAPLE:

x = {evalf(solve(pl = 0))} 2. Nótese que, dentro del procedimiento intGauss, se deberá llamar a los

procedimientos pLegendre y coefGauss.

3. La función MAPLE int(f, x=a..b), evalúa la integral de la función f en el intervalo [a,b] .

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 > pLegendre:=proc(n,pl) local i, p: p:=vector(n+1): p[1]:=1: p[2]:=x: for i from 3 to n+1 do p[i]:=expand(((2*i-3)/(i-1))*x*p[i-1]-((i-2)/(i-1))*p[i-2]); od: pl:=p[n+1]: end: > > coefGauss:=proc(n,x,c) local i,j: for i from 1 to n do c[i]:=1: for j from 1 to n do if i<> j then c[i]:=c[i]*(y-x[j])/(x[i]-x[j]): fi: od: c[i]:=evalf(int(c[i],y=-1..1)): od: end: > > intGauss:=proc(n,f,resultado) local i,x: pLegendre(n,pl):

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

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

7

x:={fsolve(pl=0)}: coefGauss(n,x,c): resultado:=evalf(sum(c[i]*f(x[i]),i=1..n)): end: > > n:=5; f:=x->cos(Pi*x);

:= n 5 := f → x ( )cos π x

> > intGauss(n,f,resultado): > resultado;

0.0000616066

> fin_del_tercer_ejercicio; fin_del_tercer_ejercicio

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

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

8

Examen de Laboratorio (Grupo 4º) Fecha: 1 – VI – 2005

Primer ejercicio (2.5 puntos) Se quiere calcular y representar las n primeras sumas parciales de las tres series numéricas siguientes:

i

ik 1

1 1 1 1S1 1 ...2 3 i k=

= + + + + = ∑

i

ik 2

1 1 1 1S2 1 ... 12 4 2·(i 1) 2·(k 1)=

= + + + + = +− −∑

y:

i

ik 2

1 1 1 1S3 1 ... 13 6 3·(i 1) 3·(k 1)=

= + + + + = +− −∑

La forma elegida para el cálculo de cada una de estas n primeras sumas parciales consiste en realizar el proceso iterativo siguiente:

S11 = 1; i i 11S1 S1i−= + (i = 2, 3, ……….n)

S21 = 1; i i 11S2 S2

2·(i 1)−= +−

(i = 2, 3, ……….n)

S31 = 1; i i 11S3 S3

3·(i 1)−= +−

(i = 2, 3, ……….n)

Se pide que calcules las n = 5000 primeras sumas parciales de las tres series anteriores, que escribas los valores de S1n, S2n y S3n y que representes en una misma figura los valores de (i, S1i), (i, S2i) y de (i, S3i) ( i = 1, 2, …., n). Los puntos (i, S1i) los debes representar con círculos de color rojo, los puntos (i, S2i) con rectángulos de color azul y los puntos (i, S3i) con rombos de color verde. NOTAS: 1ª. Aunque se pide representar los 5000 valores de las primeras sumas parciales se recomienda que realices el programa con un valor de n bastante inferior (por ejemplo 20) y que cuando estés seguro de que todo funciona ya asignes a n el valor 5000 que se indica en el enunciado.

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

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

9

2ª. No es necesario (ni aconsejable) que escribas los 5000 valores de las sumas parciales. Sólo se pide escribir los últimos calculados, es decir, S15000, S25000, y S35000. Solución: > restart; > with(plots): Warning, the name changecoords has been redefined > n:=5000; s1:=vector(n); s2:=vector(n); s3:=vector(n);

:= n 5000 := s1 ( )array ,.. 1 5000 [ ] := s2 ( )array ,.. 1 5000 [ ] := s3 ( )array ,.. 1 5000 [ ]

> s1[1]:=1;s2[1]:=1;s3[1]:=1; := s11 1

:= s21 1

:= s31 1

> for i from 2 to n by 1 do s1[i]:=s1[i-1]+(1./i): s2[i]:=s2[i-1]+(1./(2*(i-1))): s3[i]:=s3[i-1]+(1./(3*(i-1))): od: > s1[n];s2[n];s3[n];

9.094508864 5.547154405 4.031436267

> p1:=[seq([i,s1[i]],i=1..n)]: p2:=[seq([i,s2[i]],i=1..n)]: p3:=[seq([i,s3[i]],i=1..n)]: > dib1:=pointplot(p1,color=red,symbol=CIRCLE): dib2:=pointplot(p2,color=blue,symbol=BOX): dib3:=pointplot(p3,color=green,symbol=DIAMOND): > display(dib1,dib2,dib3);

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

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

10

> fin_del_primer_ejercicio;

fin_del_primer_ejercicio

Segundo ejercicio (2.5 puntos) El siguiente algoritmo recoge el método de aproximación de Padé para hallar una función racional R(x) (es decir el cociente de dos polinomios P(x) y Q(x)) que aproxime a una cierta función dada f(x) en el entorno del origen de abscisas. En dicho algoritmo se utiliza la siguiente notación: f … función que se quiere aproximar en un entorno de 0 n … grado del polinomio P(x) usado como numerador de la función racional R(x) m … grado del polinomio Q(x) usado como denominador de la función racional R(x) p0, p1, …, pn coeficientes del polinomio P(x) = p0+ p1.x+ p2.x2 + …+ pn.xn q0, q1, …, qm coeficientes del polinomio Q(x) = q0+ q1.x+ q2.x2+ …+ qm.xm N … entero obtenido como (n+m) a … array auxiliar de elementos a0, a1, …, aN

aux … vector auxiliar de N elementos

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

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

11

c … vector auxiliar de N elementos B … matriz auxiliar de dimensiones (N, N) y de elementos Bi,j [0] … matriz nula de dimensiones (N,N). Con esta notación el algoritmo que se pide que programes en MAPLE es el siguiente: Datos: función f, enteros positivos n y m. N n+m Para i desde 0 hasta N con paso 1 hacer ai f(i(0.) / i! (véase la nota al final del enunciado) Si (i > 0) entonces auxi ai Fin condición. Fin bucle. q0 1 p0 a0 B [0] Para i desde 1 hasta N con paso 1 hacer Si (i < n) entonces Bi,i 1 Fin condición Para j desde 1 hasta i con paso 1 hacer Si (j < m) entonces Bi,n+j -ai-j Fin condición Fin bucle Fin bucle.

c B-1.aux Para i desde 1 hasta n con paso 1 hacer pi ci Fin bucle.

Para i desde 1 hasta m con paso 1 hacer qi cn+i Fin bucle.

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

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

12

P x p0 + p1.x + p2.x2 + …. + pn.xn

Q x q0 + q1.x + q2.x2 + …. + qm.xm R x P(x) / R(x) Dibujar en un mismo gráfico la función f (color azul, trazo continuo y fino)y la función R (color rojo, trazo continuo y grueso) en el intervalo de abscisas [-2, 2]

FIN Aplicar el programa anterior al caso en que f = x e-x, n = 5 y m = 3. NOTA: Para un valor entero no negativo “i”, el valor de la i-ésima derivada de una función f en el punto 0 puede calcularse en MAPLE mediante la instrucción: [> (D@@i)(f)(0.) Asimismo se recuerda que el valor de i! en MAPLE se calcula escribiendo i!. 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 > f:=x->exp(-x); n:=5;m:=3;

:= f → x e( )−x

:= n 5 := m 3

> N:=n+m; := N 8

> a:=array(0..N);q:=array(0..m);p:=array(0..n); aux:=vector(N);c:=vector(N);B:=matrix(N,N);

:= a ( )array ,.. 0 8 [ ] := q ( )array ,.. 0 3 [ ] := p ( )array ,.. 0 5 [ ] := aux ( )array ,.. 1 8 [ ]

:= c ( )array ,.. 1 8 [ ] := B ( )array , ,.. 1 8 .. 1 8 [ ]

> for i from 0 to N by 1 do

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

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

13

a[i]:=(D@@i)(f)(0.)/i!: if (i > 0) then aux[i]:=a[i]: fi: od: > q[0]:=1.;p[0]:=a[0];

:= q0 1.

:= p0 1.

> for i from 1 to N by 1 do for j from 1 to N by 1 do B[i,j]:=0.: od: od: > for i from 1 to N by 1 do if (i <= n) then B[i,i]:=1.: fi: for j from 1 to i by 1 do if (j <=m) then B[i,n+j]:=-a[i-j]: fi: od: od: > c:=evalm(inverse(B)&*aux); c -0.624999996 0.178571427 -0.0297619037 0.00297619029 -0.000148809503, , , , ,[ :=

0.375000004 0.0535714301 0.00297619059, , ]

> for i from 1 to n by 1 do p[i]:=c[i]: od;

:= p1 -0.624999996

:= p2 0.178571427

:= p3 -0.0297619037

:= p4 0.00297619029

:= p5 -0.000148809503

> for i from 1 to m by 1 do q[i]:=c[n+i]: od;

:= q1 0.375000004

:= q2 0.0535714301

:= q3 0.00297619059

> P:=0.:

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

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

14

for i from 0 to n by 1 do P:=P+p[i]*(x^i): od: P:=unapply(P,x); P x 1. 0.624999996 x 0.178571427 x2 0.0297619037 x3 0.00297619029 x4 − + − + → :=

0.000148809503 x5 −

> Q:=0.: for i from 0 to m by 1 do Q:=Q+q[i]*(x^i): od: Q:=unapply(Q,x);

:= Q → x + + + 1. 0.375000004 x 0.0535714301 x2 0.00297619059 x3

> R:=x->P(x)/Q(x);

:= R → x( )P x( )Q x

> dibf:=plot(f,-2..2,color=blue): > dibr:=plot(R,-2..2,color=red,thickness=2): > display(dibf,dibr);

> fin_del_segundo_ejercicio;

fin_del_segundo_ejercicio

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

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

15

Tercer ejercicio (5 puntos) A) Escribir un procedimiento llamado aitken en el que tomando como datos dos números reales (llamados a y ε) y una función (llamada g) se calculen como parámetros de salida dos números reales (llamados z y δ) de la forma siguiente: Se calcularán los números: b = g(a) y c = g(b) y tras ello, si (c – 2b + a) es distinto de 0 se tomará

z = a – [(b-a)2/ (c – 2b + a)] y δ = |z – a| mientras que si (c – 2b + a) es nulo se tomará z = a y δ = ε/2. El procedimiento debe guardarse en el disquete de trabajo en un fichero llamado aitken.m. B) Escribir un programa MAPLE que leyendo y utilizando el procedimiento anterior realice lo siguiente:

• Dada una función f, un valor ε , dos números reales α y β tales que α < β, un valor entero (maxit) y un valor real x1,

• se iniciará la variable iter con valor 1 y se asignará a otra variable,

llamada tol, el valor tol (2.ε) y a la variable δ1 el valor de tol.

• a continuación mientras iter sea inferior a maxit y tol sea superior a ε se realizarán las siguientes operaciones:

o Usando el procedimiento aitken con parámetros de entrada xiter (en el papel de “a”), ε y f (en el papel de función “g”), respectivamente se calculará el valor xiter+1 (en el papel de “z”) y el valor de δiter+1 (en el papel de δ).

o Se asignará a tol el valor de δiter+1, y o Se actualizará el valor de iter incrementándolo en una

unidad.

• Se escribirán todos los valores de xi y δi calculados. • Si el último valor calculado para tol es inferior a ε entonces se procederá

a dibujar en una misma figura y en el intervalo [α, β] el grafo de la función f (en trazo continuo de color azul), el grafo de la bisectriz del primer cuadrante (también en trazo continuo y en color verde) y la secuencia de puntos [xi, f(xi)] calculados (con rombos de color rojo).

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

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

16

Aplíquese este programa con los datos siguientes:

2

2

x x 0.3

(x 0.4)f(x) 0.5 0.3e + −

−= −

ε = 10-6, maxit = 100, x1 = -1, α = -1 y β = 1. NOTAS: 1ª. El procedimiento se valorará sobre 2 puntos y el programa sobre 3 puntos. 2ª. El programa que se pide realizar recoge el método de Steffensen para resolver una ecuación de la forma x = f(x). Solución: a) > restart;

> aitken:=proc(a,eps,g,z,delta) local b,c: b:=g(a): c:=g(b): if ((c-2*b+a) <> 0.) then z:= a-((b-a)^2)/(c-2*b+a): delta:=abs(z-a): else

z:=a: delta:=eps/2.: fi: end proc: > save aitken,"aitken.m": > fin_procedimiento-del_tercer_ejercicio;

− fin_procedimiento del_tercer_ejercicio

b) > restart; > with(linalg):with(plots): Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined

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

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

17

> read "aitken.m": > f:=x-> 0.5 - 0.3*(x*x-0.4)/exp(x*x+x-0.3);

:= f → x − 0.5 0.3 ( ) − x x 0.4

e( ) + − x x x 0.3

> alpha:=-1.;beta:=1.; := α -1. := β 1.

> eps:=10**(-6.);maxiter:=100; := eps 0.1000000000 10-5

:= maxiter 100

> x:=vector(maxiter);delta:=vector(maxiter): := x ( )array ,.. 1 100 [ ]

> x[1]:=-1; := x1 -1

> iter:=1; tol:=2*eps;delta[iter]:=tol; := iter 1

:= tol 0.2000000000 10-5

:= δ1 0.2000000000 10-5

> while((iter<maxiter) and (tol>eps)) do aitken(x[iter],eps,f,x[iter+1],delta[iter+1]): tol:=delta[iter+1]: iter:=iter+1: od: > for i from 1 to iter by 1 do print(i,x[i],delta[i]); od;

, ,1 -1 0.2000000000 10-5 , ,2 0.724720557 1.724720557

, ,3 0.5246708056 0.2000497514 , ,4 0.5230748803 0.0015959253

, ,5 0.5230747662 0.1141 10-6 > if (tol < eps) then bisec:=x->x: dibf:=plot(f,alpha..beta, color=blue): dibx:=plot(bisec,alpha..beta, color=green): ptos:=[seq([x[i],f(x[i])],i=1..iter)]: dibp:=pointplot(ptos,color=red,symbol=DIAMOND): fi: if (tol < eps) then display(dibf,dibx,dibp);

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

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

18

fi;

> fin_del_programa_del_tercer_ejercicio;

fin_del_programa_del_tercer_ejercicio

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

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

19

Examen de Laboratorio (Grupo 6º) Fecha: 2 – VI – 2005

Primer ejercicio (2’5 Puntos)

Para analizar la estabilidad de la solución de determinados métodos numéricos es útil emplear la técnica de von Neumann. En ella se define el denominado “factor de amplificación”, que es un número complejo que se expresa con frecuencia en función de un parámetro denominado “número de Courant”. El objetivo de este ejercicio es representar gráficamente, en el plano complejo, el valor del módulo del factor de amplificación para diferentes valores de un ángulo “theta”, correspondiente a un método numérico específico (de expresión conocida) y para diversos valores del número de Courant: c1, c2, ..., cn. Tal y como se observa en la figura siguiente, para cada número de Courant, el módulo del factor de amplificación describirá una curva en función del ángulo theta.

En la práctica, el ejercicio se resolverá mediante el siguiente proceso: Datos de partida:

• n : número de valores que daremos al número de Courant. • nt: número de valores del ángulo theta. • th1, th2: valores mínimo y máximo que tomará el ángulo theta. • cj (j=1,2,…,n): Valores que toma el número de Courant.

c1 c2 cn

theta

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

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

20

Proceso de cálculo: Para j = 1, 2, 3, …, n

i 1 I theta

j jg 1 c c e ⋅← − + ⋅

donde I es la unidad imaginaria (en Maple se representa como I) y el parámetro theta va tomando valores entre th1 y th2, con un incremento de 0.01(th2-th1).

imodg g←

j, i i

j, i i

xg modg cos(theta)

yg modg sen(theta)

← ⋅

← ⋅

Se incrementa i Siguiente valor de j Para j = 1,2,...,n Creación de la secuencia: ( )j j, k j, kseqg xg ,yg← (k = 1,2,...,i-1)

Siguiente valor de j Representar gráficamente los puntos almacenados en la secuencia: jseqg

Para resolver el ejercicio se emplearán los siguientes datos:

n = 4, nt = 500 1 2 3 4c 0.5 c 0.75 c 1 c 1.25= = = =

th1 = 0 ; th2 = 2. π

Solución: > restart:with(linalg):with(plots): > n:=4:nt:=500: > xg:=array(1..n,1..nt):yg:=array(1..n,1..nt): Números de Courant que se analizan > c[1]:=0.5:c[2]:=0.75:c[3]:=1.:c[4]:=1.25: Rango de valores del ángulo > th1:=evalf(0.):th2:=evalf(2.*Pi): > for j from 1 by 1 to n do i:=1: for theta from th1 by 0.01*(th2-th1) to th2 do g:=1-c[j]+c[j]*exp(I*theta): modg[i] := abs(g): xg[j,i]:=modg[i]*cos(theta): yg[j,i]:=modg[i]*sin(theta):

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

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

21

i:=i+1: > od: od: > for j from 1 by 1 to n do seqG[j]:=[seq([xg[j,k],yg[j,k]],k=1..i-1)]: od: > colores[1]:=green:colores[2]:=gold:colores[3]:=blue:colores[4]:=navy: > simbolo[1]:=box:simbolo[2]:=cross:simbolo[3]:=circle:simbolo[4]:=diamond: > for i from 1 by 1 to n do dibG[i]:=pointplot(seqG[i],color=colores[i],symbol=simbolo[i]): od: > display(dibG[1],dibG[2],dibG[3],dibG[4],scaling=CONSTRAINED

; > Fin_del_Ejercicio_1;

Fin_del_Ejercicio_1

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

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

22

Segundo ejercicio (2’5 Puntos) Programar en Maple el siguiente algoritmo para calcular los polinomios

de base de Lagrange construido sobre el soporte: { }ni i 0

x=

Dados: n, x0, h (aparecen al final de este enunciado) Definir el soporte equidistante: ( )i 0x x i h i 1,2,...,n← + ⋅ =

Para i desde 0 hasta n con paso 1 HACER: 0p 1

k 0←

Para j desde 0 hasta n con paso 1 HACER: Si i j≠ entonces

0 0 j

k k 1

k k 1E p x

E p −

← +

←− ⋅

Si k 1> entonces M k 1← −

Para ind desde 1 hasta M con paso 1 HACER: ind ind 1 ind jE p p x−← − ⋅

Fin del bucle en ind

Fin condición Para m desde 0 hasta k con paso 1 HACER:

m mp E← Fin del bucle en m

Fin condición Fin del bucle en j Para m desde 0 hasta k con paso 1 HACER:

i,m mL p←

Fin del bucle en m

Fin del bucle en i

Para i desde 0 hasta n con paso 1 HACER:

id 1← Fin del bucle en i

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

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

23

Para i desde 0 hasta n con paso 1 HACER: Para j desde 0 hasta n con paso 1 HACER:

Si i j≠ entonces

( )i i i jd d x x← ⋅ − Fin de la condición Fin del bucle en j Fin del bucle en i Para i desde 0 hasta n con paso 1 HACER: Para j desde 0 hasta n con paso 1 HACER:

i,ji,j

i

LL d←

Fin del bucle en j Fin del bucle en i

Calcular y escribir: ( )n

ri i, r

r 0

pbas L x i 0,1, ,n=

← ⋅ =∑

Aplicar el programa anterior al caso en que n = 5, x0 = 0 y h = 1. Solución: > restart:with(linalg):with(plots): > n := 5:x[0]:=0:h:=1: > for i from 1 by 1 to n do x[i] := x[0]+i*h: od: > for i from 0 by 1 to n do p[0]:=1: k := 0: for j from 0 by 1 to n do if (i<>j) then k := k + 1: E[0] := -p[0]*x[j]: E[k] := p[k-1]: if (k>1) then

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

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

24

M := k - 1: for ind from 1 by 1 to M do E[ind] := p[ind-1] - p[ind]*x[j]: od: fi: for m from 0 by 1 to k do p[m] := E[m]: od: fi: od: for m from 0 by 1 to k do L[i,m] := p[m]: od: od: > for i from 0 by 1 to n do d[i]:=1.0: od: > for i from 0 by 1 to n do for j from 0 by 1 to n do if (i<>j) then d[i] := d[i]*(x[i]-x[j]): fi: od: od: > for i from 0 by 1 to n do for j from 0 by 1 to n do L[i,j] := L[i,j]/d[i]: od: od: > for i from 0 by 1 to n do pbas[i]:=sum(L[i,jj]*x^jj,jj=0..n): od; pbas 0 1.000000000 2.283333333 x 1.875000000 x2 0.7083333333 x3 − + − :=

0.1250000000 x4 0.008333333333x5 + −

pbas 1 5.000000000 x 6.416666667 x2 2.958333333 x3 0.5833333333 x4 − + − :=

0.04166666667x5 +

pbas 2 5.000000000 x 8.916666667 x2 4.916666667 x3 1.083333333 x4− + − + :=

0.08333333333x5 −

pbas 3 3.333333333 x 6.500000000 x2 4.083333333 x3 1.000000000 x4 − + − :=

0.08333333333x5 +

pbas 4 1.250000000 x 2.541666667 x2 1.708333333 x3 0.4583333333 x4− + − + :=

0.04166666667x5 −

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

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

25

pbas 5 0.2000000000 x 0.4166666667 x2 0.2916666667 x3 0.08333333333x4 − + − :=

0.008333333333x5 +

Aunque no se pedía en el enunciado, se representan a continuación los polinomios de base obtenidos > colore[0]:=blue:colore[1]:=red:colore[2]:=green:colore[3]:=magenta:colore[4]:=brown:colore[5]:=navy: > for i from 0 by 1 to n do dibbas[i]:=plot(pbas[i],x=x[0]..x[n],color=colore[i],thickness=3): od: > seqdib:=seq(dibbas[ii],ii=0..n): > display(seqdib);

> Fin_del_Ejercicio_2;

Fin_del_Ejercicio_2

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

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

26

Tercer ejercicio (5 Puntos) Se desea resolver, mediante un método iterativo, los n sistemas de ecuaciones lineales:

[ ] { } { }k kkA x b (k 1,2, ,n)⋅ = =

donde [ ]kA es la matriz de coeficientes, { }k

x el vector de incógnitas y { }kb el

vector del segundo miembro del k-ésimo sistema. Para resolver los sistemas se partirá, en el proceso iterativo, de un mismo vector solución inicial: { }1 2 mx0 ,x0 , ,x0 .

Los pasos que se deben seguir son los siguientes: A) Escribir un procedimiento llamado sistemas en el que tomando como datos dos números enteros (llamados k y m) se calculen como parámetros de salida las matrices [R], [S], [T], todas ellas de dimensiones (m,m), de la forma siguiente:

1) Se definen los elementos de la matriz cuadrada [A], que dependerá del valor de k (k se introduce entre los parámetros de entrada) de dimensiones (m,m) (los elementos de la matriz se escriben dentro del propio procedimiento y figuran al final de este enunciado) 2) i,j i,j i,jR 0, S 0, T 0 (i, j 1,2,...,m)= = = =

3) i,i i,i

i,j i,j

i,j i,j

R A (i 1,2,...,m)T A (si i j) (i, j 1,2,...,m)

S A (si i j) (i, j 1,2,...,m)

= =

=− < =

=− > =

El procedimiento debe guardarse en el disquete de trabajo en un fichero llamado sistemas.m.

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

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

27

B) Escribir un procedimiento llamado resol en el que tomando como datos tres matrices de dimensiones (m,m) (que, al llamarlo, se identificarán con [R], [S], [T]), el número real eps, el número entero maxiter y el vector {x0} de m componentes se calcule como parámetro de salida un vector, {soluc}, de m componentes, de acuerdo con el siguiente proceso:

1) Se define un vector {b} de m componentes (los elementos del vector se escriben dentro del propio procedimiento y figuran al final de este enunciado)

2) iter 0 ; tol 2. eps 3) Realizar, mientras iter<maxiter y tol>eps el proceso: [ ] [ ]( ) { } { }1 1x R S T x0 R b− −⎡ ⎤ ⎡ ⎤← + ⋅ + ⋅⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦i

{ }2

tol x x0← −

{ } { }x0 x←

se incrementa la iteración 4) { } { }soluc x←

El procedimiento debe guardarse en el disquete de trabajo en un fichero llamado resoluc.m. C) Escribir un programa MAPLE que leyendo y utilizando los procedimientos anteriores realice lo siguiente: Dadas las variables eps, maxiter y el vector {x0} Para k desde 1 hasta n con paso 1 HACER:

Llamar al procedimiento sistemas Llamar al procedimiento resol { } { }k

sol soluc←

Fin del bucle Escribir { } ( )k

sol k 1,2, ,n=

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

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

28

Aplíquese este programa con los datos siguientes: m=4 , n = 4, eps = 10-4, maxit = 500

3

3

3

3

12 0.5 0k

1 2 0 0.5k[A]

10.5 2 0k

1 0.5 0.5 2k

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

{ } 3 3

1 1b = 1 3 1k k

⎧ ⎫⎪ ⎪⎪ ⎪−⎨ ⎬⎪ ⎪⎪ ⎪⎩ ⎭ { } { }x0 = 0 0 0 0

Solución: A) > restart:with(linalg): > sistemas := proc(k,m,R,S,T) local A, h, i, j: h:=1/(k*k*k): A:=matrix(m,m,[[2.,h,0.5,0.],[h,2.,0.,0.5],[0.5,h,2.,0.],[h,0.5,0.5,2.]]): for i from 1 by 1 to m do for j from 1 by 1 to m do R[i,j]:=0.: S[i,j]:=0.: T[i,j]:=0.: od: od: for i from 1 by 1 to m do for j from 1 by 1 to m do if (i=j) then R[i,j]:=A[i,j]: elif (i < j) then T[i,j]:=-A[i,j]: else S[i,j]:=-A[i,j]: fi: od: od: end: > save sistemas, "A:/sistemas.m":

B)

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

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

29

> resol:=proc(R,S,T,eps,maxiter,m,x0,soluc,itmax) local iter,tol,x,b,h: h:=1/(k*k*k): b:=vector(m,[1.,3.-h,h,1.]): iter:=0: tol:=2.*eps: while (iter<maxiter) and (tol>eps) do x:=evalm(inverse(R)&*(S+T)&*x0+inverse(R)&*b): tol:=norm(x-x0,2): x0:=evalm(x): iter := iter + 1: od: itmax:=iter-1: soluc := evalm(x): end: > save resol, "A:/resol.m": C) > restart:with(linalg): > read "A:/sistemas.m": > read "A:/resol.m": > n:=4:m:=4: > eps:=10.^(-6):maxiter:=500: > x0:=vector(m,[0,0,0,0]): > for k from 1 by 1 to n do R := matrix(m,m): S := matrix(m,m): T := matrix(m,m): sistemas(k,m,R,S,T): soluc := vector(m): resol(R,S,T,eps,maxiter,m,x0,soluc,itmax[k]): sol[k]:=evalm(soluc): od: > > evalm(R);evalm(S);evalm(T);

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

2. 0. 0. 0.0. 2. 0. 0.0. 0. 2. 0.0. 0. 0. 2.

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

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

0. 0. 0. 0.-164

0. 0. 0.

-0.5-164

0. 0.

-164

-0.5 -0.5 0.

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

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

30

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

0.-164

-0.5 -0.

0. 0. -0. -0.50. 0. 0. -0.0. 0. 0. 0.

> for i from 1 by 1 to n do print('sistema',i); print('iteraciones',itmax[i]); print('solucion_aprox',evalm(sol[i])); od;

,sistema 1

,iteraciones 57

,solucion_aprox [ ], , ,0.0307690378 0.9230767188 0.0307690378 0.2461535950

,sistema 2

,iteraciones 13

,solucion_aprox [ ], , ,0.4482375245 1.368581655 -0.1350958067 0.1636135408

,sistema 3

,iteraciones 10

,solucion_aprox [ ], , ,0.5072037596 1.430414798 -0.1347715350 0.1666966390

,sistema 4

,iteraciones 9

,solucion_aprox [ ], , ,0.5222116423 1.446133589 -0.1340383441 0.1678963106

> Fin_del_Ejercicio_3; Fin_del_Ejercicio_3

>

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

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

31

Examen de Laboratorio (Convocatoria Septiembre)

Fecha: 22 – IX – 2005

Primer ejercicio (2.5 puntos)

La curva plana conocida bajo el nombre de conchoide (ver figura) tiene por ecuación cartesiana:

( )

2 22

2a xy xx b

= ± −−

donde a y b son parámetros reales. Obviamente, esta curva tiene la asíntota x = b

Se pide:

a) Obtener 100 puntos, 50 a cada lado de la asíntota, de una conchoide con valores a = 3 y b = 1 (solo de la parte que está por encima del eje x) en el intervalo -2 ≤ x ≤ 4, teniendo en cuenta que, para salvar la asíntota, no deben tomarse puntos del intervalo ] b-0.2, b+0.2[.

b) Dibujar la curva obtenida

Nota: Para salvar el problema de la asíntota, la parte que queda a la izquierda de ella y

la que queda a la derecha deberán ser consideradas como dos dibujos independientes.

Solución: > restart: > with(plots): Warning, the name changecoords has been redefined > n:= 50: > x:=vector(2*n); y:=vector(2*n):

:= x ( )array ,.. 1 100 [ ]

> a:=3.: b:=1.: > x[1]:=-2.: x[n]:= b-0.2: x[n+1]:=b+0.2: x[2*n]:=4.: > h1:=(x[n]-x[1])/n: h2:=(x[2*n]-x[n+1])/n:

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

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

32

> for i from 2 to n-1 do x[i]:=x[i-1]+h1; x[n+i]:=x[n+i-1]+h2; od: > for i from 1 to 2*n do y[i]:=sqrt(a^2*x[i]^2/(x[i]-b)^2-x[i]^2); od: > d1:=[seq([x[i],y[i]],i=1..n)]: > d2:=[seq([x[i],y[i]],i=n+1..2*n)]: > dibu1:=plot(d1): > dibu2:=plot(d2): > display(dibu1,dibu2);

> fin;

fin

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

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

33

Segundo ejercicio (2.5 puntos) El siguiente algoritmo, basado en la denominada “ordenación Shell”, ordena los

elementos del vector x = ( 9, 3, 2, 8, 14, 12, 7, 5, 15, 10, 1, 13, 6, 11, 4):

a[1] = 9; a[2] = 5; a[3] = 3; a[4] = 2; a[5] = 1; desde j=1 hasta 5, con paso 1, hacer: k ← a[j] desde i=1 hasta 15, con paso 1, hacer: si i+k ≤ n entonces:

si x[i+k] < x[i] entonces: xx ← x[i] x[i] ← x[i+k] x[i+k] ← xx fin condición fin condición fin bucle en i fin bucle en j Escribir x Se pide escribir un programa MAPLE que responda al algoritmo dado. 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 > n:=15: > x:=vector(15,[9,3,2,8,14,12,7,5,15,10,1,13,6,11,4]): > a:=vector(5,[9,5,3,2,1]): > for w from 1 to 5 by 1 do k:=a[w]; for i from 1 to n by 1 do if((i+k) <= n) then if(x[i+k] < x[i]) then xx:=x[i]; x[i]:=x[i+k]; x[i+k]:=xx;

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

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

34

fi; fi; od; print(x); od;

:= k 9 [ ], , , , , , , , , , , , , ,9 1 2 6 11 4 7 5 15 10 3 13 8 14 12

:= k 5 [ ], , , , , , , , , , , , , ,4 1 2 6 10 3 7 5 14 11 9 13 8 15 12

:= k 3 [ ], , , , , , , , , , , , , ,4 1 2 6 5 3 7 9 13 8 10 12 11 15 14

:= k 2 [ ], , , , , , , , , , , , , ,2 1 4 3 5 6 7 8 10 9 11 12 13 15 14

:= k 1 [ ], , , , , , , , , , , , , ,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

> fin; fin

Tercer ejercicio (5 Puntos)

Se considera el sistema de ecuaciones lineales:

[A].{x} = {b} en el que la matriz [A] es simétrica y definida positiva. El método de Lanczos se puede emplear para descomponer la matriz [A] como:

[A] = [Q].[ T ].[Q]T donde la matriz [ T ] es tridiagonal y [Q] es una matriz de paso. Se pide que desarrolles el método de Lanczos, siguiendo los siguientes pasos:

A) Escribe un procedimiento, llamado Matsim, que con los parámetros de entrada (datos en el momento de utilizarlo) n (número entero estrictamente positivo) y [A] (matriz de dimensiones (n,n) (de la que sólo se conocerá el triángulo superior) genere, por simetría, los elementos del triángulo inferior de la matriz. Así pues, este procedimiento lo que hará es generar una matriz simétrica. Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero Matsim.m

B) Escribe un procedimiento, llamado Matelem, que tomando como parámetros de entrada una matriz [A] de dimensiones (n,n), un vector {b} de dimensión n, el

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

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

35

entero no negativo K, calcule los vectores {alpha}, {beta}de dimensión K y K+1 vectores {qi} de dimensión n. Dichos vectores se generarán mediante el algoritmo siguiente:

{ } { } { } { }0 0 1

bbeta 0, q 0 , q

b= = =

Para j desde 1 hasta K con paso 1 hacer

{ } [ ] { } { }{ } { } { }

{ } { } { }

{ } { }

j n 1 j 1

T

n j

j j

j 2

j 1j

v A . q beta . q

q . v

v v alpha . q

beta v

vq

beta

α

− −

+

← −

← −

Fin del bucle

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

C) Escribe un procedimiento llamado Descomp que, tomando como parámetros de

entrada un número entero K, un vector {alpha} de dimensión K, un vector {beta} de dimensión K y los K+1 vectores {qi} (i = 0,...,K) (cada uno de dimensión n), calcule las matrices [ T ] y [Q], cada una de dimensiones (n x K). Dichas matrices se definen como:

Matriz [ T ]:

Sus elementos son:

i,i i

i,i 1 i 1

i,i 1 i

T alpha (i 1,...,K)T beta (i 2,...,K)T beta (i 1,...,K 1)

− −

+

= =

= =

= = −

Los restantes elementos son nulos.

Matriz [Q]:

Sus elementos son: { }i,j j i

Q q (j 1,2,...K; i 1,2,...,n)= = = Este procedimiento deberá ser grabado en el disquete de trabajo como el fichero Descomp.m

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

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

36

D) Escribe un programa MAPLE en el que dados un número entero n, una matriz triangular superior [A] de dimensiones (nxn), un vector {b} de n componentes, un número entero positivo K y leyendo del disquete y utilizando los procedimientos anteriores se realice el siguiente proceso:

D-1º) Se calcule la parte simétrica de la matriz A, empleando el

procedimiento Matsim. D-2º) Se calcule los vectores {alpha}, {beta} y {qi} mediante el

procedimiento Matelem. D-3º) Se descomponga la matriz A en las matrices Q y T descritas en el

procedimiento Descomp. Como datos a emplear en el apartado D) se considerarán: n = 4, K = 4

A1,1 = 4, A1,2 = 3, A1,3 = 2, A1,4 = 1 A2,2 = 3, A2,3 = 1, A2,4 = -1 A3,3 = 2, A3,4 = 2 A4,4 = 5

12

b34

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

NOTAS:

Los K+1 vectores q, de n componentes cada uno, se envían como parámetro del procedimiento sin más que identificarlos mediante la letra q.

Puedes comprobar que, efectivamente, se verifica: [A] = [Q].[ T ].[Q]T

Solución:

> restart: > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected

Procedimiento MATSIM > matsim:=proc(A,n) local i,j; for i from 1 to n do for j from 1 to i do A[i,j]:=A[j,i]; od; od; end:

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

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

37

Procedimiento MATELEM > matelem:=proc(A,b,n,k,alpha,beta,q) local i, v; beta[0]:=0.; for i from 1 to n do q[0][i]:=0. od; q[1]:=evalm(b/norm(b,2)); for i from 1 to k do v:=evalm(A&*q[i]-beta[i-1]*q[i-1]); alpha[i]:=dotprod(q[i],v); v:=evalm(v-alpha[i]*q[i]); beta[i]:=norm(v,2); q[i+1]:=evalm(v/beta[i]); od; end:

Procedimiento DESCOMP > descomp:=proc(k,n,alpha, beta, q, T, Q) local i, j: for i from 1 to k by 1 do for j from 1 to k by 1 do T[i,j]:=0.: if (i=j) then T[i,j]:=alpha[i]: elif (j=i+1) then T[i,j]:=beta[i]: elif (j=i-1) then T[i,j]:=beta[i-1]: fi: od: od: for j from 1 to k by 1 do for i from 1 to n by 1 do Q[i,j]:=q[j][i]: od: od: end:

Programa > n:=4: k:=4: > A:=matrix(n,n):T:=matrix(k,k):Q:=matrix(n,k): > A[1,1]:=4.: A[1,2]:=3.: A[1,3]:=2.: A[1,4]:= 1.: A[2,2]:=3.: A[2,3]:=1.: A[2,4]:=-1.: A[3,3]:=2.: A[3,4]:= 2.: A[4,4]:= 5.: > b:=vector(n,[1.,2.,3.,4.]): > alpha:=array(1..k): beta:=array(0..k):

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

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

38

> for i from 0 to k+1 by 1 do q[i]:=vector(n): od: > matsim(A,n): > matelem(A,b,n,k,alpha,beta,q): > descomp(k,n,alpha, beta, q, T, Q): > evalm(T); evalm(Q);

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

6.333333330 2.643650674 0. 0.2.643650674 1.793852680 1.744364133 0.

0. 1.744364133 5.484296121 0.43539705600. 0. 0.4353970560 0.3885178704

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

0.1825741858 0.9438389742 0.2703465257 -0.052415756350.3651483716 -0.3222864785 0.8206006183 -0.29901961490.5477225574 -0.06906138765 0.03274925127 0.83316145780.7302967432 -0.02302046167 -0.5024488715 -0.4622573355

> > AA:=evalm(Q&*T&*transpose(Q)); evalm(A);

:= AA

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

4.000000018 3.000000019 2.000000022 0.99999999703.000000018 3.000000012 1.000000010 -0.99999998562.000000022 1.000000009 2.000000002 1.9999999960.9999999959 -0.9999999847 1.999999996 4.999999970

⎢⎢⎢⎢⎢⎢⎢⎢

⎥⎥⎥⎥⎥⎥⎥⎥

4. 3. 2. 1.3. 3. 1. -1.2. 1. 2. 2.1. -1. 2. 5.

> fin;

fin


Recommended