1

私は4つのデータポイントしか持っていません:

points = c(60, 46, 46, 60)

放物線を「描きたい」。明らかに、しかし、私はそれをスムーズにする方法を見つけることができません。代わりに、次の行に沿ったコードを使用して、下の赤いボックス プロットになります。

plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2)
fit = loess(points ~ c(1:4), bw=nrd0, na.rm=T)
lines(predict(fit), lwd=2, col= 2)

角を滑らかにして、青い線のように見えるようにする方法はありませんか...

ここに画像の説明を入力

4

2 に答える 2

2

二次方程式を当てはめたいので、次のようにして欲しいものを得ることができます。二次関数が

f(x) = a*x^2 + b*x + c

それから私たちはそれを知っています

a+b+c = 60
4a+2b+c = 46
9a+3b+c = 46

と等しくすることf(1),f(2),f(3)によってpoints[1:3]points]対称性のため、 の 4 番目の要素は無視できます。これらa,b,cは一連の線形方程式の解A %*% x = pointsです。したがって、次のように行列を構築Aします

A <- matrix(c(1,1,1,4,2,1,9,3,1),nrow=3,byrow=TRUE)

次に、線形方程式を解きます。

pcoef <- solve(A,points[1:3])

今、あなたがしたいグラフを取得します

f <- function(x,pcoef)  pcoef[1]*x^2 + pcoef[2]*x + pcoef[3]
g <- function(x) f(x,pcoef)

plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2)
curve(g,from=1,to=4,add=TRUE, col="blue")

ここに画像の説明を入力

于 2016-04-16T07:45:06.960 に答える