投稿

ラベル(sin)が付いた投稿を表示しています

Rで数式を微分(多項式関数、三角関数、指数関数、対数関数)

Rで関数を微分することができます。数値的にではなく解析的にできます。 やり方はexpression関数で数式をセットしておいて、Dという関数を呼び出せばOK(プログラミング言語の「関数」と、数学の「関数」がごっちゃになる・・・) 高校で習うようなやつをいろいろ試してみました。 > # 多項式の関数の微分 > f <- expression( x^4 + 2*x^3 + 3*x^2 + 4*x + 5 ) > D(f, "x") 4 * x^3 + 2 * (3 * x^2) + 3 * (2 * x) + 4 できてる、みたいですね。数式を簡単にするところまではやってくれないので、ごちゃごちゃしているけど。 Dに「どの文字を変数とするか」("x"のところ)を指定するので、変数以外の文字を含んでいてもOKです。 > # 微分する変数以外の文字を含んでいてもOK > f <- expression( a*x^n ) > D(f, "x") a * (x^(n - 1) * n) ↓三角関数もいけます。 > # 三角関数の微分 > f1 <- expression( sin(x) ) > f2 <- expression( cos(x) ) > f3 <- expression( tan(x) ) > D(f1, "x") cos(x) > D(f2, "x") -sin(x) > D(f3, "x") 1/cos(x)^2 ↓指数関数も。 > # 指数関数の微分 > f1 <- expression( a^x ) > f2 <- expression( exp(0)^x ) > D(f1, "x") a^x * log(a) > D(f2, "x") exp(0)^x * log(exp(0)) ↑exp(0)ってのは自然対数の底のeのことなので(e^0のことね)、exp(0)^x を微分したら exp(0)^x となる、というのを期待したのですが、その部分(lo...

Rで円を描く方法あれこれ

イメージ
グラフに円を描くような関数が用意されていてもよさそうなものですが、どうもないみたいですので、自力で描く必要がありそうです。 簡単のため、半径1の円の例です。 まず思いつくのは、   x^2 + y^2 = 1 をyについて解いて、   y = ±√(1 - x^2) という関数の形にして、curve関数を使って描く方法でしょうか↓ curve関数で上側と下側を別々に描く curve ( sqrt ( 1 -x^ 2 ) , xlim= c ( - 1 , 1 ) , ylim= c ( - 1 , 1 ) , asp= 1 ) curve ( - sqrt ( 1 -x^ 2 ) , xlim= c ( - 1 , 1 ) , ylim= c ( - 1 , 1 ) , add=T ) 媒介変数表示を使うやり方もありますね。  x = cosθ  y = sinθ の、x と y の組を plotしていく感じです↓ 媒介変数で座標を求めたあとにプロット theta <- seq ( - pi , pi , length = 100 ) plot ( cos ( theta ) , sin ( theta ) , type= "l" , asp= 1 ) ちなみに type=l オプションを忘れると↓こんな感じになります。 点でプロットすると理屈が分かりやすい plot ( cos ( theta ) , sin ( theta ) , asp= 1 ) 何度も使う場合は、中心座標や半径を引数として関数化しておくといいですね↓ こんなところに隠れミッキーが!(自分で描いたくせに) plot.circle <- function ( x , y , r ) { theta <- seq ( - pi , pi , length = 100 ) points ( x + r* cos ( theta ) , y + r* sin ( theta ) , type= "l" , asp= 1 ) } plot ( c ( -...

Rを使って曲線で囲まれた領域に色をつける

イメージ
曲線のグラフを塗りつぶすやり方を前に書いたんですが↓ Rのsegments関数でグラフを塗りつぶす - Rプログラミングの小ネタ Rのpolygon関数でグラフを塗りつぶす方法を理解する - Rプログラミングの小ネタ 上記は曲線とx軸に囲まれた領域に着色するというものでしたが、ほとんど同じやり方で曲線と曲線に囲まれた領域の色塗りもできますよね、という話。 curve ( sin ( x ) , 0 , 4 * pi ) # サイン曲線を描画 curve ( cos ( x ) , 0 , 4 * pi , add=T ) # コサイン曲線を描画   n <- 1000 # x軸上に取る点の数 x <- seq ( pi , 3 * pi , length =n ) # プロットするx座標を求める y1 <- sin ( x ) # 曲線上のy座標を求める 曲線1 y2 <- cos ( x ) # 曲線上のy座標を求める 曲線2   # 曲線1上→曲線2上の順で、頂点を指定する polygon ( c ( x , rev ( x ) ) , c ( y1 , rev ( y2 ) ) , col = "gray" ) 上記は曲線上にたくさんの点を置いていき、それらを頂点とする多角形をpolygon関数で描画するというやり方。頂点の列がクロスしても、そのように塗りつぶしてくれるので、どちらの曲線が上にくるとか下にくるとか気にしなくてもOKです。 ↓もう一つのやり方 # polygon関数のところ以外は前述の例と同じコードを実行後   # 曲線1上の点と曲線2上の点を結ぶ線分で領域を埋め尽くす segments ( x , y1 , x , y2 , col = "gray" ) setmentsは、曲線1の上にとった点と曲線2の上にとった点を線分で結ぶ関数なのですが、点を多数とると、この線分で領域が埋め尽くされて、まるで塗りつぶしたようになるというやり方。線分は上から下に引いても、下か...

Rのpolygon関数でグラフを塗りつぶす方法を理解する

イメージ
グラフの一部を塗りつぶす方法として、segments関数で線分を敷き詰めるやり方を↓こちらで紹介しましたが、 segments関数でグラフを塗りつぶす - Rプログラミングの小ネタ 正直なところ、polygon関数で塗りつぶすやり方↓の方がスマートな気がします。 51. 低水準作図関数 - R-Source でも、上記に掲載されているサンプルを見ても、すぐに理解できない人も多いのでは?ということで、分かりやすく解説する記事を書いてみようと思います。Rエキスパートの人は帰った、帰った。 例えば、サインカーブの下部を塗りつぶしたいとします。あえて分割数を少なくして、上記に紹介されている方法を適用してみると、↓こんな感じになります。 x座標を3点(polygon関数による描画) plot ( sin , 0 , pi ) # sinカーブをプロット(0からπまで) n <- 3 # x軸上に取る点の数 xs <- seq ( 0 , pi , length =n ) # プロットするx座標を決める ys <- sin ( xs ) # 曲線上のy座標を求める   # x軸上→曲線上の順で、頂点を指定する polygon ( c ( xs , rev ( xs ) ) , c ( rep ( 0 , n ) , rev ( ys ) ) , col = "gray" ) 3点だけだと、全然曲線っぽくないですよね。 点の数を増やしていきます。(サンプルソースの中のnを変える) x座標を4点(polygon関数による描画) x座標を5点(polygon関数による描画) x座標を10点(polygon関数による描画) x座標を20点(polygon関数による描画) ↑20点も取れば、ほとんど曲線に見えますね。 x座標を100点(polygon関数による描画) ↑上記は100点。これ以上増やしても見栄えは変わらないと思います。 次は、polygonへの頂点指定の仕組みを見ていきましょう。 c関数で連結してあるので分かりにくいで...