<< SICPメモ(9) 問題2.17 & 問題2.18 | top | 人生ゲーム面白い >>

スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

SICPメモ(10) 2.3.2記号微分

2.3.2の記号微分が面白そうなのでちょっと読んでみる。次のコードを読み解く。

(define (deriv exp var)
  (cond ((number? exp) 0)
        ((variable? exp)
         (if (same-variable? exp var) 1 0))
        ((sum? exp)
         (make-sum (deriv (addend exp) var)
                   (deriv (augend exp) var)))
        ((product? exp)
         (make-sum
           (make-product (multiplier exp)
                         (deriv (multiplicand exp) var))
           (make-product (deriv (multiplier exp) var)
                         (multiplicand exp))))
        (else
         (error "unknown expression type -- DERIV" exp))))


((number? exp) 0)→式が定数ならば結果は0。(d/dx)const=0だからね。
((variable? exp)
 (if (same-variable? exp var) 1 0))
→式が微分変数に一致しているときは1、そうでないとき0。(d/dx)x=1,(d/dx)y=0ってことだね。
((sum? exp)
 (make-sum (deriv (addend exp) var)
 (deriv (augend exp) var)))
→(addend exp)はexpの二番目の要素を、(augend exp)は三番目の要素を抜き出す。expがsumの形、すなわち(+ u v)の形のとき、uの微分とvの微分を足すってことだね。(d/dx)(u+v)=(d/dx)u+(d/dx)vってことだね。
((product? exp)
 (make-sum
  (make-product (multiplier exp)
   (deriv (multiplicand exp) var))
  (make-product (deriv (multiplier exp) var)
   (multiplicand exp))))
(multiplicand exp)はexpの第三要素を、(multiplier exp)は第二要素を抜き出す。expが積の形(* u v)のとき(d/dx)(uv)=u(d/dx)v+v(d/dx)uになるってことね。

ふむふむ。結構きれいに書けるものだ。
あとはこの手続きで使われているvariable?やらを定義する必要があるがそれはそんなに難しくない。ので省略。
ジャジャガッチ | LISP | 20:29 | comments(0) | trackbacks(0) |

スポンサーサイト

スポンサードリンク | - | 20:29 | - | - |
Comment









Trackback
URL:

07
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH