Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Plots, LinearAlgebra
- # Caixa preta, pontos de entrada para regressão
- x = [0.0:1.0:10.0...]
- y = [5.0, 2.25, 1.01, 0.45, 0.20, 0.09, 0.04, 0.02, 0.08, 0.0038, 0.00174]
- scatter(x,y, label="Valores observados")
- # 1 regressão polinomial
- f(x) = [1 x x^2 x^3] # bases proposta
- A = vcat([f(x[i]) for i in 1:length(x)]...) # matriz de bases
- a = (A' * A) \ (A' * y) # resolução do sistema linear
- fr(x) = (f(x) * a)[1]
- plot!(fr, 0, 10, label="Regressão polinomial")
- # 2 regressão exponencial a0 * exp(-a1 * x)
- f(x,a_0,a_1) = a_0 * exp(-a_1 * x) # função proposta
- Φ(a_0,a_1) = sum((f.(x,a_0,a_1) .- y).^2)
- a_0, a_1 = 0.3, 0.3 # valor inicial arbitrado
- γ = 1e-2
- # Método de Newton-Raphson
- for i in 1:1e6
- ∇Φ = [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))]
- println(norm(∇Φ))
- if norm(∇Φ) < 1e-7
- println("Convergiu!")
- break
- end
- a_0, a_1 = a_0 - γ * ∇Φ[1], a_1 - γ * ∇Φ[2]
- end
- a_0,a_1
- plot!(x -> f(x,a_0,a_1), 0, 10, label="Regressão exponencial")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement