Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // CONSULTAR EJERCICIOS 6, 7-B, 8
- // COMPLETAR EL 7-B
- // HACER EL 8
- // ¿QUÉ SERÍA "RESOLVER EL SISTEMA" EN EL 10?
- //Ejercicio 1
- /// 1.875 ---> f(1.875) = 0.0004306
- /// 4.694 ---> f(4.694) = -0.0048884
- /// 7.855 ---> f(7.855) = -0.3129768
- //Ejercicio 2
- function c = metodoBiseccion(funcion, a, b, tolerancia)
- c = (a+b)/2
- condiciones = [abs(b-c) >= tolerancia, funcion(c) ~= 0]
- while(or(condiciones))
- if(funcion(a) * funcion(c) < 0)
- b = c
- else
- a = c
- end;
- c = (a+b)/2
- condiciones = [abs(b-c) >= tolerancia, funcion(c) ~= 0]
- end;
- endfunction
- //Apartado A, nos fijamos gráficamente las raíces.
- //Sabemos que una raíz es 0, no es necesario aproximarla.
- metodoBiseccion(funcion1, -1, 0.5, 0.01)
- ans =
- 0.0019531
- -1-> metodoBiseccion(funcion1, 0.5, 2, 0.01)
- ans =
- 1.4082031
- -1-> funcion1(0.0019531)
- ans =
- -0.0019512
- -1-> funcion1(1.4082031)
- ans =
- 0.0047072
- //Apartado B
- -1-> metodoBiseccion(funcion2,-10,10,0.01)
- ans =
- 0.8105469
- -1-> funcion2(0.8105469)
- ans =
- -0.0129839
- //Vemos que es muy poca precisión.
- -1-> metodoBiseccion(funcion2,-20,-6,0.01)
- ans =
- -8.6181641
- -1-> funcion2(-8.6181641)
- ans =
- -14.780538
- //Now THAT'S better.
- -1-> metodoBiseccion(funcion2,-20,-6,0.0001)
- ans =
- -8.6131973
- -1-> funcion2(-8.6131973)
- ans =
- -0.0820772
- //Apartado C
- //Sabemos que 1 es raíz de la función.
- --> metodoBiseccion(funcion3, 0.01, 0.5, 0.01)
- ans =
- 0.1401563
- //Ejercicio 3
- function c = metodoSecante(funcion, a, b, tolerancia)
- c = b - funcion(b) * (b-a)/(funcion(b)-funcion(a))
- condiciones = [abs(b-c) >= tolerancia, funcion(c) ~= 0]
- while(and(condiciones))
- a = b
- b = c
- c = b - funcion(b) * (b-a)/(funcion(b)-funcion(a))
- condiciones = [abs(b-c) >= tolerancia, funcion(c) ~= 0]
- end;
- endfunction
- --> metodoSecante(funcion4, 2, 5, 0.001)
- ans =
- 1.9337549
- --> funcion4(ans)
- ans =
- 0.0000015
- //Ejercicio 4
- // Converge a un valor cercano a 0.7390668, que es la raíz de la ecuación x - cos(x) = 0.
- // Estamos aplicando una iteración de punto fijo para resolver eso.
- // El número es 4/17 de pi.
- //Ejercicio 5
- // Puede verse que la ecuación posee dos raíces: En x = 1 y x = 2.
- // Vemos que f(x) = 2^(x-1) es continua con derivada de primer orden continua.
- // En el intervalo [0,1], la derivada está por debajo de 1 para todos los valores, entonces hay una única raíz y converge. (Vale por el teorema)
- // En el intervalo (-inf, 0), la imagen cae en [0,1] por lo que converge a 1.
- // Para el (2,+inf) la función 2^x es mayor a 2x, y crece más rápido. Si convergiera a algo mayor a 2, tendría que haber una tercera raíz, pero las funciones no se vuelven a cruzar en el intervalo.
- // Para el (1,2), la iteración es decreciente pues 2^x es menor a 2x. Además, la sucesión está acotada inferiormente por 2^0 = 1, por lo que converge. Luego, como las dos raíces son únicas, y la función no puede converger a 2,k converge a 1.
- // Ejercicio 6
- // VER LO QUE ESCRIBISTE CON RABASEDAS
- // x^2 - 5 = 0 ==> x = x + 1(x^2 - 5)
- // Con x = -sqrt(5), vemos que x = x + c (x**2 − 5) para cualquier c. Es decir, para garantizar la convergencia, deberíamos tratar de encontrar un c que nos permita garantizas la convergencia a -sqrt(5).
- // No sé cómo justificar el tema de a <= x <= b ==> a <= g(x) <= b, pero me fijé que al hacer el estudio de la derivada de la función, para que la derivada esté entre -1 y 1, un c = 1/3 hace que la condición valga para (-3,0). Si agarro -2.9, converge a -sqrt(5).
- // Ejercicio 7
- function d2 = ejercicio7(inicio,tolerancia)
- g = 9.8
- h = 4
- T = 5
- w = 2 *%pi / T
- d1 = inicio
- d2 = w**2 /(g*tanh(h*d1))
- while abs(d1 - d2) > tolerancia
- d1 = d2
- d2 = w**2 /(g*tanh(h*d1))
- end
- endfunction
- function z = metodoNewton(funcion, inicio, tolerancia)
- z1 = inicio
- z = z1 - funcion(z1)/numderivative(funcion, z1, [], 4)
- condiciones =[abs(z-z1) > tolerancia, funcion(z)~= 0]
- while and(condiciones)
- z1 = z
- z = z1 - funcion(z1)/numderivative(funcion, z1, [], 4)
- condiciones =[abs(z-z1) > tolerancia, funcion(z)~= 0]
- end
- endfunction
- // Ejercicio 9
- function z = metodoNewtonEspecial(F, vectorInicial)
- z1 = vectorInicial
- z = z1 - numderivative(F,z1)\F(z1)
- for i = 2:5
- z1 = z
- z = z1 - numderivative(F,z1)\F(z1)
- end
- endfunction
- --> deff("z = funcion1(x)","z = 1 + x(1)**2 + x(2)**2 + exp(x(1)) * cos(x(2))")
- --> deff("z = funcion2(x,y)","z = 2*x(1)*x(2) + exp(x(1)) * sin(x(2))")
- --> deff("z = F(x)", "z = [funcion1(x);funcion2(x)]")
- --> metodoNewtonEspecial(F, [-1; 4])
- ans =
- -1.5317081
- -0.4822167
- --> F(ans)
- ans =
- 3.7701792
- 1.3769846
- // Ejercicio 10
- function z = metodoNewtonSistema(F, vectorInicial, tolerancia)
- z1 = vectorInicial
- z = z1 - numderivative(F,z1)\F(z1)
- condiciones =[norm(z-z1, 'inf') > tolerancia, or(F(z)~= 0)]
- while(and(condiciones))
- z1 = z
- z = z1 - numderivative(F,z1)\F(z1)
- condiciones =[norm(z-z1, 'inf') > tolerancia, or(F(z)~= 0)]
- end
- endfunction
- // Ejercicio 11
- // Calculé las derivadas a mano. Apartado A.
- function z = metodoNewtonEj11(F, vectorInicial, tolerancia)
- z1 = vectorInicial
- z = z1 - numderivative(F,z1)\F(z1)
- while(norm(z-z1, 2) > tolerancia)
- z1 = z
- z = z1 - numderivative(F,z1)\F(z1)
- end
- endfunction
- --> deff("z = derivadaX1 (x)", "z = 2 + 4 * x(1) * exp(2 * x(1) **2 + x(2) **2)")
- --> deff("z = derivadaX2 (x)", "z = 6 * x(2) + 2 * x(2) * exp(2 * x(1) **2 + x(2) **2)")
- --> deff("z = ejercicio11(x)", "z = [derivadaX1(x); derivadaX2(x)]")
- --> metodoNewtonEj11(ejercicio11, [1; 1], 10**-12)
- ans =
- -0.3765446
- -2.009D-27
- --> ejercicio11(ans)
- ans =
- 4.441D-16
- -1.739D-26
- // De nuevo las calculé a mano.
- --> deff("z = derivada2X1 (x)", "z = 4 * exp(2 * x(1) **2 + x(2) **2) + 16 * x(1)**2 * exp(2 * x(1) **2 + x(2) **2)")
- --> deff("z = derivadaX1X2 (x)", "z = 8 * x(1) * x(2) * exp(2 * x(1) **2 + x(2) **2)")
- --> deff("z = derivada2X2 (x)", "z = 6 + 2 * exp(2 * x(1) **2 + x(2) **2) + 4 * x(2)**2 * exp(2 * x(1) **2 + x(2) **2)")
- --> deff("z = Hessiana(x)", "z = [derivada2X1(x) derivadaX1X2(x); derivadaX1X2(x) derivada2X2(x)]")
- --> metodoNewtonEj11(ejercicio11, [1; 1], 10**-12)
- ans =
- -0.3765446
- -2.009D-27
- --> Hessiana(ans)
- ans =
- 8.3238127 0.
- 0. 8.655728
- //Vemos que es definida positiva. Great success.
- //Ejercicio 12
- // Apartado A.
- function z = metodoNewtonSistema(F, vectorInicial, tolerancia)
- z1 = vectorInicial
- z = z1 - numderivative(F,z1)\F(z1)
- condiciones =[norm(z-z1, 'inf') > tolerancia, or(F(z)~= 0)]
- while(and(condiciones))
- z1 = z
- z = z1 - numderivative(F,z1)\F(z1)
- condiciones =[norm(z-z1, 'inf') > tolerancia, or(F(z)~= 0)]
- end
- endfunction
- --> deff("z = ecuacion1(x)", "z = x(1) * exp(x(2)) + x(3) - 10")
- --> deff("z = ecuacion2(x)", "z = x(1) * exp(2 * x(2)) + 2 * x(3) - 12")
- --> deff("z = ecuacion3(x)", "z = x(1) * exp(3 * x(2)) + 3 * x(3) - 15")
- --> deff("z = sistema(x)", "z = [ecuacion1(x); ecuacion2(x); ecuacion3(x)]")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement