rによる富士山関数の描き方

10
Rによる富士山関数の描き方 2013.01.02

Upload: wada-kazumi

Post on 14-Jul-2015

1.130 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Rによる富士山関数の描き方

Rによる富士山関数の描き方

2013.01.02

Page 2: Rによる富士山関数の描き方

富士山関数とは

Q:以下の関数のグラフを描け。

f(x)= x^4-x^2+6

(|x|<=1), 12/(|x|+1) (|x|>1),

g(x)= 1/2*cos(2x)+7/2 (|x|<=2)

静岡大学の試験問題だそうです。詳しくは以下を参照。http://www.yukawanet.com/archives/4365293.html

Page 3: Rによる富士山関数の描き方

描いてみたけどなんか違う・・・

-5 0 5

23

45

6

x

Fuji1

(x)

Fuji <- function(x) ifelse(abs(x) <= 1, x^4-x^2+6, 12/(abs(x)+1))

curve(Fuji, xlim=c(-8,8), col="royalblue", lwd=2)

curve(1/2 * cos(2*x) + 7/2, xlim=c(-2,2), add=T, col=“royalblue", lwd=2)

Page 4: Rによる富士山関数の描き方

g(x)の式を調整するとFuji <- function(x) ifelse(abs(x) <= 1, x^4-x^2+6, 12/(abs(x)+1))

curve(Fuji, xlim=c(-8,8), col="royalblue", lwd=2)

curve(1/3 * cos(6*x) + 7.5/2, xlim=c(-2,2), add=T, col="royalblue", lwd=2)

Page 5: Rによる富士山関数の描き方

解説

curve(1/3 * cos(6*x) + 7.5/2 ・・・

① ② ③

① 2=>3 振幅を少し小さく

② 2=>6 振動数を多く

③ 7=>7.5 端が山裾にフィットするよう上にすこし持ち上げる

Page 6: Rによる富士山関数の描き方

後日談

この試験問題はかなり有名なようで、私が見たものはおそらく何度も転載を繰り返される間に式の転記ミスがあったもののようです。正しくは、

g(x)=1/2cos(2πx)+7/2

π(パイ)が抜けていました。

π=3.1415926・・・・

参考: http://iky.no-ip.org/weblog/fuji.pdf

Page 7: Rによる富士山関数の描き方

正しい式で再び描画Fuji <- function(x) ifelse(abs(x) <= 1, x^4-x^2+6, 12/(abs(x)+1))

curve(Fuji, xlim=c(-8,8), col="royalblue", lwd=2, xaxt="n", yaxt="n", xlab="", ylab="")

curve(1/2 * cos(2*pi*x) + 7/2, xlim=c(-2,2), add=T, col="royalblue", lwd=2)

※ 軸ラベルや目盛を消してより絵らしくしてみました。

Page 8: Rによる富士山関数の描き方

大元の式と調整式の違い薄い水色の点線がこのスライドで調整したg(x)です。

正解を見てから考えれば振動数調整だけで良かったのですが、振れ幅を浅くしたために上に持ち上げる必要が発生しました。

Page 9: Rによる富士山関数の描き方

もう一歩頑張って色付けするとFuji <- function(x) ifelse(abs(x) <= 1, x^4-x^2+6, 12/(abs(x)+1))

curve(Fuji, xlim=c(-8,8), col="royalblue", lwd=2, , axes=F, ann=F)

# 枠も消しました

curve(1/2 * cos(2*pi*x) + 7/2, xlim=c(-2,2), add=T, col="royalblue", lwd=2)

# 雪のない部分をx1, y1で細かく囲み、中を塗る

x1 <- sort(runif(1000, -8, 8)) # 一様乱数を順番に並び替え

y1 <- rep(NA, 1000)

y1[which(abs(x1)>2)] <- Fuji(x1[which(abs(x1)>2)])

y1[which(abs(x1)<=2)] <- 1/2 * cos(2*pi*x1[which(abs(x1)<=2)]) + 7/2

polygon(x1, y1, col ="royalblue", border=F)

Page 10: Rによる富士山関数の描き方

おわり2012年7月に撮影した、富士山8合目付近からの夕暮れです。