Advertisement
lucasbublitz

PPGEM - Fundamentos de Matemática - Atividade 2

Jun 15th, 2023
1,810
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 1.10 KB | Source Code | 0 0
  1.  
  2. using Plots, LinearAlgebra
  3.  
  4. # Caixa preta, pontos de entrada para regressão
  5. x = [0.0:1.0:10.0...]
  6. y = [5.0, 2.25, 1.01, 0.45, 0.20, 0.09, 0.04, 0.02, 0.08, 0.0038, 0.00174]
  7.  
  8. scatter(x,y, label="Valores observados")
  9.  
  10. # 1 regressão polinomial
  11.  
  12. f(x) = [1 x x^2 x^3] # bases proposta
  13.  
  14. A = vcat([f(x[i]) for i in 1:length(x)]...) # matriz de bases
  15.  
  16. a = (A' * A) \ (A' * y) # resolução do sistema linear
  17.  
  18. fr(x) = (f(x) * a)[1]
  19.  
  20. plot!(fr, 0, 10, label="Regressão polinomial")
  21.  
  22. # 2 regressão exponencial a0 * exp(-a1 * x)
  23.  
  24. f(x,a_0,a_1) = a_0 * exp(-a_1 * x) # função proposta
  25.  
  26. Φ(a_0,a_1) = sum((f.(x,a_0,a_1) .- y).^2)
  27.  
  28. a_0, a_1 = 0.3, 0.3 # valor inicial arbitrado
  29.  
  30. γ = 1e-2
  31.  
  32. # Método de Newton-Raphson
  33. for i in 1:1e6
  34.     ∇Φ = [sum(2 * (f.(x,a_0,a_1) .- y) .* exp.(-a_1 * x)) sum(2 * (f.(x,a_0,a_1) .- y) .* (-a_0) .* x .* exp.(-a_1 * x))]
  35.     println(norm(∇Φ))
  36.     if norm(∇Φ) < 1e-7
  37.         println("Convergiu!")
  38.         break
  39.     end
  40.     a_0, a_1 = a_0 - γ * ∇Φ[1], a_1 - γ * ∇Φ[2]
  41. end
  42. a_0,a_1
  43.  
  44. plot!(x -> f(x,a_0,a_1), 0, 10, label="Regressão exponencial")
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement