投稿

10月, 2014の投稿を表示しています

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 ( -