Top Banner
Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Departamento de Matemática Trabajo Práctico Aplicado 2013 Splines Métodos numéricos Informática Aplicada Alumno: Facundo Cosimo Fecha de entrega: 22/11/2013
12

Splines cúblicos

Nov 20, 2015

Download

Documents

facundo

Ejemplos de aplicación de splines cúbicos.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Universidad Nacional de RosarioFacultad de Ciencias Exactas, Ingeniera y Agrimensura

    Departamento de Matemtica

    Trabajo Prctico Aplicado2013

    Splines

    Mtodos numricosInformtica Aplicada

    Alumno: Facundo CosimoFecha de entrega: 22/11/2013

  • Resolucin tarea 1Dado un conjunto de N + 1 puntos a interpolar {(xk, yk)}Nk=0, se nos pi-

    de determinar, a partir de stos datos, los valores de mk y de los coeficientessk,0, sk,1, sk,2, sk,3.

    Desarrollo del problemaComo S(x) es un polinomio cbico definido a trozos, su derivada segunda

    S(x) ser un polinomio lineal definido a trozos en [x0, xn]. Aplicando la fr-mula de interpolacin lineal de Lagrange en el intervalo [xk, xk+1] tenemos:

    Sk (x) = S(xk)x xk+1xk xk+1

    + S(xk+1)x xk

    xk+1 xk(1)

    Segn la notacin propuesta, tenemos que

    hk = xk+1 xk dk =yk+1 yk

    hkmk = Sk (xk) (2)

    con k = 0, 1, ..., N 1Reemplazando con la notacin anterior en la ecuacin (1):

    Sk (x) =mkhk

    (xk+1 x) +mk+1hk

    (x xk) (3)

    para cualquier x[xk, xk+1] y k = 0, 1, ..., N 1. A modo de obtener la ley delpolinomio Sk(x), debemos integrar dos veces la relacin (5). El resultado de laintegracin puede ser escrito como:

    Sk(x) =mk6hk

    (xk+1 x)3 +mk+16hk

    (x xk)3 + pk(xk+1 x) + qk(x xk) (4)

    Utilizando la ecuacin anterior, evaluamos Sk(xk) y Sk(xk+1), sabiendo queSk(xk) = yk y Sk(xk+1) = yk+1, obteniendo el siguiente resultado:

    yk =mk6 h

    2k + pkhk yk+1 =

    mk+16 h

    2k + qkhk (5)

    Despejando pk y qk de la ecuacin anterior y reemplazando en (4), obtenemosla siguiente expresin para Sk(x)

    Sk(x) =mk6hk

    (xk+1 x)3 +mk+16hk

    (x xk)3+

    ( ykhk mkhk6 )(xk+1 x) + (

    yk+1hk mk+1hk6 )(x xk)

    (6)

    Ahora, el problema simplemente consiste en la determinacin de los coeficientes{mk}, ya que dado el conjunto de puntos a interpolar, los coeficientes {yk} y{hk} son conocidos.

    1

  • Determinacin de {mk}Para determinar el valor los {mk}, comenzamos derivando la expresin en

    (6) y evalundola en el punto xk para hallar la derivada por la derecha de S enxk. Simplificando el resultado, obtenemos:

    Sk(xk) = mk3 hk

    mk+16 hk + dk (7)

    De manera similar, para obtener la derivada por la izquierda de S en xk obte-nemos la expresin de Sk1(xk)

    Sk1(xk) = mk3 hk1 +

    mk16 hk1 + dk1 (8)

    De las ecuaciones (7) y (8) y recordando que Sk(xk+1) = Sk+1(xk+1), podemosescribir la siguiente relacin:

    hk1mk1 + 2(hk1 + hk)mk + hkmk+1 = 6(dk dk1) = uk (9)

    donde uk = 6(dk dk1) para k = 0, 1, ..., N 1.

    La relacin (9) es de suma importancia, ya que sus incgnitas son los valo-res buscados {mk}. Podemos interpretar a la relacin anterior como un sistemade N1 ecuaciones lineales con N+1 incgnitas. Las dos ecuaciones necesariassern las condiciones impuestas en los extremos.Para el presente prctico, al tratarse de cerchas naturales, sabemos que

    m0 = 0 mN = 0 (10)

    Por lo tanto, formando un sistema de ecuaciones lineal con las ecuaciones en (9)y las condiciones impuestas en (10) resulta un sistema de N 1 incgnitas conN 1 ecuaciones.

    El sistema resultante es un sistema lineal tridiagonal HM=V cuya expresinde forma matricial tiene la siguiente forma:

    b1 c1 0 0a2 b2 c2 0 00 a3 b3 c3 0 00 0 a4 b4 c4 0...

    ......

    ......

    ......

    0 0 aN2 bN2 cN20 0 aN1 bN1

    m1m2m3m4...

    mN2mN1

    =

    u1u2u3u4...

    uN2uN1

    (11)

    En donde, en una notacin diferente a la utilizada en la bibliografa recomen-dada, se tomaron los valores de a, b y c como:

    a = hk1 b = 2(hk+1 + hk) c = hk (12)

    La matriz en (11) es diagonal estrictamente dominante, como puede observarsefcilmente, por lo que sabemos que ser una matriz regular (es decir, existe A1)

    2

  • Una vez resuelto el sistema lineal anterior y calculados los coeficientes {mk}, loscoeficientes de la cerca {sk,j} para el trozo Sk(x) estn dados por las frmulas

    sk0 = yk sk,1 = dk hk(2mk +mk+1)

    6sk,2 =

    mk2 sk,3 =

    mk+1 mk6hk

    (13)

    con k = 0, 1, ..., N 1

    ResumenEn resumen, pasando en limpio lo anterior para utilizarlo en fines prcticos,

    los pasos a seguir para encontrar los coeficientes de las cerchas interpolantesSk(x) son los siguientes:

    1. Determinar las condiciones de borde del spline (los valores de m0 y mN ).

    2. A partir de la ecuacin (9), formar y resolver el sistema lineal tridiagonalHM = V para determinar el valor de los coeficientes mk.

    3. Determinar el valor de los coeficientes de la cercha Sk(x).

    Resolucin tarea 2Dados los puntos {(3,1), (1, 3), ( 12 , 2), (2,1), (5, 6)}, se pide determi-

    nar los valores de hk, dk, mk y los coeficientes sk,i.

    En ste caso tenemos un total de 5 puntos, por lo que N = 4Sabemos que hk = xk+1 xk y dk = yk+1ykhk para k = 0, 1, ..., N 1.Reemplazando los valores en la expresin anterior obtenemos

    h0 = x1 x0 = (1) (3) = 2

    h1 = x2 x1 =12 (1) = 1,5

    h2 = x3 x2 = 212 = 1,5

    h3 = x4 x3 = 5 2 = 3

    d0 =y1 y0h0

    = 3 (1)2 = 2

    d1 =y2 y1h1

    = 2 31,5 = 23

    d2 =y3 y2h2

    = (1) 21,5 = (2)

    d3 =y4 y3h3

    = 6 (1)3 =73

    Ahora debemos determinar los coeficientes {mk}. Para ello, a partir de laecuacin (9) formamos el siguiente sistema lineal tridiagonal de 3 ecuacionescon 3 incgnitas

    2(h0 + h1)m1 + h1m2 = 6(dk dk1) h0m0h1m1 + 2(h1 + h2)m2 + h2m3 = 6(dk dk1)

    h2m2 + 2(h2 + h3)m3 = 6(dk dk1) h3m4

    3

  • Recordando que al tratarse de un spline natural, quedan impuestas las condi-ciones m0 = 0 y mN = 0.Al resolver el sistema anterior, encontramos que losvalores de {mk} son

    m0 = 0m1 1,9342m2 1,6404m3 3,1623m4 = 0

    Finalmente, queda determinar los coeficientes sk,i del polinomio cbico

    Sk(x) = sk,0 + sk,1(x xk) + sk,2(x xk)2 + sk,3(x xk)3

    Los coeficientes estn dados por las relaciones en (11). Por lo tanto, para stasituacin los valores de los mismos son:

    s1,0 = 1s1,1 2,6447s1,2 = 0s1,3 0,1611

    s2,0 = 3s2,1 0,7105s2,2 0,9671s2,3 0,0326

    s3,0 = 2s3,1 1,9703s3,2 0,8201s3,3 0,5336

    s4,0 = 1s4,1 0,8289s4,2 1,5811s4,3 0,1756

    La grfica resultante del polinomio S(x) es la siguiente:

    Figura 1: Grfica obtenida con Matlab para el conjunto de puntos

    4

  • Resolucin tarea 3Se pide desarrollar en matlab una funcin SPLine1.m que admita como

    argumentos un par de vectores X e Y con los puntos (xk, yk), y otro vector XXcon los puntos a interpolar. La funcin deber devolver un vector YY con elresultado de evaluar el spline natural S sobre los puntos definidos en XX

    1 function YY = SPLine1(X, Y, XX)2 %Antes que nada, compruebo que los valores ingresados sean correctos3 if (length(X) ~= length(Y))4 fprintf(Las dimensiones no coinciden.);5 return;6 end78 if ~isequal(X,sort(X)) %Uso isequal para comparacin entre vectores9 fprintf(Valores de X desordenados.);

    10 return;11 end1213 %Ya se que estan ordenados, necesariamente X(1) va a ser el menor y14 %X(length(X)) el mayor.15 a = X(1);16 b = X(length(X));1718 for i=1:length(XX)19 if (XX(i) < a || XX(i) > b)20 fprintf(Valores fuera de rango.);21 return;22 end23 end2425 i = 1;2627 %Ac defino el tipo de spline28 m0 = 0;29 mN = 0;3031 %Otras definiciones32 cant = length(X);33 N = cant - 1; %N es la cantidad de puntos menos 1.3435 %En realidad, k va desde 0 a N-1. En mi script, j entonces va de 1 a N36 H = X(2:N+1) - X(1:N);37 D = (Y(2:N+1)-Y(1:N))./H;3839 %Calculo los coeficientes m_k40 %En realidad, k va desde 1 a N-1, en mi script k va desde 2 a N41 A = zeros(N-1, N-1);42 for i = 2:N43 %A todos los indices de la matriz tengo que restarles 1, ya que empieza

    5

  • 44 %a contar desde 245 A(i-1, i-1) = 2*(H(i)+H(i-1));46 U(i-1) = 6*(D(i)-D(i-1));4748 if (i-1 == 1)49 U(i-1) = U(i-1) - H(i-1)*m0;50 else51 A(i-1, i-2) = H(i-1);52 end53 if (i-1 == N-1)54 U(i-1) = U(i-1) - H(i-1)*mN;55 else56 A(i-1, i) = H(i);57 end58 end5960 M = Gauss(A,U);6162 %A PARTIR DE AC , DETERMINO LOS COEFICIENTES63 %En realidad, k va desde 0 a N-1, en mi script k va desde 1 a N64 M = [m0;M;mN];6566 for k=1:N67 S(k, 1) = Y(k); %Este sera s_(k-1,0)68 S(k, 2) = D(k)-(H(k)*(2*M(k)+M(k+1))/6); %Este sera s_(k-1,1)69 S(k, 3) = M(k)/2; %Este sera s_(k-1,2)70 S(k, 4) = (M(k+1)-M(k))/(6*H(k)); %Este sera s_(k-1,3)7172 expresion = strcat(num2str(S(k,1)), +, num2str(S(k,2)), *(x-, ...73 num2str(X(k)), )+, num2str(S(k,3)), *(x-, num2str(X(k)), ...74 ).^2+,num2str(S(k,4)), *(x-, num2str(X(k)), ).^3);75 funcion = inline(expresion);7677 a = X(k);78 b = X(k+1);79 for j=1:length(XX)80 if (XX(j) = a)81 YY(j) = funcion(XX(j));82 end83 end84 end85 end

    Resolucin tarea 4Se pide realizar un script Tarea4.m que grafique el spline cbico natural que

    pase por los puntos mencionados en la Tarea 2.

    6

  • 1 X = [-3 -1 0.5 2 5];2 Y = [-1 3 2 -1 6];34 XX = -3:0.02:5; %Hay 401 puntos equidistanciados5 YY = SPLine1(X, Y, XX);6 plot(XX, YY, b, X, Y, *k);

    Figura 2: Grfica obtenida con Matlab para el conjunto de puntos de la tarea2. Los astriscos son los puntos de unin

    Resolucin tarea 5Se pide implementar en MatLab una funcin SPLine2.m que admita como

    argumentos un par de vectores X e Y con los puntos (xk, yk) y otro vector TTcon los puntos a interpolar. La funcin deber devolver un par de vectores XXe YY con el resultado de evaluar el spline cbico uniforme S sobre los puntosdefinidos en TT.

    1 function [XX, YY] = SPLine2(X, Y, TT)2 if (length(X) ~= length(Y))3 fprintf(Las dimensiones no coinciden.);4 return;5 end67 N = length(X) - 1;8 T = 0:N;

    7

  • 910 if (min(TT) < 0 || max(TT) > N)11 fprintf(Verifique los parametros ingresados.);12 return;13 end1415 XX = SPLine1(T, X, TT);16 YY = SPLine1(T, Y, TT);17 end

    Resolucin tarea 6Se pide realizar un script llamado Tarea6.m para determinar la grfica del

    spline cbico S que pasa por un conjunto de puntos dados.

    1 X = [214 177 158 121 84 51 23 20 24 32 39 65 92 112 130 144 147 143 ...2 127 117 110 97 73 60 50 91 136 141 164 185 204 229 290 341 373 ...3 385 392 395 388 370 343 329 318 311 316 334 373 425 485 502 526 ...4 522 513 502 473 448 421 403 398 406 423 437 449 481 488 484 465 ...5 443 395 336 277 224 213 218 233 242 237 224 214];6 Y = [530 522 512 495 468 440 415 411 405 397 391 416 439 451 462 456 ...7 443 432 355 314 281 229 127 77 36 36 37 56 156 247 304 349 410 ...8 443 451 451 445 429 395 327 237 186 139 92 52 26 22 49 95 111 ...9 138 151 160 150 124 102 86 87 113 165 226 276 313 424 453 500 ...

    10 523 530 518 483 437 387 377 398 468 507 523 529 530];1112 TT = 0:78/1000:78;13 [XX, YY] = SPLine2(X, Y, TT);14 plot(XX, YY, r, X, Y, *k);

    8

  • Figura 3: Grfica obtenida con matlab para los puntos dados. Puede recono-cerse una letra "n" minscula

    Resolucin tarea 7Se pide graficar, utilizando un spline cbico natural, la primer letra del apelli-

    do. En ste caso, se graficar la letra C, en imprenta mayscula, fuente Tahoma.

    1 X = [318.4 318.4 299.16 229.17 192.21 163.97 137.17 113.58 94.71 83.7 ...2 74.26 71.12 71.9 80.55 97.07 126.16 156.04 189.07 228.39 263 314.1 ...3 318.82 318.82 313.94 296.01 241.28 200.5 184.67 134.15 93.14 42.18 ...4 16.7 14.82 25.2 50.67 107.29 142.2 170.51 214.86 249.77 279.97 318.4];5 Y = [25.14 86.78 73.52 39.71 35.78 40.5 52.29 70.38 94.76 120.7 152.94 ...6 190.69 230.01 270.9 310.21 341.67 358.18 364.47 362.11 349.53 314.93 ...7 314.93 377.05 379.96 388.9 406.38 411.1 410.16 404.49 379.96 322.4 ...8 240.31 183.69 117.64 62.91 11.01 -3.14 -7.86 -8.81 -2.2 5.35 25.14];9

    10 N=length(X)-1;1112 TT = 0:N/1000:N;13 [XX, YY] = SPLine2(X, Y, TT);14 plot(XX, YY, r);15 axis equal;

    9

  • (a) Contorno graficado con splines

    (b) Letra original

    Figura 4: Comparacin entre el perfil original y el perfil graficado

    Resolucin tarea 8Se propone disear una figura de dos dimensiones que se corresponda con el

    prefil de la carrocera de un automvil.

    1 X = [103.68 165.94 213.82 231.25 235.38 240.8 241.11 241.5 242.93 245.13 ...2 249.51 256.44 263.01 267.03 277.62 286.02 293.32 295.87 294.78 ...3 296.97 301.71 305 308.33 313.13 318.14 318.87 313.4 307.56 300.25 ...4 279.08 265.94 251.33 234.6 215.2 196.57 176.49 161.9 136.7 120.63 ...5 116.25 112.6 111 103.9 91.79 70 52 40.3 30 23.15 20.6 19.15 18.77 ...6 19.15 21 22.706 23.52 25.7 27.9 31.6 39.22 42.5 44.33 45.79 45.95 ...7 45.42 45.52 46.15 47.61 49.8 53.46 57.48 63.7 71.34 76.12 83.76 89.96 ...8 95.44 100.55 103.84 104.2 103.68];9 Y = [18.58 19.58 17.57 17.7 18.03 19.86 23.51 28.62 36.65 43.59 49.79 ...

    10 54.9 57.82 58.19 57.42 53.44 45.05 35.19 24.24 23.14 22.78 27.16 33.86 ...11 43.22 57 61.48 66.6 69.51 73 80.5 84.5 89 92.9 96.5 97.6 96.5 92.9 83 ...12 76.5 75 75.73 75.3 75.3 74.62 73 69.9 65.5 61.15 56.36 54.5 52.3 49 ...13 43.6 33 27.16 25.7 23.9 22.78 21 20.6 20.6 20.6 20.85 23.51 26.8 31.9 ...14 37.4 42.5 47.6 52 55.63 59 60.75 60.75 59.6 57.46 52.71 46.14 36.65 ...15 25.7 18.58];1617 N=length(X)-1;1819 TT = 0:N/1000:N;20 [XX, YY] = SPLine2(X, Y, TT);

    10

  • 21 plot(XX, YY, r);22 axis equal;

    (a) Perfil graficado con splines

    (b) Perfil original

    Figura 5: Comparacin entre el perfil original y el perfil graficado

    11