Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Ejercicio 1:
- function [centro, radio] = Gerschgorin(A)
- N = size(A)(1)
- for i= 1:N
- sumatoria = 0
- for j = 1:N
- if(i ~= j)
- sumatoria = sumatoria + abs(A(i,j))
- end
- end
- radio(i) = sumatoria
- centro(i) = A(i,i)
- end
- endfunction
- Ejercicio 2: Carpeta
- Ejercicio 3:
- function [A, polinomio, raices, autovalores] = tryMe(k)
- A = [1 -1 0; -2 4 -2; 0 -1 1+k*0.1]
- polinomio = poly(A, 'x')
- raices = roots(polinomio)
- autovalores = spec(A)
- endfunction
- --> [A, b, c, d] = tryMe(0)
- d =
- 5.
- 1.
- 0.
- c =
- 5.
- 1.
- 0.
- b =
- 2 3
- -3.176D-16 +5x -6x +x
- A =
- 1. -1. 0.
- -2. 4. -2.
- 0. -1. 1.
- --> [A, b, c, d] = tryMe(5)
- d =
- 5.0556299
- 0.153193
- 1.2911771
- c =
- 5.0556299
- 1.2911771
- 0.153193
- b =
- 2 3
- -1 +7.5x -6.5x +x
- A =
- 1. -1. 0.
- -2. 4. -2.
- 0. -1. 1.5
- --> [A, b, c, d] = tryMe(10)
- d =
- 5.1248854
- 0.2384428
- 1.6366718
- c =
- 5.1248854
- 1.6366718
- 0.2384428
- b =
- 2 3
- -2 +10x -7x +x
- A =
- 1. -1. 0.
- -2. 4. -2.
- 0. -1. 2.
- Ejercicio 4:
- Apartado i)
- function [z1, autovalor] = MetodoDeLasPotencias(A, z0, tolerancia)
- w = A * z0
- z1 = w / norm(w, "inf")
- while( norm(z1-z0, 2) >= tolerancia)
- z0 = z1
- w = A * z0
- z1 = w / norm(w, "inf")
- end
- for k = 1:size(z1)(1)
- if(z1(k)~= 0)
- autovalor = w(k) / z0(k)
- break
- end
- end
- endfunction
- --> [v, lambda] = MetodoDeLasPotencias(A, [1; 1; 1; 1], 10**-3)
- lambda =
- 15.
- v =
- 1.
- 1.
- 1.
- 1.
- --> [v, lambda] = MetodoDeLasPotencias(A, [2; 5; 10; -4], 10**-3)
- lambda =
- 14.995781
- v =
- 1.
- 0.9997421
- 0.9999766
- 0.9997187
- --> [v, lambda] = MetodoDeLasPotencias(B, [1; 1; 1; 1], 10**-3)
- lambda =
- 14.201904
- v =
- 1.
- 0.1557941
- 0.3187291
- 0.2723857
- --> [v, lambda] = MetodoDeLasPotencias(B, [2; 5; 10; -4], 10**-3)
- lambda =
- 14.20218
- v =
- 1.
- 0.1560098
- 0.318331
- 0.2723586
- Apartado ii)
- function [z1, autovalor] = MetodoDeLasPotenciasIter(A, z0, iteraciones)
- w = A * z0
- z1 = w / norm(w, "inf")
- cont = 1
- while( cont <= iteraciones)
- z0 = z1
- w = A * z0
- z1 = w / norm(w, "inf")
- cont = cont +1
- end
- for k = 1:size(z1)(1)
- if(z1(k)~= 0)
- autovalor = w(k) / z0(k)
- break
- end
- end
- endfunction
- function resultado = compararMetodos(A, z0)
- valor_real = max(abs(spec(A)))
- for i=0:3
- [v, valor_aprox] = MetodoDeLasPotenciasIter(A, z0, 5**i)
- printf("Iteraciones: %d. Valor aproximado: %e. Diferencia: %e.\n", 5**i, valor_aprox, abs(valor_real - valor_aprox))
- end
- --> compararMetodos(A, [2; 5; 10; -4])
- Iteraciones: 1. Valor aproximado: 1.179412e+01. Diferencia: 3.205882e+00.
- Iteraciones: 5. Valor aproximado: 1.496213e+01. Diferencia: 3.787034e-02.
- Iteraciones: 25. Valor aproximado: 1.500000e+01. Diferencia: 1.089262e-11.
- Iteraciones: 125. Valor aproximado: 1.500000e+01. Diferencia: 0.000000e+00.
- --> compararMetodos(B, [2; 5; 10; -4])
- Iteraciones: 1. Valor aproximado: 1.855814e+01. Diferencia: 4.357134e+00.
- Iteraciones: 5. Valor aproximado: 1.439782e+01. Diferencia: 1.968147e-01.
- Iteraciones: 25. Valor aproximado: 1.420101e+01. Diferencia: 7.125168e-07.
- Iteraciones: 125. Valor aproximado: 1.420101e+01. Diferencia: 1.776357e-15.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement