指数曲線  $Y = aX^b$     Last modified: Sep 08, 2009


例題

 「表 1 のに示すようなデータに曲線をあてはめなさい。」

表 1.テストデータ
X 1 2 3 4 5 6 7 8 9 10
Y 2 16 54 128 250 432 686 1024 1458 2000


プログラム:
x <- 1:10
# nls で当てはめるデータは,完全に当てはまるテストデータであってはならないため,最後のデータに微少量を加えておく
y <- c(2, 16, 54, 128, 250, 432, 686, 1024, 1458, 2000.00001)
dat <- data.frame(x=x, y=y)
ans <- nls(y ~ a*x^b, data=dat, start=list(a=2, b=3)) # 非線形最小二乗法による解
summary(ans)
plot(x, y, pch=19, col="red")
x2 <- seq(1, 10, by=0.01)
y2 <- predict(ans, newdata=data.frame(x=x2))
lines(x2, y2, col="blue")

実行例:
> x <- 1:10
> y <- c(2, 16, 54, 128, 250, 432, 686, 1024, 1458, 2000.00001)
> dat <- data.frame(x=x, y=y)
> ans <- nls(y ~ a*x^b, data=dat, start=list(a=2, b=3), control=list(maxiter=1000)) # 非線形最小二乗法による解
> summary(ans)

Formula: y ~ a * x^b

Parameters:
   Estimate Std. Error   t value Pr(>|t|)    
a 2.000e+00  1.950e-08 102585245   <2e-16 ***
b 3.000e+00  4.415e-09 679538672   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 1.741e-06 on 8 degrees of freedom

Number of iterations to convergence: 1 
Achieved convergence tolerance: 8.894e-07 

> plot(x, y, pch=19, col="red")
> x2 <- seq(1, 10, by=0.01)
> y2 <- predict(ans, newdata=data.frame(x=x2))
> lines(x2, y2, col="blue")
fig
・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI