我有一些奇怪的条件我需要适应曲线。我试过在其他地方查找,但我甚至不确定我是否使用了正确的术语。非常感谢任何帮助。
我正在尝试将多项式曲线拟合到一组四个点。其中有三点已知,但第四点有点棘手。我有最大y值的x值,但我不知道最大y值是多少。例如,假设在(0,0),(1,1)和(4,0)处有已知点。最大y值在x = 3处,因此第四个点是(3,ymax)。如何将4阶多项式曲线拟合到这些条件?提前谢谢。
答案 0 :(得分:4)
实际上有可能因为你需要x = 3的y值应该是最大的。因此,4次多项式有5个系数待确定,你有以下等式:
y(0)= 0
y(1)= 1
y(4)= 0
dy / dx(3)= 0(x = 3时的一阶导数应为0)
d2y / dx2(3)< 0(x = 3时的二阶导数应为负)
因此,在x = 3处选择d2y / dx2的任何负值并求解5个线性方程式,你将得到一个4次多项式。请注意,以这种方式获得的x = 3处的y值仅是局部最大值,而不是全局最大值。
答案 1 :(得分:2)
从@ fang的答案中填写代数(一点基本微积分,一些代数和一些线性代数):
y = a+b*x+c*x^2+d*x^3+e*x^4
y(0) = 0 -> a=0
为其余计算设置a=0
。
y(1) = 1 -> b+c+d+e = 1
y(4) = 0 -> 4*b+16*c+64*d+256*e=0
dy/dx(3)=0 ->
b+2*x*c+3*x^2*d+4*x^3*e=0 ->
b+6*c+27*d+108*e=0
d2y/dx2(3)<0 = 2*c+6*d*x+12*e*x^2 < 0
= 2*c+18*d+108*e < 0
为最后一个表达式选择负值V
,例如-1:
V <- -1
A <- matrix(c(1, 1, 1, 1,
4,16,64,256,
1, 6,27,108,
0, 2,18,108),
ncol=4,byrow=TRUE)
b <- c(1,0,0,V)
(p <- solve(A,b))
## [1] 2.6400000 -2.4200000 0.8933333 -0.1133333
x <- seq(-0.5,5,length=101)
m <- model.matrix(~poly(x,degree=4,raw=TRUE))
y <- m %*% c(0,p)
绘制结果:
par(las=1,bty="l")
plot(x,y,type="l")
points(c(0,1,4),c(0,1,0))
abline(v=3,lty=2)
为V
选择更大幅度(更负)的值将使解决方案在y = 3时更加尖锐。