所以我试图找到"k"
哪个满足方程
F(k,u,v,w) = 0
Run Code Online (Sandbox Code Playgroud)
而 u、v 和 w 是额外的参数。我一直在尝试使用 newton_krylov ( http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.newton_krylov.html )来解决它,它将基于的猜测k
,但似乎没有办法包含其他参数。
我的问题是我需要传递F
额外的参数,但似乎没有办法将它们传递给F
. 有没有我不知道的方法来传递它们?或者我可以做些什么来使它工作?
此外,如果有更适合这种情况的功能,那也会很酷。
我有几个关于 APOPT 如何解决 MINLP 的问题。
optimization nonlinear-optimization mixed-integer-programming gekko
更新:最初的问题是:是否有一个R函数使用在matlab中的"lsqnonlin"函数中实现的相同算法?但是,答案更多与在R中搜索函数有关.我认为答案通常对R用户非常有用.所以我编辑了标题,但在这里再次问了原始问题:在R中,如何进行非线性最小二乘优化,包括求解微分方程?
我做的非线性最小二乘优化和发现功能的MATLAB lsqnonlin
进行比所有的优化算法我R中试图更好(包括函数算法optimx
,nlm
,nlminb
,solnp
在这个意义上,等等),这是更快,找到了"更正确的"解决方案
但是,我没有找到在Matlab中使用的R中的"信任区域反射"算法的实现.有人知道是否已经实施了吗?此外,"信任区域反射"算法是否更适合这种优化算法?
我试图重现Kostakis的纸张解决方案.在本文中,使用de Heligman-Pollard模型将删节死亡率表扩展为完整的生命表.该模型有8个参数必须安装.作者使用了改进的Gauss-Newton算法; 该算法(E04FDF)是NAG计算机程序库的一部分.Levenberg Marquardt不应该产生相同的参数集吗?我的代码或LM算法的应用有什么问题?
library(minpack.lm)
## Heligman-Pollard is used to expand an abridged table.
## nonlinear least squares algorithm is used to fit the parameters on nqx observed over 5 year intervals (5qx)
AGE <- c(0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70)
MORTALITY <- c(0.010384069, 0.001469140, 0.001309318, 0.003814265, 0.005378395, 0.005985625, 0.006741766, 0.009325056, 0.014149626, 0.021601755, 0.034271934, 0.053836246, 0.085287751, 0.136549522, 0.215953304)
## The start parameters for de Heligman-Pollard Formula (Converged set a=0.0005893,b=0.0043836,c=0.0828424,d=0.000706,e=9.927863,f=22.197312,g=0.00004948,h=1.10003)
## I …
Run Code Online (Sandbox Code Playgroud) r nonlinear-functions nonlinear-optimization model-fitting levenberg-marquardt
我有以下需要解决的3个非线性方程组:
-xyt + HF = 0
-2xzt + 4yzt - xyt + 4z ^ 2t - M1F = 0
-2xt + 2yt + 4zt - 1 = 0
其中x,HF和M1F是已知参数.因此,y,z和t是要计算的参数.
尝试解决问题:
def equations(p):
y,z,t = p
f1 = -x*y*t + HF
f2 = -2*x*z*t + 4*y*z*t - x*y*t + 4*t*z**2 - M1F
f3 = -2*x*t + 2*y*t + 4*z*t - 1
return (f1,f2,f3)
y,z,t = fsolve(equations)
print equations((y,z,t))
Run Code Online (Sandbox Code Playgroud)
但问题是如果我想使用scipy.optimize.fsolve
那么我应该输入一个初始猜测.就我而言,我没有任何初始条件.
还有另一种方法可以解决3个在python中有3个未知数的非线性方程吗?
编辑:
原来我有条件!条件是HF> M1F,HF> 0,M1F> 0.
我几个月来一直在努力解决R中的优化问题.lpSolve
由于幻想体育数据的例子,我终于想出了线性问题.然而,我的原始和(仍)当前问题是nloptr
在R中使用等式约束尝试非线性优化.
我要做的是尽量减少两股票投资组合的差异,其中两只股票的回报几乎完全负相关(对于那些熟悉学术金融的人来说,最终目标是证明/反驳是否或没有套利机会).我希望最小化方差,取决于两个权重的总和正好等于1,同时在0和1之间.下面是我正在使用的确切代码,它应该很容易重现:
sd1 <- 0.01
sd2 <- 0.025
corr.lo <- -0.999
# Objective function
eval.f <- function(w) {
return(
(w[1]*sd1)^2 +
(w[2]*sd2)^2 +
(2*w[1]*w[2]*sd1*sd2*corr.lo)
)
}
# Constraint function
eval.g <- function(w) {
return(w[1] + w[2] - 1)
}
w0 <- c(0.5, 0.5)
opts <- list('algorithm' = 'NLOPT_GN_ISRES', 'xtol_rel' = 1.0e-8)
res <- nloptr(
x0 = w0,
eval_f = eval.f,
lb = c(0,0),
ub = c(1,1),
eval_g_eq = eval.g,
opts = opts
)
Run Code Online (Sandbox Code Playgroud)
优化运行没有错误,并生成以下内容:
> res …
Run Code Online (Sandbox Code Playgroud) MATLAB有两种方法来解决非线性方程:
因此,可以使用以下方法来求解n
非线性独立方程组:
fzero
fsolve
fsolve
它们一起解决它们我的直觉是:
n
由于复杂度(梯度计算)为0(n ^ 2),因此循环方法比单个系统更快n
因为循环在MATLAB中具有较高的开销,并且可能存在一些恒定的启动时间fzero
比fsolve
单个非线性方程专用的更快.问题:解决此问题的最快方法是什么?应该使用哪些选项来加快流程?
相关主题
我试图用我自己的S形模型在这个例子后进行非线性回归:
$$ f(d)=\frac {1} {1 +\exp(-k(de))} $$
在网站上解释的示例完美,但不是我的代码:
import pylab
import numpy
from scipy import optimize
def f(d, k, e):
return 1 / (1 + numpy.exp(-k(d-e)))
def resid(p, y, d):
k, e = p
return y - f(d, k, e)
# load the data
d, r, n = numpy.loadtxt('data.txt', unpack=True)
y = numpy.concatenate([d, r])
k0, e0 = 1, 10
[k, e], flag = optimize.leastsq(resid, [k0, e0], args=(d, r))
print flag, k, e
# plot the data
pylab.plot(d, r, …
Run Code Online (Sandbox Code Playgroud) 我在 R 中使用 optim() 来解决涉及积分的可能性时遇到了一些麻烦。我收到一条错误消息,指出“优化错误(par = c(0.1,0.1),LLL,方法=“L-BFGS-B”,较低= c(0,:L-BFGS-B需要'fn的有限值'"。下面是我的代码:
s1=c(1384,1,1219,1597,2106,145,87,1535,290,1752,265,588,1188,160,745,237,479,39,99,56,1503,158,916,651,1064,166,635,19,553,51,79,155,85,1196,142,108,325
,135,28,422,1032,1018,128,787,1704,307,854,6,896,902)
LLL=function (par) {
integrand1 <- function(x){ (x-s1[i]+1)*dgamma(x, shape=par[1], rate=par[2]) }
integrand2 <- function(x){ (-x+s1[i]+1)*dgamma(x, shape=par[1],rate=par[2]) }
likelihood = vector()
for(i in 1:length(s1)) {likelihood[i] =
log( integrate(integrand1,lower=s1[i]-1,upper=s1[i])$value+ integrate(integrand2,lower=s1[i],upper=s1[i]+1)$value )
}
like= -sum(likelihood)
return(like)
}
optim(par=c(0.1,0.1),LLL,method="L-BFGS-B", lower=c(0,0))
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
最好的事物,
元明
我正在使用包装gnls
功能nlme
以拟合曲线。当我试图知道它使用的是什么优化器时,我被定向到nlminb
函数文档,它指出:
使用PORT例程的无约束和框约束优化。
我不知道什么是“ PORT例程”。它是一系列优化算法还是仅仅是称为“ PORT例程”的优化算法?
任何人都可以至少请在“例程”中告诉我一些名称。例如,“梯度下降”,“ Levenberg-Marquardt”还是“信任区域”?
提前致谢!!
optimization ×5
r ×5
numpy ×3
scipy ×3
matlab ×2
python ×2
gekko ×1
nlme ×1
performance ×1
python-2.7 ×1