Retornar duas soluções do comando optmim

Olá pessoal! Estou precisando de uma ajuda, preciso encontrar uma solução para uma variável que terei que usar um método iterativo para estimá-la, entretanto, existe duas soluções (raízes) ou mais para esta variável e preciso da segunda solução pois é a que tem explicação física, sendo assim, a função optmim me retorna a primeira, gostaria que retornasse todas as soluções possíveis, alguém saberia como posso fazer isso? Ou indicar outra função. Segue o código e o gráfico mostrando as duas soluções, onde a linha horizontal intersepta o perfil. Abraço Ho <- 12 Hvar <- 0.09061577 k <- 4.182488e-06 Lmax_fun <- function(par,Ho,Hvar,So,k){ L <- par ((Ho*Hvar/((-So-(k*L^1.75))*(1-Hvar)))-L)^2 } So <- -0.03 (Lmax <- optim(par=100,fn=Lmax_fun,Ho=Ho,Hvar=Hvar,k=k,So=So,method ="BFGS")) abs(So)/(k*Lmax^1.75) >= 1.75+1 #Condição para valer a escolha da função L <- 1:300 DEN_L <- ((-So-(k*L^1.75))*(1-Hvar))*L plot(L,DEN_L,type = "l",ylim = c(0,max(DEN_L)*1.10)) abline(h=Ho*Hvar) points(x=Lmax,Ho*Hvar) Lmax2 <- 129.3757 points(x=Lmax2,Ho*Hvar)

uma possível solução rootSolve::polyroot() se puder escrever o probçlema como encotnrar as multiplas raizes de um polinomio, o que em geral é possível On Fri, 2 Oct 2015, Wagner Wolff wrote:
Olá pessoal! Estou precisando de uma ajuda, preciso encontrar uma solução para uma variável que terei que usar um método iterativo para estimá-la, entretanto, existe duas soluções (raízes) ou mais para esta variável e preciso da segunda solução pois é a que tem explicação física, sendo assim, a função optmim me retorna a primeira, gostaria que retornasse todas as soluções possíveis, alguém saberia como posso fazer isso? Ou indicar outra função. Segue o código e o gráfico mostrando as duas soluções, onde a linha horizontal intersepta o perfil.
Abraço
Ho <- 12 Hvar <- 0.09061577 k <- 4.182488e-06
Lmax_fun <- function(par,Ho,Hvar,So,k){ L <- par ((Ho*Hvar/((-So-(k*L^1.75))*(1-Hvar)))-L)^2 } So <- -0.03 (Lmax <- optim(par=100,fn=Lmax_fun,Ho=Ho,Hvar=Hvar,k=k,So=So,method ="BFGS"))
abs(So)/(k*Lmax^1.75) >= 1.75+1 #Condição para valer a escolha da função
L <- 1:300 DEN_L <- ((-So-(k*L^1.75))*(1-Hvar))*L
plot(L,DEN_L,type = "l",ylim = c(0,max(DEN_L)*1.10)) abline(h=Ho*Hvar) points(x=Lmax,Ho*Hvar) Lmax2 <- 129.3757 points(x=Lmax2,Ho*Hvar)
[IMAGE]

Wagner, veja a adaptação de seu código comentada abaixo. # função Lmax_fun <- function(par){ L <- par Ho <- 12 Hvar <- 0.09061577 So <- -0.03 k <- 4.182488e-06 ((Ho*Hvar/((-So-(k*L^1.75))*(1-Hvar)))-L)^2 } L <- 1:300 Ho <- 12; Hvar <- 0.09061577; So <- -0.03; k <- 4.182488e-06 DEN_L <- ((-So-(k*L^1.75))*(1-Hvar))*L plot(L,DEN_L,type = "l", ylim = c(0,max(DEN_L)*1.10)) abline(h=Ho*Hvar) # otimização unidimensional - optimize() # resultado depende do intervalo escolhido # pelo gráfico da função podemos ver os intervalos das raízes optimize(f = Lmax_fun, interval = c(min(L), max(L))) optimize(f = Lmax_fun, interval = c(1, 200)) optimize(f = Lmax_fun, interval = c(100, 300)) library(pracma) # findmins() divide o intervalo de busca n vezes (n = 100 por default) mins <- findmins(f = Lmax_fun, min(L), max(L)) points(mins, rep(Ho*Hvar, 3), pch = 20) #Condição para valer a escolha da função mins[abs(So)/(k*mins^1.75) >= 1.75+1] 2015-10-02 14:48 GMT-03:00 Wagner Wolff <wwolff@usp.br>:
Olá pessoal! Estou precisando de uma ajuda, preciso encontrar uma solução para uma variável que terei que usar um método iterativo para estimá-la, entretanto, existe duas soluções (raízes) ou mais para esta variável e preciso da segunda solução pois é a que tem explicação física, sendo assim, a função optmim me retorna a primeira, gostaria que retornasse todas as soluções possíveis, alguém saberia como posso fazer isso? Ou indicar outra função. Segue o código e o gráfico mostrando as duas soluções, onde a linha horizontal intersepta o perfil.
Abraço
Ho <- 12 Hvar <- 0.09061577 k <- 4.182488e-06
Lmax_fun <- function(par,Ho,Hvar,So,k){ L <- par ((Ho*Hvar/((-So-(k*L^1.75))*(1-Hvar)))-L)^2 } So <- -0.03 (Lmax <- optim(par=100,fn=Lmax_fun,Ho=Ho,Hvar=Hvar,k=k,So=So,method ="BFGS"))
abs(So)/(k*Lmax^1.75) >= 1.75+1 #Condição para valer a escolha da função
L <- 1:300 DEN_L <- ((-So-(k*L^1.75))*(1-Hvar))*L
plot(L,DEN_L,type = "l",ylim = c(0,max(DEN_L)*1.10)) abline(h=Ho*Hvar) points(x=Lmax,Ho*Hvar) Lmax2 <- 129.3757 points(x=Lmax2,Ho*Hvar)
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- ############################################################### ## Jônatan Dupont Tatsch ## Professor do Departamento de Física ## Coordenador Substituto do Programa de Pós-Graduação em Meteorologia (PPGMET) ## Centro de Ciências Exatas e Naturais (CCNE) ## Universidade Federal de Santa Maria - UFSM ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900 ## Telefone: +55(55)33012083 ## www.ufsm.br/meteorologia ###############################################################

Olá pessoal obrigado pelas dicas, problema solucionado. Abraço Em 02/10/2015 17:58, "Jônatan" <jdtatsch@gmail.com> escreveu:
Wagner, veja a adaptação de seu código comentada abaixo.
# função Lmax_fun <- function(par){ L <- par Ho <- 12 Hvar <- 0.09061577 So <- -0.03 k <- 4.182488e-06 ((Ho*Hvar/((-So-(k*L^1.75))*(1-Hvar)))-L)^2 }
L <- 1:300 Ho <- 12; Hvar <- 0.09061577; So <- -0.03; k <- 4.182488e-06 DEN_L <- ((-So-(k*L^1.75))*(1-Hvar))*L plot(L,DEN_L,type = "l", ylim = c(0,max(DEN_L)*1.10)) abline(h=Ho*Hvar)
# otimização unidimensional - optimize() # resultado depende do intervalo escolhido # pelo gráfico da função podemos ver os intervalos das raízes optimize(f = Lmax_fun, interval = c(min(L), max(L))) optimize(f = Lmax_fun, interval = c(1, 200)) optimize(f = Lmax_fun, interval = c(100, 300))
library(pracma) # findmins() divide o intervalo de busca n vezes (n = 100 por default) mins <- findmins(f = Lmax_fun, min(L), max(L)) points(mins, rep(Ho*Hvar, 3), pch = 20)
#Condição para valer a escolha da função mins[abs(So)/(k*mins^1.75) >= 1.75+1]
2015-10-02 14:48 GMT-03:00 Wagner Wolff <wwolff@usp.br>:
Olá pessoal! Estou precisando de uma ajuda, preciso encontrar uma solução para uma variável que terei que usar um método iterativo para estimá-la, entretanto, existe duas soluções (raízes) ou mais para esta variável e preciso da segunda solução pois é a que tem explicação física, sendo assim, a função optmim me retorna a primeira, gostaria que retornasse todas as soluções possíveis, alguém saberia como posso fazer isso? Ou indicar outra função. Segue o código e o gráfico mostrando as duas soluções, onde a linha horizontal intersepta o perfil.
Abraço
Ho <- 12 Hvar <- 0.09061577 k <- 4.182488e-06
Lmax_fun <- function(par,Ho,Hvar,So,k){ L <- par ((Ho*Hvar/((-So-(k*L^1.75))*(1-Hvar)))-L)^2 } So <- -0.03 (Lmax <- optim(par=100,fn=Lmax_fun,Ho=Ho,Hvar=Hvar,k=k,So=So,method ="BFGS"))
abs(So)/(k*Lmax^1.75) >= 1.75+1 #Condição para valer a escolha da função
L <- 1:300 DEN_L <- ((-So-(k*L^1.75))*(1-Hvar))*L
plot(L,DEN_L,type = "l",ylim = c(0,max(DEN_L)*1.10)) abline(h=Ho*Hvar) points(x=Lmax,Ho*Hvar) Lmax2 <- 129.3757 points(x=Lmax2,Ho*Hvar)
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- ############################################################### ## Jônatan Dupont Tatsch ## Professor do Departamento de Física ## Coordenador Substituto do Programa de Pós-Graduação em Meteorologia (PPGMET) ## Centro de Ciências Exatas e Naturais (CCNE) ## Universidade Federal de Santa Maria - UFSM ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900 ## Telefone: +55(55)33012083 ## www.ufsm.br/meteorologia ###############################################################
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (3)
-
Jônatan
-
Paulo Justiniano
-
Wagner Wolff