投稿

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

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の上にとった点を線分で結ぶ関数なのですが、点を多数とると、この線分で領域が埋め尽くされて、まるで塗りつぶしたようになるというやり方。線分は上から下に引いても、下か...