Submit Search
Upload
Lispでやる記号微分
•
0 likes
•
1,246 views
Keiichi Watanabe
Follow
関西Lispユーザ会で発表したLispでやる記号微分のスライドです。基本的にSICPの記号微分の節の丸パクリです。
Read less
Read more
Software
Report
Share
Report
Share
1 of 27
Download now
Download to read offline
Recommended
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control
Deep Learning JP
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
Takeshi Arabiki
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
幾何と機械学習: A Short Intro
幾何と機械学習: A Short Intro
Ichigaku Takigawa
「これからの強化学習」勉強会#1
「これからの強化学習」勉強会#1
Chihiro Kusunoki
機械学習は化学研究の"経験と勘"を合理化できるか?
機械学習は化学研究の"経験と勘"を合理化できるか?
Ichigaku Takigawa
最適化超入門
最適化超入門
Takami Sato
Recommended
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control
【DL輪読会】Code as Policies: Language Model Programs for Embodied Control
Deep Learning JP
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
Takeshi Arabiki
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
幾何と機械学習: A Short Intro
幾何と機械学習: A Short Intro
Ichigaku Takigawa
「これからの強化学習」勉強会#1
「これからの強化学習」勉強会#1
Chihiro Kusunoki
機械学習は化学研究の"経験と勘"を合理化できるか?
機械学習は化学研究の"経験と勘"を合理化できるか?
Ichigaku Takigawa
最適化超入門
最適化超入門
Takami Sato
グラフ構造データに対する深層学習〜創薬・材料科学への応用とその問題点〜 (第26回ステアラボ人工知能セミナー)
グラフ構造データに対する深層学習〜創薬・材料科学への応用とその問題点〜 (第26回ステアラボ人工知能セミナー)
STAIR Lab, Chiba Institute of Technology
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
モデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
Takahiro Kubo
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
Shohei Taniguchi
CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
Hirokatsu Kataoka
最適輸送の解き方
最適輸送の解き方
joisino
最適輸送入門
最適輸送入門
joisino
Visual Studio CodeでRを使う
Visual Studio CodeでRを使う
Atsushi Hayakawa
グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
Shinyユーザのための非同期プログラミング入門
Shinyユーザのための非同期プログラミング入門
hoxo_m
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)
Toru Tamaki
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
Hiroyuki Masuda
スマートシティ、ゲームエンジン、人工知能
スマートシティ、ゲームエンジン、人工知能
Youichiro Miyake
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
joisino
ベータ分布の謎に迫る
ベータ分布の謎に迫る
Ken'ichi Matsui
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー
KLab Inc. / Tech
[DL輪読会]World Models
[DL輪読会]World Models
Deep Learning JP
たのしい関数型
たのしい関数型
Shinichi Kozake
モナドハンズオン前座
モナドハンズオン前座
bleis tift
More Related Content
What's hot
グラフ構造データに対する深層学習〜創薬・材料科学への応用とその問題点〜 (第26回ステアラボ人工知能セミナー)
グラフ構造データに対する深層学習〜創薬・材料科学への応用とその問題点〜 (第26回ステアラボ人工知能セミナー)
STAIR Lab, Chiba Institute of Technology
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
モデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
Takahiro Kubo
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
Shohei Taniguchi
CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
Hirokatsu Kataoka
最適輸送の解き方
最適輸送の解き方
joisino
最適輸送入門
最適輸送入門
joisino
Visual Studio CodeでRを使う
Visual Studio CodeでRを使う
Atsushi Hayakawa
グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
Shinyユーザのための非同期プログラミング入門
Shinyユーザのための非同期プログラミング入門
hoxo_m
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)
Toru Tamaki
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
Hiroyuki Masuda
スマートシティ、ゲームエンジン、人工知能
スマートシティ、ゲームエンジン、人工知能
Youichiro Miyake
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
joisino
ベータ分布の謎に迫る
ベータ分布の謎に迫る
Ken'ichi Matsui
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー
KLab Inc. / Tech
[DL輪読会]World Models
[DL輪読会]World Models
Deep Learning JP
What's hot
(20)
グラフ構造データに対する深層学習〜創薬・材料科学への応用とその問題点〜 (第26回ステアラボ人工知能セミナー)
グラフ構造データに対する深層学習〜創薬・材料科学への応用とその問題点〜 (第26回ステアラボ人工知能セミナー)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
モデルではなく、データセットを蒸留する
モデルではなく、データセットを蒸留する
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
最適輸送の解き方
最適輸送の解き方
最適輸送入門
最適輸送入門
Visual Studio CodeでRを使う
Visual Studio CodeでRを使う
グラフィカルモデル入門
グラフィカルモデル入門
Shinyユーザのための非同期プログラミング入門
Shinyユーザのための非同期プログラミング入門
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
3次元レジストレーション(PCLデモとコード付き)
3次元レジストレーション(PCLデモとコード付き)
失敗から学ぶ機械学習応用
失敗から学ぶ機械学習応用
スマートシティ、ゲームエンジン、人工知能
スマートシティ、ゲームエンジン、人工知能
グラフニューラルネットワークとグラフ組合せ問題
グラフニューラルネットワークとグラフ組合せ問題
ベータ分布の謎に迫る
ベータ分布の謎に迫る
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
多目的強凸最適化のパレート集合のトポロジー
多目的強凸最適化のパレート集合のトポロジー
[DL輪読会]World Models
[DL輪読会]World Models
Similar to Lispでやる記号微分
たのしい関数型
たのしい関数型
Shinichi Kozake
モナドハンズオン前座
モナドハンズオン前座
bleis tift
VBAで数値計算 03 数式実装パターン
VBAで数値計算 03 数式実装パターン
Katsuhiro Morishita
2011年11月11日
2011年11月11日
nukaemon
数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ
Shuyo Nakatani
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
化学科自主ゼミ1
化学科自主ゼミ1
Hiroki Sato
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
blackenedgold
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
kagamicomput201707
kagamicomput201707
swkagami
Material
Material
_TUNE_
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI
#6:実数と繰り返し
#6:実数と繰り返し
長岡技術科学大学 自然言語処理研究室
JSX / Haxe / TypeScript
JSX / Haxe / TypeScript
bleis tift
データとは何か
データとは何か
Kenta Suzuki
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
Tetsuya Yoshida
言語処理系入門5
言語処理系入門5
Kenta Hattori
プログラミング
プログラミング
saireya _
kagami_comput2015_7
kagami_comput2015_7
swkagami
Similar to Lispでやる記号微分
(20)
たのしい関数型
たのしい関数型
モナドハンズオン前座
モナドハンズオン前座
VBAで数値計算 03 数式実装パターン
VBAで数値計算 03 数式実装パターン
2011年11月11日
2011年11月11日
数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
化学科自主ゼミ1
化学科自主ゼミ1
(define)なしで再帰関数を定義する
(define)なしで再帰関数を定義する
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
kagamicomput201707
kagamicomput201707
Material
Material
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
#6:実数と繰り返し
#6:実数と繰り返し
JSX / Haxe / TypeScript
JSX / Haxe / TypeScript
データとは何か
データとは何か
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
言語処理系入門5
言語処理系入門5
プログラミング
プログラミング
kagami_comput2015_7
kagami_comput2015_7
Lispでやる記号微分
1.
Lisp でやる記号微分って何? 渡邉慶一 Osaka, Japan 2018
年 6 月 23 日 [1/ 27]
2.
⽬次 1 記号微分 記号微分のご紹介 記号微分処理ってどんな感じなの? 記号微分は何をしているか 記号微分手続きの説明 式の簡単化 べき乗の微分の処理を追加する まとめ 2 数式処理ソフト:Maxima 3
iPad の MathStudio の紹介 4 SICP の紹介 [2/ 27]
3.
記号微分とは 数値計算ではない 数式を扱う (数式を微分します) 記号を扱う (変数ですね。Lisp
のシンボルを扱います) 今日やる微分は高校の微分 微分というかパターンの操作なので、話は難しくない 定数を微分すると 0 になる x を x で微分すると 1 になる。3x を x で微分すると 3 になる y = x2 を x で微分すると y = 2x になる こんなルールに基いたパターンの置き換えの話です 詳しくは後に出てくる関数定義で [3/ 27]
4.
一番のポイント 数式を S 式で書くことにするよ これがものすごく大きなポイントですね いろいろ楽になります まず字句解析が不要 それに操作に
Lisp の関数がそのまま使える 中置式に変換するのはそれはそれでおもしろい やるなら TEX の数式表記に直すとかどうでしょう でも S 式のほうがいいですよね [4/ 27]
5.
お断わり プログラム例は SICP のものを使ってます 『SICP
非公式日本語版 翻訳改訂版』 「2.3.2 例: 記号微分」(156 ページ〜162 ページ) http://vocrf.net/docs_ja/jsicp.pdf 多少変更はしています なので Common Lisp ではなく Scheme です (処理系は Gauche です) でも簡単な作りなので、キーワードが多少違うだけです この例では 2 つの項の式しか微分できません 多項式を扱うのは練習問題になってます (練習問題 2.57) [5/ 27]
6.
ちょっと実感をつかんでみましょう 記号微分する関数の本体です (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 )))) [6/ 27]
7.
こんな感じで動作します (1) gosh >
(load "./ deriv.scm") #t gosh > (deriv ’(+ x 3) ’x) 1 ;; f (x) = x + 3 を x で 微 分 す る と 1 gosh > (deriv ’(* x y) ’x) y ;; f (x) = xy を x で 微 分 す る と y gosh > (deriv ’(* x y) ’y) x ;; f (y) = xy を y で 微 分 す る と x deriv 関数は何で微分するとか知らなくって、引数の記号で微分できると ころがおもしろくないですか? [7/ 27]
8.
記号微分・記号計算のポイント 記号を記号として扱う 単なる文字列ではない 変数でもない データに対する名前ではない 見た⽬がメモリに存在、オブジェクト 見た⽬ (=そういう名前) で参照できる「実体」がメモリにある 記号で微分・計算するので、記号を変更しても大丈夫 Lisp
以外の言語でこれを実装するとしたらどのようにやったらい いか? [8/ 27]
9.
Lisp における記号微分とは Lisp の力を発揮 他の言語だと面倒 字句解析してオブジェクトを作る それは
Lisp ですよね Lisp はさすがに記号の処理は得意だね 微妙に再帰も使っていますね SICP 以外の入門書では見たことがない 『Land of Lisp』にはないようだ 『初めての人のための LISP』にもな かったと思います 『実用 Common Lisp』の第 8 章にあ るようです 税込 9,936 円。高いね。著者の Peter Norvig さんは現在 Google の研究開発本部長。 さすが Lisper! [9/ 27]
10.
記号微分処理の概要:再掲 記号微分する関数の本体です (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 )))) [10/ 27]
11.
手続きの説明 (1) • 変数は記号である。基本述語
symbol? で識別する。 (define (variable? x) (symbol? x)) • ⼆つの変数は、それらを表現する記号が eq? であれば等しい。 (define (same-variable? v1 v2) (and (variable? v1) (variable? v2) (eq? v1 v2))) • 和と積は、リストとして構築する。 (define (make-sum a1 a2) (list ’+ a1 a2)) (define (make-product m1 m2) (list ’* m1 m2)) 基本的な考えはこれなんですが、これだと式をあまり簡約してくれませ ん。たとえば make-sum で a1 が x、a2 が 0 のときは (+ x 0) となって しまいます。そこは x という表示でいいわけで、その改良版を後で載せ ます。 [11/ 27]
12.
手続きの説明 (2) • 和は、最初の要素が記号
+ であるリストである。 (define (sum? x) (and (pair? x) (eq? (car x) ’+))) • 加数は、和のリストの⼆つ⽬の項である。 (define (addend s) (cadr s)) • 被加数は、和のリストの三つ⽬の項である。 (define (augend s) (caddr s)) 例 (+ x 3) この場合だと、先頭が+で、2 番⽬が x で、3 番⽬が 3 ということです。 [12/ 27]
13.
手続きの説明 (3) • 積は、最初の要素が記号
* であるリストである。 (define (product? x) (and (pair? x) (eq? (car x) ’*))) • 乗数は、積のリストの⼆つ⽬の項である。 (define (multiplier p) (cadr p)) • 被乗数は、積のリストの三つ⽬の項である。 (define (multiplicand p) (caddr p)) 例 (* (* x y) (+ x 3)) この場合だと、先頭が*で、2 番⽬が (* x y) で、3 番⽬が (+ x 3) とい うことです。 [13/ 27]
14.
こんな感じで動作します (2) 改良前の構築手続きで f
(x) = xy(x + 3) を x で微分するとどうなるかと いうと... gosh > (deriv ’(* (* x y) (+ x 3)) ’x) (+ (* (* x y) (+ 1 0)) (* (+ (* x 0) (* 1 y)) (+ x 3))) なんだかよくわかりません。でも和の微分と積の微分がわかれば一応 ちゃんとやっているんだということがわかります。 公式 和の微分の公式 {f (x) + g(x)} = f (x) + g (x) 公式 積の微分の公式 {f (x)g(x)} = f (x)g(x) + f (x)g (x) [14/ 27]
15.
こんな感じで動作します (3) f (x)
= xy、g(x) = x + 3 とすると、f (x) = y、g (x) = 1 となります。 したがって、{f (x)g(x)} = y × (x + 3) + xy × 1 です。 ここでもう一回さっきの実行結果を見てみるとわかります。 gosh > (deriv ’(* (* x y) (+ x 3)) ’x) (+ (* (* x y) (+ 1 0)) (* (+ (* x 0) (* 1 y)) (+ x 3))) g (x) が x の微分と 3 の微分の和で (+ 1 0) と書かれているんですね。 f (x) は xy をまた積の微分しているんです。x × y + x × y になるので、 (+ (* x 0) (* 1 y)) になってます。(y = 0、x = 1 です。) [15/ 27]
16.
和と積の構築手続きの改良版を使うと 和と積の構築手続きの改良版を使うと gosh > (deriv
’(* (* x y) (+ x 3)) ’x) (+ (* x y) (* y (+ x 3))) と少しましになります。それでもなんか変な感じなので、付け足しの説 明をします。 f (x) = xy(x + 3) を x で微分すると df (x) dx = xy + y(x + 3) になります。 というのが上の手続きの結果です。 元の式を展開してから微分してみましょう。 xy(x + 3) を展開すると x2y + 3xy になります。これを x で微分すると 2xy + 3y です。 このほうがわかりやすいですよね。でもこの式は xy + y(x + 3) と書け ます。 だから deriv 関数はちゃんと微分しているんです。 実は微分よりも式を簡単に (人間にわかりやすく) するのが難しいという ことです。 [16/ 27]
17.
和の構築手続きの改良版 (define (make-sum a1
a2) (cond (( =number? a1 0) a2) (( =number? a2 0) a1) ((and (number? a1) (number? a2)) (+ a1 a2)) (else (list ’+ a1 a2 )))) こんな感じでどちらかが 0 だったら、もう片方を返します。 両方とも数だったら、計算しちゃいます。 どちらも変数 (シンボル) だったら、S 式の数式表現を作って返します。 あと、数値の時だけ、等しいかどうか調べる述語を使ってます。 (define (=number? exp num) (and (number? exp) (= exp num ))) [17/ 27]
18.
積の構築手続きの改良版 (define (make-product m1
m2) (cond ((or (=number? m1 0) (=number? m2 0)) 0) (( =number? m1 1) m2) (( =number? m2 1) m1) ((and (number? m1) (number? m2)) (* m1 m2)) (else (list ’* m1 m2 )))) これも和のほうと考えは同じです。どちらかが 0 だったら、もう 0 を返 していいですよね。 あとはどっちかが 1 だったら、もう片方を返すし、どちらも数だったら 計算しちゃいます。 どっちも変数 (シンボル) のときには、S 式の数式表現を作って返します。 [18/ 27]
19.
べき乗の微分を追加する (1) SICP の練習問題
2.56 にあるのですが、べき乗の微分を追加してみま しょう (ax を x で微分するのではなく、xn を x で微分するやつです) 公式 べき乗の微分の公式 (xn) = nxn−1 べき乗の演算子を「**」にします。 (define (exponentiation? exp) ;; 先 頭 が ** (and (pair? exp) (eq? (car exp) ’**))) (define (make-exponent a1 a2) (cond (( =number? a1 0) 1) ;; 簡 単 化 規 則 (1) (( =number? a2 1) a1);; 簡 単 化 規 則 (2) (else (list ’** a1 a2 )))) [19/ 27]
20.
べき乗の微分を追加する (2) (define (exponent
exp) ;; 指 数 部 を 取 り 出 す (caddr exp)) (define (base exp) ;; 基 数 部 を 取 り 出 す (cadr exp)) あとは deriv 関数に以下の処理を加えます。 (( exponentiation? exp) (make-product (make-product (exponent exp) ;; 指 数 部 (n) が 前 に 出 る (make-exponent (base exp) (- (exponent exp) 1))) ;; 指 数 部 は 1 を 引 く (deriv (base exp) var ))) ;; 基 数 部 も 微 分 [20/ 27]
21.
べき乗の微分を追加する (3) べき乗の処理を加えた deriv
関数 (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 )))) (( exponentiation? exp) ;; べ き 乗 の 処 理 (make-product (make-product (exponent exp) ;; 指 数 部 (n) が 前 に 出 る ( make-exponent (base exp) (- (exponent exp) 1))) ;; 指 数 部 は 1 を 引 く (deriv (base exp) var ))) ;; 基 数 部 も 微 分 (else ;; そ れ 以 外 は エ ラ ー で す (error "unknown␣expression␣type␣--␣DERIV" exp )))) こんなの括弧が見えなくなれば python ですよね もう皆さんはだいぶ括弧が見えなくなっていますよね [21/ 27]
22.
べき乗の微分の実行結果 gosh > (deriv
’(** x 2) ’x) (* 2 x) ;; f (x) = x2 を 微 分 す る と 、 df (x) dx = 2x gosh > (deriv ’(** x 3) ’x) (* 3 (** x 2)) ;; f (x) = x3 を 微 分 す る と 、 df (x) dx = 3x2 [22/ 27]
23.
まとめ 記号微分は Lisp だと原理的にはこんなに簡単 べき乗のサポートでもわかるとおり、SICP
のプログラミングプロセ スは抽象化がメイン 抽象化を進めた関数でプログラミングをしておくと拡張がきれい 抽象化は非常に強力な考え方で、SICP でマスターできるとてもよい もの 抽象化は SICP を勉強しなくてもマスターしたほうがいい しかし記号微分の拡張というのは、ある程度の範囲に収まるからき れいに書けたのかもしれない (顧客要望でとんでもない拡張をする必 要はたぶんない) 結局きれいなプログラムというのはその問題をよくわかっている、 あるいはとんでもない要望がない、からできるものではないか? [23/ 27]
24.
Maxima と Common
Lisp と iMaxima(1) Maxima は有名な数式処理ソフト (Common Lisp で書かれています) iMaxima は Emacs 用のモード 出力を LATEX に通して画像にしている のできれい 入力は Maxima のまま 数値計算もグラフも使える 電卓を使うのをやめて、Maxima か表 計算ソフトを使おう 計算式は一部「計算機基礎 A - Maxima 入門 (2)」より引用しました。 iMaxima http://www.cc.kyoto-su. ac.jp/~mtkg/lecture/comp_ A/2012/maxima_02.html [24/ 27]
25.
Maxima と Common
Lisp と iMaxima(2) iMaxima コンソールの Maxima これは iMaxima の機能ではなく、 Maxima 自体の機能だと思います が、gnuplot に通してグラフも描 画できます。 -8 -6 -4 -2 0 2 4 6 8 -8 -6 -4 -2 0 2 4 6 8 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 sin(sqrt(y2 +x2 ))/sqrt(y2 +x2 ) x y z 例は「数式処理ソフト Maxima」 http://www.kn-makkun.com/ MakkunWp/maxima.html より引用 しました。 [25/ 27]
26.
iPad の MathStudio
の紹介 iPhone/iPad に MathStudio という数学アプリがあります もちろん微分もできます グラフも描画できます。おもし ろいのはグリグリ動かせるんで すよね [26/ 27]
27.
SICP すばらしい教科書・入門書 日本語の翻訳もいいのが手に入る http://vocrf.net/docs_ja/jsicp.pdf 練習問題を解かないと価値がすごく下 がる 時間のあるとき (大学生のときとかね) にやっといたほうがいい本だと思い ます [27/ 27]
Download now