指数関数・対数関数

y=x^nのグラフ

> x<- seq(-10,10,by=0.001)
> par(pch=".")
> plot(c(-10,10),c(-25,25),type="n")
> points(x,x^1,col=1)
> points(x,x^2,col=2)
> points(x,x^3,col=3)
> points(x,x^4,col=4)
> points(x,x^5,col=5)
n次関数をグラフ表示します。三行目であらかじめ座標軸を取っておいて 後はそれぞれの次数の関数を描きます。上のように色は番号で指定する こともできます。 ところでパラメータを買えただけの同じような文がたくさんあって 面倒ですね。for文を使うと次のように書くことができます。
> for(n in 1:5) points(x,x^n,col=n)
> plot(c(-3,3),c(-50,50),type="n")
> for(n in 6:10) points(x,x^n,col=n-5)













指数関数のグラフ

指数関数のグラフを描く準備としてまず整数乗についてプロットした 様子を見てみましょう。
> plot(c(-5,5),c(-1,20),type="n")
> abline(0,0)
> abline(v=0)
> a <- 2
> par(pch="*")
> points(-4,a^(-4))
> points(-3.5,a^(-3.5))
> points(-3,a^(-3))
> points(-2.5,a^(-2.5))
> points(-2,a^(-2))
> points(-1.5,a^(-1.5))
> points(-1.0,a^(-1.0))
> points(-0.5,a^(-0.5))
> points(-0.0,a^(-0.0))
> points(-0.5,a^(-0.5))
> points(0.5,a^(0.5))
> points(1.0,a^(1.0))
> points(1.5,a^(1.5))
> points(2.0,a^(2.0))
> points(2.5,a^(2.5))
> points(3.0,a^(3.0))
> points(3.5,a^(3.5))
> points(4.0,a^(4.0))
実は同じことが次の6行だけでできます。
> plot(c(-5,5),c(-1,20),type="n")
> abline(v=0)
> abline(0,0)
> a <-2
> par(pch="*")
> i <- seq(-4,4,by=0.5)
> points(i,a^i)
>





では指数関数のグラフを描いてみましょう。
> x<-seq(-4,4,by=0.001)
> plot(c(-5,5),c(-1,20),type="n")
> x<-seq(-4,4,by=0.001)
> par(pch=".")
> points(x,a^x)
> b<-1/2
> points(x,b^x,col="red")
> points(x,a^(-x),col="blue")
> points(x,b^(x+0.1),col="yellow")
指数関数y=2^xとy=(1/2)^xについてグラフを描いてみました。最後の 二行はこの二つのy軸に対する対称性を調べています。

















対数関数のグラフ

> a <- 2
> plot(c(-5,5),c(-5,5),type="n")
> points(x,log(x,a))
Warning message:
NaNs produced in: log(x, base)
> points(x,a^x,col="blue")
> points(x,x,col="green")
> points(log(x,a),x,col="red")
Warning message:
NaNs produced in: log(x, base)
対数は「log({x},{base})」と書いてxが真数、baseが底になります。 普通の書き方と逆なので注意してください。さてまず気づくことは Warning messageが出ていますね。これはxをもともと負も含むように 用意したので対数関数としては定義域外で求められないからです。 こういう場合にRは定義域内について普通の処理をし、定義域外が あったことをこのようにエラーメッセージで知らせます。 そのあとは対数関数と指数関数のy=xに対する対称性を表します。













対数の性質

log(M*N,a)=log(M,a)+log(n,a)

> a<-2
> M<-5
> N<-seq(1,100,by=0.01)
> plot(N,log(M*N,a))
> points(N,log(M,a)+log(N,a),col="red")
> points(N,log(M*N,a)+0.1,col="blue")
よく知られている対数の性質を確認しましょう。aとNは固定してMだけ動かして 様子を見ています。



















log(M/N,a)=log(M,a)-log(n,a)

> plot(N,log(M/N,a))
> points(N,log(M,a)-log(N,a),col="red")
> points(N,log(M,a)-log(N,a)+0.1,col="blue")
>
これも前とまったく同様に有名な性質です。























log(M^k,a)=k*log(M,a)

> a <- 2
> M <- 5
> k <- seq(1,100,by=0.01)
> par(pch=".")
> plot(k,log(M^k,a))
> points(k,k*log(M,a),col="red")
> points(k,log(M^k,a)+1,col="blue")
kを動かしたとき、示したい式の左辺をx軸、右辺をy軸にとって グラフにしてみました。




















> l <-5
> N <-seq(1,100,by=0.01)
> plot(N,log(N^l,a))
> points(N,l*log(N,a),col="red")
> points(N,log(N^l,a)+0.2,col="blue")
今度は同じ性質を真数Nのほうを動かしてグラフにしてみました。黒で表示された 左辺が赤の右辺に描きかえられます。





















log(b,a)=log(b,c)/log(a,c)

> par(pch=".")
> a <- 3
> b <- 5
> c <- seq(2,100,0.01)
> plot(c,log(b,c)/log(a,c))
Error in plot.window(xlim, ylim, log, asp, ...) :
relative range of values is too small to compute accurately
> log(b,a)
[1] 1.464974
> plot(c(1,100),c(1,2),type="n")
> points(c,log(b,c)/log(a,c))
> b<-seq(2,100,0.01)
> c <- 7
> plot(log(b,a),log(b,c)/log(a,c))
> a <- seq(2,100,0.01)
> b <- 9
> plot(log(b,a),log(b,c)/log(a,c))
これも有名な性質ですね。まずa,bを固定してcだけ動かします。 エラーが出ていますがこれはcを動かしたとき log(b,c)/log(a,c)の値の動きの範囲があまりに小さいので表示できないと 言っています。数学としては定数関数でコンピュータの計算では少し 誤差が出ますが、それでもあまりにも小さすぎて計算しきれないとのことです。 そこで座標軸を設定して無理に描かせてしまいましょう。 その後はa,c固定でbだけ動かしx座標をこの性質の左辺、y座標を右辺として グラフを描きます。aだけ動かした場合についてもやってみます。





ホームヘ