tomasfdel

Métodos Práctica 7

Nov 10th, 2017
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 9.43 KB | None | 0 0
  1. //CONSULTAR PARA ENTENDER BIEN EL ALGORITMO DE NEWTON.
  2. //Preguntar qué pasa si la matriz de mínimos cuadrados no es inversible.
  3.  
  4. Ejercicio 1:
  5. Apartado a)
  6. function imagenAprox = metodoLagrange(conjPares, x)
  7.     imagenAprox = 0
  8.     for i = 1:size(conjPares)(1)
  9.         L = 1
  10.         for j = 1:size(conjPares)(1)
  11.             if(i ~= j)
  12.                 L = L * ( x - conjPares(j,1) ) / ( conjPares(i,1) - conjPares(j,1) )
  13.             end
  14.         end
  15.         imagenAprox = imagenAprox + L * conjPares(i,2)
  16.     end
  17. endfunction
  18.  
  19. function imagenAprox = interpolacionNewton(conjPares, x)
  20.     n = size(conjPares)(1) - 1
  21.     for i = 1:n+1
  22.         a(i) = conjPares(i,2)
  23.     end
  24.    
  25.     for i = 2:n+1
  26.         for j = n+1:-1:i
  27.             a(j) = (a(j) - a(j-1)) / (conjPares(j,1) - conjPares(j-i+1,1))
  28.         end
  29.     end
  30.    
  31.     imagenAprox = a(n+1)
  32.     for i = n:-1:1
  33.         imagenAprox = a(i) + (x - conjPares(i,1)) * imagenAprox
  34.     end
  35. endfunction
  36.  
  37.  
  38. --> paresLineal = [0.2 1.2214; 0.4 1.4918];
  39. --> paresCubica = [0 1; 0.2 1.2214; 0.4 1.4918; 0.6 1.8221];
  40. --> metodoLagrange(paresLineal, 1/3)
  41.  ans  =
  42.    1.4016667
  43. --> metodoLagrange(paresCubica, 1/3)
  44.  ans  =
  45.    1.3955494
  46.  
  47. --> interpolacionNewton(paresLineal, 1/3)
  48.  ans  =
  49.    1.4016667
  50. --> interpolacionNewton(paresCubica, 1/3)
  51.  ans  =
  52.    1.3955494
  53.  
  54.  
  55.  
  56. Apartado b)
  57. //Ultra específico porque justo estamos trabajando con una función creciente.
  58. function cota = cotaDeError(conjPares, x)
  59.     cota = 1
  60.     for i = 1: size(conjPares)(1)
  61.         cota = cota * (x - conjPares(i,1))
  62.     end
  63.     cota = abs(cota / factorial(size(conjPares)(1)) * conjPares(i, 2))
  64. endfunction
  65.  
  66.  
  67. --> cotaDeError(paresLineal, 1/3)
  68.  ans  =
  69.    0.0066302
  70. --> errorLineal = abs(interpolacionNewton(paresLineal, 1/3) - 1.395612425)
  71.  errorLineal  =
  72.    0.0060542
  73. --> cotaDeError(paresCubica, 1/3)
  74.  ans  =
  75.    0.00006
  76. --> errorCubico = abs(interpolacionNewton(paresCubica, 1/3) - 1.395612425)
  77.  errorCubico  =
  78.    0.000063
  79.  
  80.  
  81.  
  82. Ejercicio 2: Carpeta.
  83.  
  84.  
  85.  
  86. Ejercicio 3:
  87. El error de la aproximación será menor a (10**-6)/2 pues está acotado por el producto de las diferencias contra todos los nodos:
  88. --> 0.15 * 0.05 * 0.05 * 0.15 * 0.25 * 0.35 / factorial(6)
  89.  ans  =
  90.    6.836D-09
  91.  
  92. --> pares = [2 0.2239; 2.1 0.1666; 2.2 0.1104; 2.3 0.0555; 2.4 0.0025; 2.5, -0.0484];
  93. --> interpolacionNewton(pares, 2.15)
  94.  ans  =
  95.    0.1383688
  96. --> interpolacionNewton(pares, 2.35)
  97.  ans  =
  98.    0.0287312
  99.  
  100.  
  101.  
  102. Ejercicio 4:
  103. De la primera expresión, despejo que f(0) = 1, f(1) = 3.
  104. De la segunda expresión, despejo que f(2) = 3.
  105. Ampliando la tercera expresión, y con los datos anteriores, puede despejarse que f(3) = 3.
  106. Por último, aplicamos el método de Lagrange con los datos obtenidos para aproximar f(2.5).
  107. --> metodoLagrange([0 1; 1 3; 2 3; 3 3], 2.5)
  108.  ans  =
  109.    2.875
  110.  
  111.  
  112.  
  113. Ejercicio 5:
  114. Apartado a)
  115. P(x) = f[-1] + (x + 1)*f[-1,1] + (x + 1)*(x - 1)*f[-1,1,2] + (x + 1)*(x - 1)*(x - 2)*f[-1,1,2,4]
  116. P(x) = 2 + (x + 1)*1 + (x^2 - x + x - 1)*-2 + (x^3 - 2x^2 - x^2 + 2x + x^2 - 2x - x + 2)*2
  117. P(x) = 2 + (x + 1) + (-2x^2 + 2) + (2x^3 - 4x^2 - 2x + 4) = 2x^3 - 6x^2 - x + 9
  118.  
  119. Apartado b)
  120. P(0) = 9
  121.  
  122. Apartado c)
  123. |Error| <= |(1)(-1)(-2)(-4)/4! * 33.6| =  11.2
  124.  
  125.  
  126.  
  127. Ejercicio 6:
  128.  
  129. function [polinomio, epsilon] = minimosCuadrados(A, b)
  130.     coeficientes = metodoGauss(A' * A, A' * b)
  131.     polinomio = poly(coeficientes, 'x', "coeff")
  132.     epsilonI = A * coeficientes - b
  133.     epsilon = epsilonI' * epsilonI
  134. endfunction
  135.  
  136. --> b = [1; 1.004; 1.31; 1.117; 1.223; 1.422]
  137.  b  =
  138.    1.
  139.    1.004
  140.    1.31
  141.    1.117
  142.    1.223
  143.    1.422
  144. --> Alineal = [1 0; 1 0.15; 1 0.31; 1 0.5; 1 0.6; 1 0.75]
  145.  Alineal  =
  146.    1.   0.  
  147.    1.   0.15
  148.    1.   0.31
  149.    1.   0.5
  150.    1.   0.6
  151.    1.   0.75
  152. --> Acuad = [1 0 0; 1 0.15 0.15**2; 1 0.31 0.31**2; 1 0.5 0.5**2; 1 0.6 0.6**2; 1 0.75 0.75**2]
  153.  Acuad  =
  154.    1.   0.     0.    
  155.    1.   0.15   0.0225
  156.    1.   0.31   0.0961
  157.    1.   0.5    0.25  
  158.    1.   0.6    0.36  
  159.    1.   0.75   0.5625
  160. --> Acub = [1 0 0 0; 1 0.15 0.15**2 0.15**3; 1 0.31 0.31**2 0.31**3; 1 0.5 0.5**2 0.5**3; 1 0.6 0.6**2 0.6**3; 1 0.75 0.75**2 0.75**3]
  161.  Acub  =
  162.    1.   0.     0.       0.      
  163.    1.   0.15   0.0225   0.003375
  164.    1.   0.31   0.0961   0.029791
  165.    1.   0.5    0.25     0.125  
  166.    1.   0.6    0.36     0.216  
  167.    1.   0.75   0.5625   0.421875
  168. --> [Plineal, Elineal] = minimosCuadrados(Alineal, b)
  169.  Elineal  =
  170.    0.0536218
  171.  Plineal  =                    
  172.    0.9960666 +0.4760174x
  173. --> [Pcuad, Ecuad] = minimosCuadrados(Acuad, b)
  174.  Ecuad  =
  175.    0.0531417
  176.  Pcuad  =
  177.                                    2
  178.    1.007732 +0.3542987x +0.1635646x
  179. --> [Pcub, Ecub] = minimosCuadrados(Acub, b)
  180.  Ecub  =
  181.    0.0405174
  182.  Pcub  =
  183.                                     2          3
  184.    0.9653196 +1.6154731x -4.3450249x  +3.97241x
  185.  
  186.  
  187.  
  188. Ejercicio 7:
  189. Apartado a)
  190.  
  191. --> b = [102.56; 113.18; 130.11; 142.05; 167.53; 195.14; 224.87; 256.73; 299.5; 326.72]
  192.  b  =
  193.  
  194.    102.56
  195.    113.18
  196.    130.11
  197.    142.05
  198.    167.53
  199.    195.14
  200.    224.87
  201.    256.73
  202.    299.5
  203.    326.72
  204.  
  205.  
  206. --> Alineal= [1 4; 1 4.2; 1 4.5; 1 4.7; 1 5.1; 1 5.5; 1 5.9; 1 6.3; 1 6.8; 1 7.1]
  207.  Alineal  =
  208.  
  209.    1.   4.
  210.    1.   4.2
  211.    1.   4.5
  212.    1.   4.7
  213.    1.   5.1
  214.    1.   5.5
  215.    1.   5.9
  216.    1.   6.3
  217.    1.   6.8
  218.    1.   7.1
  219.  
  220. --> Acuad = Alineal;
  221. --> Acuad(:, 3) = Alineal(:, 2) .* (Alineal(:, 2))
  222.  Acuad  =
  223.  
  224.    1.   4.    16.  
  225.    1.   4.2   17.64
  226.    1.   4.5   20.25
  227.    1.   4.7   22.09
  228.    1.   5.1   26.01
  229.    1.   5.5   30.25
  230.    1.   5.9   34.81
  231.    1.   6.3   39.69
  232.    1.   6.8   46.24
  233.    1.   7.1   50.41
  234.  
  235.  
  236. --> Acub = Acuad;
  237. --> Acub(:, 4) = Acuad(:, 2) .* Acuad(:, 3)
  238.  Acub  =
  239.  
  240.    1.   4.    16.     64.    
  241.    1.   4.2   17.64   74.088
  242.    1.   4.5   20.25   91.125
  243.    1.   4.7   22.09   103.823
  244.    1.   5.1   26.01   132.651
  245.    1.   5.5   30.25   166.375
  246.    1.   5.9   34.81   205.379
  247.    1.   6.3   39.69   250.047
  248.    1.   6.8   46.24   314.432
  249.    1.   7.1   50.41   357.911
  250.  
  251. --> [Alin, Elin] = minimosCuadrados(Alineal, b)
  252.  Elin  =
  253.    329.01319
  254.  Alin  =                        
  255.   -194.13824 +72.084518x
  256. --> [Acuad, Ecuad] = minimosCuadrados(Acuad, b)
  257.  Ecuad  =
  258.    0.0014429
  259.  Acuad  =
  260.                                     2
  261.    1.2355604 -1.1435234x +6.6182109x
  262. --> [Acub, Ecub] = minimosCuadrados(Acub, b)
  263.  Ecub  =
  264.    0.0005273
  265.  Acub  =
  266.                                     2            3
  267.    3.4290944 -2.3792211x +6.8455778x  -0.0136746x
  268.  
  269.  
  270. Ejercicio 8:
  271.  
  272. function imagenAprox = metodoLagrange(conjPares, x)
  273.     imagenAprox = 0
  274.     for i = 1:size(conjPares)(1)
  275.         L = 1
  276.         for j = 1:size(conjPares)(1)
  277.             if(i ~= j)
  278.                 L = L * ( x - conjPares(j,1) ) / ( conjPares(i,1) - conjPares(j,1) )
  279.             end
  280.         end
  281.         imagenAprox = imagenAprox + L * conjPares(i,2)
  282.     end
  283. endfunction
  284.  
  285. function resultado = aplicame(funcion, x, tamanio)
  286.     for i = 1:tamanio
  287.         resultado(i) = funcion(x(i))
  288.     end
  289. endfunction
  290.  
  291.  
  292. --> deff("y = funcion(x)", "y = 1./(x.**2 + 1)")
  293. --> paresn2 = linspace(-5, 5, 3);
  294. --> paresn6 = linspace(-5, 5, 7);
  295. --> paresn14 = linspace(-5, 5, 15);
  296. --> conjParesn2 = paresn2';
  297. --> conjParesn2(:, 2) = funcion(conjParesn2);
  298.  
  299. --> conjParesn2 = paresn2'
  300.  conjParesn2  =
  301.  
  302.   -5.
  303.    0.
  304.    5.
  305.  
  306.  
  307. --> conjParesn2(:, 2) = funcion(conjParesn2)
  308.  conjParesn2  =
  309.  
  310.   -5.   0.0384615
  311.    0.   1.      
  312.    5.   0.0384615
  313.  
  314.  
  315. --> conjParesn6 = paresn6';
  316.  
  317. --> conjParesn6(:, 2) = funcion(conjParesn6)
  318.  conjParesn6  =
  319.  
  320.   -5.          0.0384615
  321.   -3.3333333   0.0825688
  322.   -1.6666667   0.2647059
  323.    0.          1.      
  324.    1.6666667   0.2647059
  325.    3.3333333   0.0825688
  326.    5.          0.0384615
  327.  
  328.  
  329. --> conjParesn14 = paresn14';
  330.  
  331. --> conjParesn14(:, 2) = funcion(conjParesn14);
  332.  
  333. --> deff("y = Pn2(x)","y = metodoLagrange(conjParesn2, x)")
  334.  
  335. --> deff("y = Pn6(x)","y = metodoLagrange(conjParesn6, x)")
  336.  
  337. --> deff("y = Pn14(x)","y = metodoLagrange(conjParesn14, x)")
  338.  
  339. --> Abscisas = linspace(-5,5,100);
  340.  
  341. --> Imagenesn2 = Pn2(Abscisas=
  342. Imagenesn2 = Pn2(Abscisas=
  343.                          ^^
  344. Error: syntax error, unexpected end of file
  345.  
  346. --> Imagenesn2 = Pn2(Abscisas)
  347. at line     7 of function metodoLagrange ( C:\Users\usuario\Desktop\Runge.sce line 7 )
  348. at line     2 of function Pn2            
  349.  
  350. Inconsistent row/column dimensions.
  351.  
  352. --> exec('C:\Users\usuario\Desktop\Runge.sce', -1)
  353.  
  354. --> Imagenesn2 = aplicame(Pn2, Abscisas, 100);
  355.  
  356. --> Imagenesn6 = aplicame(Pn6, Abscisas, 100);
  357.  
  358. --> Imagenesn14 = aplicame(Pn14, Abscisas, 100);
  359.  
  360. --> plot(Abscisas, Imagenesn2, 'red')
  361. WARNING: Transposing row vector X to get compatible dimensions
  362.  
  363. --> plot(Abscisas, Imagenesn6, 'blue')
  364. WARNING: Transposing row vector X to get compatible dimensions
  365.  
  366. --> plot(Abscisas, Imagenesn14, 'green')
  367. WARNING: Transposing row vector X to get compatible dimensions
  368.  
  369. --> ImagenesRealDeal = aplicame(funcion, Abscisas, 100);
  370.  
  371. --> plot(Abscisas, ImagenesRealDeal, 'black')
  372. WARNING: Transposing row vector X to get compatible dimensions
  373.  
  374.  
  375. Ejercicio 10:
  376. function t = conversion(x)
  377.     t = ((%pi/2) - x* %pi/2)/2
  378. endfunction
  379.  
  380. function resultado = aplicame(funcion, x, tamanio)
  381.     for i = 1:tamanio
  382.         resultado(i) = funcion(x(i))
  383.     end
  384. endfunction
  385.  
  386.  
  387. --> raicesCheb = [cos(%pi/8);cos(3*%pi/8);cos(5*%pi/8);cos(7*%pi/8)]
  388.  raicesCheb  =
  389.    0.9238795
  390.    0.3826834
  391.   -0.3826834
  392.   -0.9238795
  393. --> raicesInterpolacion = aplicame(conversion, raicesCheb, 4)
  394.  raicesInterpolacion  =
  395.  
  396.    0.0597849
  397.    0.4848393
  398.    1.085957
  399.    1.5110115
Add Comment
Please, Sign In to add comment