我有一些奇怪的條件需要擬合曲線來處理。我試過在其他地方查找它,但我甚至不確定我是否使用了正確的術語。任何幫助深表感謝。當只有y峯的x值已知時將曲線擬合到點
我試圖擬合一個四點的多項式曲線。其中三點是已知的,但第四點有點棘手。我有最大y值的x值,但我不知道最大y值是多少。例如,假設在(0,0),(1,1)和(4,0)處存在已知點。最大y值在x = 3,所以第四點是(3,ymax)。我將如何擬合這些條件的四階多項式曲線?提前致謝。
我有一些奇怪的條件需要擬合曲線來處理。我試過在其他地方查找它,但我甚至不確定我是否使用了正確的術語。任何幫助深表感謝。當只有y峯的x值已知時將曲線擬合到點
我試圖擬合一個四點的多項式曲線。其中三點是已知的,但第四點有點棘手。我有最大y值的x值,但我不知道最大y值是多少。例如,假設在(0,0),(1,1)和(4,0)處存在已知點。最大y值在x = 3,所以第四點是(3,ymax)。我將如何擬合這些條件的四階多項式曲線?提前致謝。
其實這是可能的,因爲你需要在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應該是負的)
所以,挑選D2Y任何負值/ dx2在x = 3並求解5個線性方程,你將得到一個4次多項式。請注意,以這種方式獲得的x = 3處的y值只是局部最大值,而不是全局最大值。
我站好了! – eipi10 2014-11-06 21:46:08
謝謝,看起來像一個偉大的解決方案。當我完成寫作時,我會發布我提出的R代碼。謝謝! – 2014-11-08 02:00:32
灌裝在從@方舟子的答案代數(有點初等微積分,代數運算,以及一些線性代數):
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時更尖銳。
也許我錯了,但是你不需要'n + 1'個數據點來擬合一個'n'次多項式嗎? – nrussell 2014-11-06 17:01:25