tomasfdel

Métodos Práctica 4

Sep 28th, 2017
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 10.52 KB | None | 0 0
  1. // CONSULTAR EJERCICIO 2: SI ESTÁ BIEN Y SI TENGO QUE PIVOTEAR. Fuck me
  2. // CONSULTAR EJERCICIO 3: ¿CÓMO DEVOLVER LAS MATRICES? Asignarle un par de valor de retorno. CAMBIAR TODAS LAS FUNCIONES. Fuck me ^ 2
  3.  
  4.  
  5. // Ejercicio 1
  6. function x = sustitucionRegresiva(A)
  7.     dimension = size(A)(1)
  8.     sol(dimension) = A(dimension, dimension+1) / A(dimension,dimension)
  9.     for i = dimension-1:-1:1
  10.         sol(i) = (A(i,dimension+1) - A(i, i+1:dimension) * sol(i+1:dimension)) / A(i,i)
  11.     end
  12.     x = sol
  13. endfunction
  14.  
  15. function matrizExpandida = eliminacionGaussSinPivoteo(A, b)
  16.     dimension = size(b)(1)
  17.     for i = 1 : dimension-1
  18.         for j = i+1 : dimension
  19.             coeficiente = A(j,i)/A(i,i)
  20.             A(j,i:dimension) = A(j,i:dimension) - A(i,i:dimension) * coeficiente
  21.             b(j) = b(j) - b(i) * coeficiente
  22.         end
  23.     end
  24.     matrizExpandida = [A,b]
  25. endfunction
  26.  
  27. function matrizExpandida = eliminacionGaussConPivoteo(A, b)
  28.     dimension = size(b)(1)
  29.     for i = 1 : dimension-1
  30.         if(A(i,i) == 0)
  31.             for j = i+1:dimension
  32.                 if(A(j,i) ~= 0)
  33.                     VectorAux = A(j, :)
  34.                     A(j, :) = A(i, :)
  35.                     A(i, :) = VectorAux
  36.                    
  37.                     Auxiliar = b(j)
  38.                     b(j) = b(i)
  39.                     b(i) = Auxiliar
  40.                     break
  41.                 end;
  42.             end;
  43.         end;
  44.         for j = i+1:dimension    
  45.             coeficiente = A(j,i)/A(i,i)
  46.             A(j,i:dimension) = A(j,i:dimension) - A(i,i:dimension) * coeficiente
  47.             b(j) = b(j) - b(i) * coeficiente
  48.         end;
  49.     end;
  50.     matrizExpandida = [A,b]
  51. endfunction
  52.  
  53. function solucion = metodoGauss(A,b)
  54.     solucion = sustitucionRegresiva(eliminacionGaussConPivoteo(A,b))
  55. endfunction
  56.  
  57.  
  58. --> A = [1 1 0 3; 2 1 -1 1; 3 -1 -1 2; -1 2 3 -1];
  59. --> b = [4; 1; -3; 4];
  60. --> metodoGauss(A,b)
  61.  ans  =
  62.   -1.
  63.    2.
  64.    0.
  65.    1.
  66.  
  67.  
  68. --> A = [1 -1 2 -1; 2 -2 3 -3; 1 1 1 0; 1 -1 4 3];
  69. --> b = [-8; -20; -2; 4];
  70. --> metodoGauss(A,b)
  71.  ans  =
  72.   -7.
  73.    3.
  74.    2.
  75.    2.
  76.  
  77.  
  78. --> A = [1 1 0 4; 2 1 -1 1; 4 -1 -2 2; 3 -1 -1 2];
  79. --> b = [2; 1; 0; -3];
  80. --> metodoGauss(A,b)
  81.  ans  =
  82.   -4.
  83.    0.6666667
  84.   -7.
  85.    1.3333333
  86.  
  87.  
  88.  
  89. // Ejercicio 2
  90. function x = sustitucionEspecial(A)
  91.     dimension = size(A)(1)
  92.     sol(dimension) = A(dimension, dimension+1) / A(dimension,dimension)
  93.     for i = dimension-1:-1:1
  94.         sol(i) = (A(i,dimension+1) - A(i, i+1) * sol(i+1)) / A(i,i)
  95.     end
  96.     x = sol
  97. endfunction
  98.  
  99. //Supongo que no tengo que pivotear.
  100. function matrizExpandida = eliminacionGaussEspecial(A, b)
  101.     dimension = size(b)(1)
  102.     for i = 1 : dimension-1
  103.         coeficiente = A(i+1,i)/A(i,i)
  104.         A(j,i:i+1) = A(j,i:i+1) - A(i,i:i+1) * coeficiente
  105.         b(j) = b(j) - b(i) * coeficiente
  106.     end;
  107.     matrizExpandida = [A,b]
  108. endfunction
  109.  
  110. function solucion = GaussEspecial(A,b)
  111.     solucion = sustitucionEspecial(eliminacionGaussEspecial(A,b))
  112. endfunction
  113.  
  114.  
  115.  
  116.  
  117. // Ejercicio 3
  118. //Supongo que no tengo que pivotear. A es rectangular m x n.
  119. function matrices = factorizacionLU(A)
  120.     m = size(A)(1)
  121.     n = size(A)(2)
  122.     L = eye(m,m)
  123.         for i = 1 : m
  124.             for j = i+1 : m
  125.                 coeficiente = A(j,i)/A(i,i)
  126.                 L(j,i) = coeficiente
  127.                 A(j,i:n) = A(j,i:n) - A(i,i:n) * coeficiente
  128.             end
  129.         end        
  130.     U = A
  131.     matrices = [L, U]
  132. endfunction
  133.  
  134.  
  135. --> factorizacionLU(A1)
  136.  ans  =
  137.    1.   0.   0.   0.   1.   1.   0.
  138.    2.   1.   0.   0.   0.  -1.  -1.
  139.    4.   5.   1.   0.   0.   0.   3.
  140.    3.   4.   1.   1.   0.   0.   0.
  141. --> ans(:, 1:4) * ans(:, 5:7)
  142.  ans  =
  143.    1.   1.   0.
  144.    2.   1.  -1.
  145.    4.  -1.  -2.
  146.    3.  -1.  -1.
  147. --> A1
  148.  A1  =
  149.    1.   1.   0.
  150.    2.   1.  -1.
  151.    4.  -1.  -2.
  152.    3.  -1.  -1.
  153.  
  154.  
  155. --> factorizacionLU(A2)
  156.  ans  =
  157.    1.     0.   4.  -1.    -2.    2.
  158.    0.75   1.   0.  -0.25   0.5   0.5
  159. --> ans(:, 1:2) * ans(:, 3:6)
  160.  ans  =
  161.    4.  -1.  -2.   2.
  162.    3.  -1.  -1.   2.
  163. --> A2
  164.  A2  =
  165.    4.  -1.  -2.   2.
  166.    3.  -1.  -1.   2.
  167.  
  168.  
  169. --> ApartadoA = [1.012 -2.132 3.104; -2.132 4.096 -7.013; 3.104 -7.013 0.014]
  170.  ApartadoA  =
  171.    1.012  -2.132   3.104
  172.   -2.132   4.096  -7.013
  173.    3.104  -7.013   0.014
  174. --> factorizacionLU(ApartadoA)
  175.  ans  =
  176.    1.          0.          0.   1.012  -2.132       3.104    
  177.   -2.1067194   1.          0.   0.     -0.3955257  -0.4737431
  178.    3.0671937   1.1977555   1.   0.      0.         -8.9391408
  179. --> ans(:, 1:3) * ans(:, 4:6)
  180.  ans  =
  181.    1.012  -2.132   3.104
  182.   -2.132   4.096  -7.013
  183.    3.104  -7.013   0.014
  184.  
  185.  
  186. --> ApartadoB = [2.1756 4.0231 -2.1732 5.1967; -4.0231 6 0 1.1973; -1 5.2107 1.1111 0; 6.0235 7 0 4.1561]
  187.  ApartadoB =
  188.    2.1756   4.0231  -2.1732   5.1967
  189.   -4.0231   6.       0.       1.1973
  190.   -1.       5.2107   1.1111   0.    
  191.    6.0235   7.       0.       4.1561
  192. --> factorizacionLU(ApartadoB)
  193.  ans  =
  194.          column 1 to 6
  195.    1.          0.          0.          0.   2.1756   4.0231  
  196.   -1.849191    1.          0.          0.   0.       13.43948
  197.   -0.4596433   0.5253098   1.          0.   0.       8.882D-16
  198.    2.7686615  -0.3079436   2.1497102   1.   0.       0.      
  199.  
  200.          column 7 to 8
  201.   -2.1732      5.1967  
  202.   -4.0186619   10.806991
  203.    2.2232457  -3.2883901
  204.    0.          0.1652261
  205. --> ans(:, 1:4) * ans(:, 5:8)
  206.  ans  =
  207.  
  208.    2.1756   4.0231  -2.1732   5.1967
  209.   -4.0231   6.       0.       1.1973
  210.   -1.       5.2107   1.1111   0.    
  211.    6.0235   7.       0.       4.1561
  212.  
  213.  
  214.  
  215. // Ejercicio 4
  216. // Para la primer factorización, tenemos: P34  E42(-8)  E32(5)  E41(-6)  E31(-5)  E21(-4)  A  = U
  217. // Es decir, antes de hacer la factorización, debería permutar las filas 3 y 4 de A.
  218.  
  219. //Siendo U cuadrada.
  220. function x = sustitucionHaciaArriba(U, b)
  221.     dimension = size(U)(1)
  222.     sol(dimension) = b(dimension) / U(dimension,dimension)
  223.     for i = dimension-1:-1:1
  224.         sol(i) = (b(i) - U(i, i+1:dimension) * sol(i+1:dimension)) / U(i,i)
  225.     end
  226.     x = sol
  227. endfunction
  228.  
  229.  
  230. function x = sustitucionHaciaAbajo(L, b)
  231.     dimension = size(L)(1)
  232.     sol(1) = b(1) / L(1,1)
  233.     for i = 2:dimension
  234.         sol(i) = (b(i) - L(i, 1:i-1) * sol(1:i-1)) / L(i,i)
  235.     end
  236.     x = sol
  237. endfunction
  238.  
  239.  
  240. function matrices = factorizacionLU(A)
  241.     m = size(A)(1)
  242.     n = size(A)(2)
  243.     L = eye(m,m)
  244.         for i = 1 : m
  245.             for j = i+1 : m
  246.                 coeficiente = A(j,i)/A(i,i)
  247.                 L(j,i) = coeficiente
  248.                 A(j,i:n) = A(j,i:n) - A(i,i:n) * coeficiente
  249.             end
  250.         end        
  251.     U = A
  252.     matrices = [L, U]
  253. endfunction
  254.  
  255.  
  256. //Suponiendo no tengo que permutar filas de A, y que A es cuadrada.
  257. //LUx = b ==> Ly = b , Ux = y
  258. function x = ecuacionFactorizacionLU(A, b)
  259.     dimension = size(A)(1)
  260.     LU = factorizacionLU(A)
  261.     y = sustitucionHaciaAbajo(LU(:, 1:dimension), b)
  262.     x = sustitucionHaciaArriba(LU(:, dimension+1:dimension*2), y)
  263. endfunction
  264.  
  265.  
  266.  
  267.  
  268. --> A_Real = [1 2 -2 1; 4 5 -7 6; 5 25 -15 -3; 6 -12 -6 22;]
  269.  A_Real  =
  270.    1.   2.   -2.    1.
  271.    4.   5.   -7.    6.
  272.    5.   25.  -15.  -3.
  273.    6.  -12.  -6.    22.
  274. --> b_Real = [2; 2; 1; 0]
  275.  b_Real  =
  276.    2.
  277.    2.
  278.    1.
  279.    0.
  280.  
  281.  
  282. --> A = [1 2 -2 1; 4 5 -7 6; 6 -12 -6 22; 5 25 -15 -3]
  283.  A  =
  284.    1.   2.   -2.    1.
  285.    4.   5.   -7.    6.
  286.    6.  -12.  -6.    22.
  287.    5.   25.  -15.  -3.
  288. --> b = [2; 2; 0; 1]
  289.  b  =
  290.    2.
  291.    2.
  292.    0.
  293.    1.
  294. --> ecuacionFactorizacionLU(A, b)
  295.  ans  =
  296.    19.5
  297.   -17.
  298.   -18.
  299.   -19.5
  300.  
  301.  
  302. --> A_Real * ans
  303.  ans  =
  304.    2.
  305.    2.
  306.    1.
  307.    0.
  308.  
  309.  
  310.  
  311.  
  312.  
  313. // Ejercicio 5
  314. //Siendo U cuadrada.
  315. function x = sustitucionHaciaArriba(U, b)
  316.     dimension = size(U)(1)
  317.     sol(dimension) = b(dimension) / U(dimension,dimension)
  318.     for i = dimension-1:-1:1
  319.         sol(i) = (b(i) - U(i, i+1:dimension) * sol(i+1:dimension)) / U(i,i)
  320.     end
  321.     x = sol
  322. endfunction
  323.  
  324.  
  325. function x = sustitucionHaciaAbajo(L, b)
  326.     dimension = size(L)(1)
  327.     sol(1) = b(1) / L(1,1)
  328.     for i = 2:dimension
  329.         sol(i) = (b(i) - L(i, 1:i-1) * sol(1:i-1)) / L(i,i)
  330.     end
  331.     x = sol
  332. endfunction
  333.  
  334.  
  335. //Supongo que A es cuadrada.
  336. function LU = factorizacionDoolittle(A)
  337.     dimension = size(A)(1)
  338.     L = eye(A)
  339.     U = zeros(A)
  340.    
  341.     //Despejo la fila 1 de U.
  342.     for j = 1:dimension
  343.         U(1,j) = A(1,j)
  344.     end
  345.     //Despejo la columna 1 de L.
  346.     for k = 2:dimension
  347.        L(k,1) = A(k,1) / U(1,1)
  348.     end    
  349.    
  350.     for i = 2:dimension
  351.         //Despejo valores de la fila i de U.
  352.         for j = i:dimension
  353.            U(i,j) = A(i,j) - L(i, 1:i-1) * U(1:i-1, j)
  354.         end
  355.         //Despejo valores de la columna i de L.
  356.         for k = i+1:dimension
  357.            L(k,i) = (A(k,i) - L(k, 1:i-1) * U(1:i-1, i)) / U(i,i)
  358.         end        
  359.     LU = [L, U]    
  360.     end
  361. endfunction
  362.  
  363.  
  364. //Suponiendo no tengo que permutar filas de A, y que A es cuadrada.
  365. //LUx = b ==> Ly = b , Ux = y
  366. function x = ecuacionFactorizacionLU(A, b)
  367.     dimension = size(A)(1)
  368.     LU = factorizacionDoolittle(A)
  369.     y = sustitucionHaciaAbajo(LU(:, 1:dimension), b)
  370.     x = sustitucionHaciaArriba(LU(:, dimension+1:dimension*2), y)
  371. endfunction
  372.  
  373.  
  374. --> A = [1 2 3 4; 1 4 9 16; 1 8 27 64; 1 16 81 256]
  375.  A  =
  376.    1.   2.    3.    4.  
  377.    1.   4.    9.    16.
  378.    1.   8.    27.   64.
  379.    1.   16.   81.   256.
  380. --> b = [2; 10; 44; 190]
  381.  b  =
  382.    2.
  383.    10.
  384.    44.
  385.    190.
  386. --> ecuacionFactorizacionLU(A,b)
  387.  ans  =
  388.   -1.
  389.    1.
  390.   -1.
  391.    1.
  392. --> A * ans
  393.  ans  =
  394.    2.
  395.    10.
  396.    44.
  397.    190.
  398.  
  399.  
  400.  
  401.  
  402. // Ejercicio 6
  403. function matrices = cholesky(A)
  404.     dimension = size(A)(1)
  405.     R = zeros(A)
  406.     Rt = zeros(A)
  407.    
  408.     Rt(1,1) = sqrt(A(1,1))
  409.     R(1,1) = Rt(1,1)
  410.     //Despejo la primer columna de Rt.
  411.     for i = 2:dimension
  412.         Rt(i,1) = A(i,1) / R(1,1)
  413.         R(1, i) = Rt(i,1)
  414.     end;
  415.     //Despejo el resto de la matriz.
  416.     for i = 2 : dimension
  417.         for j = 2 : i-1
  418.             Rt(i,j) = (A(i,j) - Rt(i,1:j-1) * R(1:j-1, j)) / R(j,j)
  419.             R(j,i) = Rt(i,j)
  420.         end;
  421.         Rt(i,i) = sqrt(A(i,i) - Rt(i,1:i-1) * R(1:i-1,i))
  422.         R(i,i) = Rt(i,i)
  423.     end;
  424.     matrices = [Rt, R]
  425. endfunction
  426.  
  427. --> A = [16 -12 8 -16; -12 18 -6 9; 8 -6 5 -10; -16 9 -10 46]
  428.  A  =
  429.    16.  -12.   8.   -16.
  430.   -12.   18.  -6.    9.
  431.    8.   -6.    5.   -10.
  432.   -16.   9.   -10.   46.
  433. --> chol(A)
  434.  ans  =
  435.    4.  -3.   2.  -4.
  436.    0.   3.   0.  -1.
  437.    0.   0.   1.  -2.
  438.    0.   0.   0.   5.
  439. --> cholesky(A)
  440.  ans  =
  441.    4.   0.   0.   0.   4.  -3.   2.  -4.
  442.   -3.   3.   0.   0.   0.   3.   0.  -1.
  443.    2.   0.   1.   0.   0.   0.   1.  -2.
  444.   -4.  -1.  -2.   5.   0.   0.   0.   5.
Add Comment
Please, Sign In to add comment