Advertisement
tomasfdel

Métodos Práctica 6

Nov 9th, 2017
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 3.64 KB | None | 0 0
  1. Ejercicio 1:
  2. function [centro, radio] = Gerschgorin(A)
  3.     N = size(A)(1)
  4.     for i= 1:N
  5.         sumatoria = 0
  6.         for j = 1:N
  7.             if(i ~= j)
  8.                 sumatoria = sumatoria + abs(A(i,j))
  9.             end
  10.         end
  11.         radio(i) = sumatoria
  12.         centro(i) = A(i,i)
  13.     end
  14. endfunction
  15.  
  16. Ejercicio 2: Carpeta
  17.  
  18. Ejercicio 3:
  19. function [A, polinomio, raices, autovalores] = tryMe(k)
  20.     A = [1 -1 0; -2 4 -2; 0 -1 1+k*0.1]
  21.     polinomio = poly(A, 'x')
  22.     raices = roots(polinomio)
  23.     autovalores = spec(A)
  24. endfunction
  25.  
  26.  
  27. --> [A, b, c, d] = tryMe(0)
  28.  d  =
  29.    5.  
  30.    1.  
  31.    0.  
  32.  c  =
  33.    5.  
  34.    1.  
  35.    0.  
  36.  b  =
  37.                     2   3
  38.   -3.176D-16 +5x -6x  +x
  39.  A  =
  40.    1.  -1.   0.
  41.   -2.   4.  -2.
  42.    0.  -1.   1.
  43.  
  44. --> [A, b, c, d] = tryMe(5)
  45.  d  =
  46.    5.0556299  
  47.    0.153193  
  48.    1.2911771  
  49.  c  =
  50.    5.0556299  
  51.    1.2911771  
  52.    0.153193  
  53.  b  =
  54.                 2   3
  55.   -1 +7.5x -6.5x  +x
  56.  A  =
  57.    1.  -1.   0.
  58.   -2.   4.  -2.
  59.    0.  -1.   1.5
  60.  
  61. --> [A, b, c, d] = tryMe(10)
  62.  d  =
  63.    5.1248854  
  64.    0.2384428  
  65.    1.6366718  
  66.  c  =
  67.    5.1248854  
  68.    1.6366718  
  69.    0.2384428  
  70.  b  =
  71.              2   3
  72.   -2 +10x -7x  +x
  73.  A  =
  74.    1.  -1.   0.
  75.   -2.   4.  -2.
  76.    0.  -1.   2.
  77.  
  78.  
  79.  
  80. Ejercicio 4:
  81. Apartado i)
  82. function [z1, autovalor] = MetodoDeLasPotencias(A, z0, tolerancia)
  83.     w = A * z0
  84.     z1 = w / norm(w, "inf")
  85.    
  86.     while( norm(z1-z0, 2) >= tolerancia)
  87.         z0 = z1
  88.         w = A * z0
  89.         z1 = w / norm(w, "inf")
  90.     end
  91.    
  92.     for k = 1:size(z1)(1)
  93.         if(z1(k)~= 0)
  94.             autovalor = w(k) / z0(k)
  95.             break
  96.          end
  97.     end
  98. endfunction
  99.  
  100.  
  101.  
  102.  
  103. --> [v, lambda] = MetodoDeLasPotencias(A, [1; 1; 1; 1], 10**-3)
  104.  lambda  =
  105.    15.
  106.  v  =
  107.    1.
  108.    1.
  109.    1.
  110.    1.
  111. --> [v, lambda] = MetodoDeLasPotencias(A, [2; 5; 10; -4], 10**-3)
  112.  lambda  =
  113.    14.995781
  114.  v  =
  115.    1.
  116.    0.9997421
  117.    0.9999766
  118.    0.9997187
  119.  
  120.  
  121. --> [v, lambda] = MetodoDeLasPotencias(B, [1; 1; 1; 1], 10**-3)
  122.  lambda  =
  123.    14.201904
  124.  v  =
  125.    1.
  126.    0.1557941
  127.    0.3187291
  128.    0.2723857
  129. --> [v, lambda] = MetodoDeLasPotencias(B, [2; 5; 10; -4], 10**-3)
  130.  lambda  =
  131.    14.20218
  132.  v  =
  133.    1.
  134.    0.1560098
  135.    0.318331
  136.    0.2723586
  137.  
  138. Apartado ii)
  139. function [z1, autovalor] = MetodoDeLasPotenciasIter(A, z0, iteraciones)
  140.     w = A * z0
  141.     z1 = w / norm(w, "inf")
  142.    
  143.     cont = 1
  144.     while( cont <= iteraciones)
  145.         z0 = z1
  146.         w = A * z0
  147.         z1 = w / norm(w, "inf")
  148.         cont = cont +1
  149.     end
  150.    
  151.     for k = 1:size(z1)(1)
  152.         if(z1(k)~= 0)
  153.             autovalor = w(k) / z0(k)
  154.             break
  155.          end
  156.     end
  157. endfunction
  158.  
  159. function resultado = compararMetodos(A, z0)
  160.     valor_real = max(abs(spec(A)))
  161.     for i=0:3
  162.         [v, valor_aprox] = MetodoDeLasPotenciasIter(A, z0, 5**i)
  163.         printf("Iteraciones: %d. Valor aproximado: %e. Diferencia: %e.\n", 5**i, valor_aprox, abs(valor_real - valor_aprox))
  164.     end
  165.    
  166.  
  167. --> compararMetodos(A, [2; 5; 10; -4])
  168. Iteraciones: 1. Valor aproximado: 1.179412e+01. Diferencia: 3.205882e+00.
  169. Iteraciones: 5. Valor aproximado: 1.496213e+01. Diferencia: 3.787034e-02.
  170. Iteraciones: 25. Valor aproximado: 1.500000e+01. Diferencia: 1.089262e-11.
  171. Iteraciones: 125. Valor aproximado: 1.500000e+01. Diferencia: 0.000000e+00.
  172. --> compararMetodos(B, [2; 5; 10; -4])
  173. Iteraciones: 1. Valor aproximado: 1.855814e+01. Diferencia: 4.357134e+00.
  174. Iteraciones: 5. Valor aproximado: 1.439782e+01. Diferencia: 1.968147e-01.
  175. Iteraciones: 25. Valor aproximado: 1.420101e+01. Diferencia: 7.125168e-07.
  176. Iteraciones: 125. Valor aproximado: 1.420101e+01. Diferencia: 1.776357e-15.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement