2020年4月23日

Rで微分する (expression、D、print)

今回は微分です。「プログラミングで微分ができるの?」と思いますが、Rはとても優秀な言語ですので、簡単にできます。


目次
  1. 微分とは
  2. expressionD
  3. 微分
*  *  *

1 微分とは

$x$ がわずかに動いたとき、関数の値はどれくらい動くか調べる作業を微分といいます。ここでは微分の定義ではなく、微分のやり方をおさらいします。微分は3段階の手順でできます。

a $x$ の肩に乗っている(べき)指数という重荷をおろす
b 重荷を1回おろしたことを記録する
c 式をきれいにする

くわしいことは姉妹ブログ『文系の "だいたい" 数学』をご覧ください。
https://easy-suugaku.blogspot.com/2020/04/blog-post_16.html

*  *  *

2 expression と D

Rで関数を微分するとき、関数を定義して、それを微分するという2段階のコードを書きます。expression は関数を定義するのに使います。たとえば、$f(x)=x+2$ という関数を定義するとき

f <- expression(x+2)  

と書きます。f は定義する関数の名前、<- は「…と定義する」という意味の記号です。定義した関数を微分するとき、D を使います。たとえば、定義した関数 f を微分するとき

D(f, "x")

と書きます。() の中の第1要素は定義した関数を、第2要素は関数を x について微分することを表します。

*  *  *

3 微分

関数を微分するRのコードは次のとおりです。はじめての人にわかりやすくするために、少し冗長に書きました。画像をクリックすると大きくなりますので、それをみてコードを入力しましょう。入力できたら「➡️Run」を押してみてください。










うまくいけば、左下の領域に次のような結果が出てきます。











Rは、微分の3段階のうち、aとbの2段階をやってくれるようです。さいごのc(式をきれいにする)は、Rの結果をもとに私たちがやることになりそうです。もし、式をきれいにするコードをご存知の方がいましたら教えていただけると嬉しいです。 🙇‍♂️

*  *  *

以下、準備、処理、出力の順にコードを説明します。まず準備からです。このコードでははじめの10行にあたります。2行目と3行目はいつものおまじないですので説明を省略します。はじめてでよくわからないという人は、ブログ右のラベルから rm(list=ls()) をクリックして関連記事をみてください。

5行目から10行目は、関数を定義しています。上から1次関数、2次関数、3次関数、2を底とする指数関数、2を底とする対数関数、ルート関数です。前回作図したグラフとおなじ式です。関数の記号として i を使わないのは、Rでは虚数単位を i で表すためです。10行目のアルファベット記号はエルです。







*  *  *

つづいて処理です。このコードでは12行目から17行目にあたります。上で定義した式を x で微分して、結果を dfdgdhdjdkdl に格納します。







*  *  *

さいごに出力です。このコードでは19行目にあたります。c() は、要素をならべて表示する関数です。その外側にある print() は、ならべた要素を印字する関数です。たった1行で、微分の結果をならべて印字させることができます。Rはとても効率的な言語です。



*  *  *

今回のコードは20行ですが、大部分繰り返しですので、難しくはなかったと思います。少しずつ慣れていきましょう。