我有一个二次函数f,其中f = function (x) {2+.1*x+.23*(x*x)}
。假设我有另一个二次fn g g = function (x) {3+.4*x-.60*(x*x)}
现在,我希望在给定约束条件1 g>0
和2. 600<x<650
我已尝试过套餐optim
,constrOptim
和optimize
。 optimize
做一个暗淡的事。优化,但没有约束和constrOptim
我无法理解。我需要使用R.请帮助。
P.S。在这个例子中,值可能不稳定,因为我已经给出了两个随机二次函数,但基本上我想要给定二次约束的二次fn的最大化。
答案 0 :(得分:1)
如果您使用通常的二次公式解决g(x)=0
x
,那么这只会在x
上为您提供另一组边界。如果您的x^2
系数为负数,则g(x) > 0
为解之间,否则g(x)>0
在解决方案之外,因此在(-Inf,x1)和(x2,Inf)之内。
在这种情况下,g(x)>0
为-1.927 < x < 2.59
。因此,在这种情况下,无法同时实现约束(g(x)
对于600<x<650
而言1 < x < 5
小于0。
但假设您的第二个条件是g(x)>0
,那么您只需将1 < x < 2.59
的解决方案与该时间间隔合并为f
,然后最大化f
在该区间内使用标准单变量优化。
你甚至不需要运行优化算法。您的目标x^2
是二次的。如果x^2
的系数为正,则最大值将位于x的限制之一,因此您只需要尝试少量值。如果f(x)
的系数为-ve,那么最大值可以是极限,也可以是f'(x)=0
达到峰值(解决f
)的点,如果它在您的限制范围内。
因此,您可以准确地执行此操作,只需要测试一些条件,然后计算一些时间间隔,然后在这些间隔限制下计算{{1}}的某些值。