<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://orsj-ml.org/orwiki/wiki/index.php?action=history&amp;feed=atom&amp;title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B</id>
	<title>《高速微分法》 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://orsj-ml.org/orwiki/wiki/index.php?action=history&amp;feed=atom&amp;title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B"/>
	<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;action=history"/>
	<updated>2026-04-10T02:50:50Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=7769&amp;oldid=prev</id>
		<title>2007年8月6日 (月) 16:49にKuwashimaによる</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=7769&amp;oldid=prev"/>
		<updated>2007-08-06T16:49:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年8月6日 (月) 16:49時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l82&quot; &gt;82行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;82行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[2]久保田光一, 伊理正夫, 『アルゴリズムの自動微分と応用』, コロナ社, 1998.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[2]久保田光一, 伊理正夫, 『アルゴリズムの自動微分と応用』, コロナ社, 1998.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:非線形計画|こうそくびぶんほう]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kuwashima</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=7729&amp;oldid=prev</id>
		<title>2007年8月6日 (月) 14:41にTetsuyatominagaによる</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=7729&amp;oldid=prev"/>
		<updated>2007-08-06T14:41:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年8月6日 (月) 14:41時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l79&quot; &gt;79行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;79行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''参考文献'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''参考文献'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[1] M. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Berz&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;C&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Bischof&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;G&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Corliss &lt;/del&gt;and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;A&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Griewank&lt;/del&gt;, ''&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Computational &lt;/del&gt;Differentiation: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Techniques&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Applications&lt;/del&gt;, and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Tools&lt;/del&gt;'', &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;SIAM&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1996&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[1] M.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Bucker&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;G.Corliss, P&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Hovland&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;U&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Naumann, &lt;/ins&gt;and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;B.Norris (eds&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;)&lt;/ins&gt;, ''&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Automatic &lt;/ins&gt;Differentiation: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Applications&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Theory&lt;/ins&gt;, and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Implementations&lt;/ins&gt;'', &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Lecture Notes in Computational Science and Engineering, Springer, Vol.50&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2006&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[2]久保田光一, 伊理正夫, 『アルゴリズムの自動微分と応用』, コロナ社, 1998.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[2]久保田光一, 伊理正夫, 『アルゴリズムの自動微分と応用』, コロナ社, 1998.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tetsuyatominaga</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=5777&amp;oldid=prev</id>
		<title>Orsjwiki: &quot;《高速微分法》&quot; を保護しました。 [edit=sysop:move=sysop]</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=5777&amp;oldid=prev"/>
		<updated>2007-07-19T12:59:49Z</updated>

		<summary type="html">&lt;p&gt;&amp;quot;《高速微分法》&amp;quot; を保護しました。 [edit=sysop:move=sysop]&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年7月19日 (木) 12:59時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Orsjwiki</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=4779&amp;oldid=prev</id>
		<title>2007年7月14日 (土) 15:23に220.104.197.230による</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=4779&amp;oldid=prev"/>
		<updated>2007-07-14T15:23:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;amp;diff=4779&amp;amp;oldid=1680&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>220.104.197.230</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=1680&amp;oldid=prev</id>
		<title>Orsjwiki: 新しいページ: ''''【こうそくびぶんほう (fast differentiation)】'''  　非線形関数の勾配, ヤコビ行列, ヘッセ行列等の値を数値的に計算する方...'</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E9%AB%98%E9%80%9F%E5%BE%AE%E5%88%86%E6%B3%95%E3%80%8B&amp;diff=1680&amp;oldid=prev"/>
		<updated>2007-07-03T08:08:33Z</updated>

		<summary type="html">&lt;p&gt;新しいページ: &amp;#039;&amp;#039;&amp;#039;&amp;#039;【こうそくびぶんほう (fast differentiation)】&amp;#039;&amp;#039;&amp;#039;  　非線形関数の&lt;a href=&quot;/orwiki/wiki/index.php?title=%E5%8B%BE%E9%85%8D&quot; title=&quot;勾配&quot;&gt;勾配&lt;/a&gt;, &lt;a href=&quot;/orwiki/wiki/index.php?title=%E3%83%A4%E3%82%B3%E3%83%93%E8%A1%8C%E5%88%97&quot; title=&quot;ヤコビ行列&quot;&gt;ヤコビ行列&lt;/a&gt;, &lt;a href=&quot;/orwiki/wiki/index.php?title=%E3%83%98%E3%83%83%E3%82%BB%E8%A1%8C%E5%88%97&quot; title=&quot;ヘッセ行列&quot;&gt;ヘッセ行列&lt;/a&gt;等の値を数値的に計算する方...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''【こうそくびぶんほう (fast differentiation)】'''&lt;br /&gt;
&lt;br /&gt;
　非線形関数の[[勾配]], [[ヤコビ行列]], [[ヘッセ行列]]等の値を数値的に計算する方法のひとつ. 高速自動微分法(fast automatic differentiation), 計算微分法(computational differentiation), 単純に自動微分(automatic differentiation; 以下 AD)ともいう. 主なアルゴリズムは2種あり, ボトムアップ(前進)自動微分(bottom-up AD, forward AD; 以下 BUAD) と, トップダウン(逆行)自動微分(top-down AD, reverse AD, backward AD; 以下 TDAD) という [1, 2]. 高速微分法は狭義には, TDADを指す. AD は「関数の値を計算するプログラム」から「偏導関数の値を計算するプログラム」を生成する手順を与え, 生成物を(コンパイルし)実行すれば, 差分商近似のような打ち切り誤差無しで, 正確な偏導関数の値を計算できる. 大規模システムの数学モデル等の大規模プログラム(数千行以上)により表現される関数の偏導関数を計算できるのが特長. &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt;変数関数の勾配の&amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt;個の値を関数計算の手間の定数倍で計算できる点が「高速」微分の由来である. &lt;br /&gt;
&lt;br /&gt;
　以下，BUAD と TDAD による計算法を説明する．例として，2変数関数 &amp;lt;math&amp;gt;f(x,y)=x/\sqrt{x^2+y}&amp;lt;/math&amp;gt; について, &amp;lt;math&amp;gt;f(3,4)\,&amp;lt;/math&amp;gt; の値を計算する代入文の列(プログラム), &amp;lt;math&amp;gt;x=3, y=4, v_1=x, v_2=y, v_3=v_1*v_1, v_4=v_3+v_2, v_5=\sqrt{v_4}, v_6=v_1/v_5&amp;lt;/math&amp;gt; を考えよう. ただし, 各代入文の右辺には, 演算(基本演算とよぶ)が高々1回だけ現れるとする. &amp;lt;math&amp;gt;v_1\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;v_2\,&amp;lt;/math&amp;gt; が &amp;lt;math&amp;gt;x\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y\,&amp;lt;/math&amp;gt; に対応し, &amp;lt;math&amp;gt;v_6\,&amp;lt;/math&amp;gt; に &amp;lt;math&amp;gt;f(x,y)\,&amp;lt;/math&amp;gt; の値が計算される. 一般には, &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt;変数関数 &amp;lt;math&amp;gt;f(x_1,\cdots,x_n)&amp;lt;/math&amp;gt; について, &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;回目の代入文には, &amp;lt;math&amp;gt;k-1\,&amp;lt;/math&amp;gt;回目までに計算される変数が現れうるから, 延べ &amp;lt;math&amp;gt;r\,&amp;lt;/math&amp;gt; 回の演算を行なう代入文の列は&amp;lt;math&amp;gt;\{v_k=\varphi_k(v_1,\cdots,v_{k-1})\}_{k=1}^r&amp;lt;/math&amp;gt;と表される. これを計算過程といい, &amp;lt;math&amp;gt;v_k\,&amp;lt;/math&amp;gt; を中間変数という. &amp;lt;math&amp;gt;k\leq n&amp;lt;/math&amp;gt; のとき &amp;lt;math&amp;gt;\varphi_k&amp;lt;/math&amp;gt; は&amp;lt;math&amp;gt;v_k=x_k&amp;lt;/math&amp;gt; という入力定数の代入演算に相当する.&lt;br /&gt;
&lt;br /&gt;
　BUADは, 補助変数 &amp;lt;math&amp;gt;\{s_k\}_{k=1}^r&amp;lt;/math&amp;gt; を導入し, 任意に &amp;lt;math&amp;gt;j\,&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(1\leq j\leq n)&amp;lt;/math&amp;gt;を固定して, 合成関数の&amp;lt;math&amp;gt;x_j\,&amp;lt;/math&amp;gt; に関する偏微分則 &amp;lt;math&amp;gt;{\partial v_k}/{\partial x_j} = \sum_{i=1}^{k-1}({\partial \varphi_k}/{\partial v_i})\cdot({\partial v_i}/{\partial x_j})&amp;lt;/math&amp;gt; に基づき, &amp;lt;math&amp;gt;s_k\,&amp;lt;/math&amp;gt; を計算する式を導出する. 基本演算 &amp;lt;math&amp;gt;\varphi_k&amp;lt;/math&amp;gt; を四則演算や初等関数などの2項・単項の演算に限れば, 表1により, &amp;lt;math&amp;gt;{\partial \varphi_k}/{\partial v_i}&amp;lt;/math&amp;gt; (これを要素的偏導関数という)を導出できる. &amp;lt;math&amp;gt;s_j=1\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_\ell=0&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(1\leq\ell\leq n, \ell\not=j)&amp;lt;/math&amp;gt; と初期設定すれば, &amp;lt;math&amp;gt;k=n+1\,, n+2\,, \cdots&amp;lt;/math&amp;gt; について&amp;lt;math&amp;gt;s_i=\partial v_i/\partial x_j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(i=1,\cdots,k-1)&amp;lt;/math&amp;gt;を計算済みとみなすことができ, &amp;lt;math&amp;gt;s_k=\sum_{i=1}^{k-1}({\partial \varphi_k}/{\partial v_i})\cdot s_i&amp;lt;/math&amp;gt; の値を計算できる. 最終的に &amp;lt;math&amp;gt;s_r=\partial f/\partial x_j&amp;lt;/math&amp;gt; となる. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;600&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;表１：基本演算と要素的偏導関数&amp;lt;br&amp;gt;&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;table width=&amp;quot;200&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varphi_k&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\partial \varphi_k/ v_\alpha&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\partial \varphi_k/ v_\beta&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_k=v_\alpha \pm v_\beta\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;1\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\pm1&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_k=v_\alpha * v_\beta\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_\beta\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_\alpha\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_k=v_\alpha / v_\beta\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;1/v_\beta\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;-v_\alpha/({v_\beta}^2)\, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
					&amp;lt;p&amp;gt;&amp;lt;math&amp;gt;(=-v_k/v_\beta)\, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
					&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;table width=&amp;quot;200&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\varphi_k\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\partial \varphi_k/ v_\alpha\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_k=\exp(v_\alpha)\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;\exp(v_\alpha)\,\,(=v_k)&amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_k=\log(v_\alpha)\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;1/v_\alpha\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
			&amp;lt;tr&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;v_k=\sqrt{v_\alpha}\, &amp;lt;/math&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;&amp;gt;&amp;lt;math&amp;gt;1/(2\sqrt{v_\alpha})\, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
					&amp;lt;p&amp;gt;&amp;lt;math&amp;gt;(=0.5/v_k)\, &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
					&amp;lt;/p&amp;gt;&lt;br /&gt;
				&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;/tr&amp;gt;&lt;br /&gt;
		&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
　先の例では, &amp;lt;math&amp;gt;\partial v_1/\partial x=1, \partial v_2/\partial x=0&amp;lt;/math&amp;gt; に注意して, &amp;lt;math&amp;gt;s_1=1\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_2=0\,&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_3=2*v_1*s_1\, &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_4=s_3+s_2\, &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_5=0.5/v_5*s_4\, &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_6=(1/v_5)*s_1+(-v_6/v_5)*s_5\, &amp;lt;/math&amp;gt; という代入文の列を生成する. これを実行すると &amp;lt;math&amp;gt;s_6\,&amp;lt;/math&amp;gt; には &amp;lt;math&amp;gt;(\partial f/\partial x)(3,4)\, &amp;lt;/math&amp;gt; の値が計算される(&amp;lt;math&amp;gt;v_k\,&amp;lt;/math&amp;gt; の計算の直後に &amp;lt;math&amp;gt;s_k\,&amp;lt;/math&amp;gt; を計算してもよい). 高々2項までの基本演算だけ使用するという条件の下では, BUADの手間は &amp;lt;math&amp;gt;\mbox{O}(r)\, &amp;lt;/math&amp;gt; である. &amp;lt;math&amp;gt;s_1=0\, &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;s_2=1\, &amp;lt;/math&amp;gt; と一部変更し, もう一度計算すれば, &amp;lt;math&amp;gt;s_6\,&amp;lt;/math&amp;gt; には, &amp;lt;math&amp;gt;(\partial f/\partial y)(3,4)&amp;lt;/math&amp;gt; の値が計算される. &amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt;変数関数の勾配を計算するには, 同様の計算を &amp;lt;math&amp;gt;n\, &amp;lt;/math&amp;gt;回繰り返す必要がある. &lt;br /&gt;
&lt;br /&gt;
　TDADはこれとは異なり, 先の計算過程を &amp;lt;math&amp;gt;\{-v_k+\varphi_k(v_1,\cdots,v_{k-1})=0\}_{k=1}^r&amp;lt;/math&amp;gt; と書き直し, これらを &amp;lt;math&amp;gt;v_1, \cdots, v_r&amp;lt;/math&amp;gt; に関する制約式とみなす. この制約の下で, &amp;lt;math&amp;gt;v_r\,&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;f\,&amp;lt;/math&amp;gt;の値) の停留点を考える. ラグランジュ関数&amp;lt;math&amp;gt;L(v_1,\cdots,v_r; \lambda_1,\cdots,\lambda_r)=v_r+\sum_{k=1}^r\lambda_k(-v_k+\varphi_k(v_1,\cdots,v_{k-1}))&amp;lt;/math&amp;gt; の停留点(&amp;lt;math&amp;gt;\partial L/\partial \lambda_k=0&amp;lt;/math&amp;gt; かつ&amp;lt;math&amp;gt;\partial L/\partial v_k=0&amp;lt;/math&amp;gt; が成立する点)では, ラグランジュ乗数 &amp;lt;math&amp;gt;\lambda_k\, &amp;lt;/math&amp;gt; は, &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt;番目の制約式の摂動に対する関数値 &amp;lt;math&amp;gt;v_r\,&amp;lt;/math&amp;gt; の感度を与えるが, &amp;lt;math&amp;gt;j=1,\cdots, n&amp;lt;/math&amp;gt; については&amp;lt;math&amp;gt;\lambda_j\, &amp;lt;/math&amp;gt; は &amp;lt;math&amp;gt;\partial f/\partial x_i&amp;lt;/math&amp;gt; に等しい. 入力 &amp;lt;math&amp;gt;x_1, \cdots, x_n&amp;lt;/math&amp;gt; を定めると&amp;lt;math&amp;gt;v_{1}, \cdots, v_r&amp;lt;/math&amp;gt; は一意に定まるが, &amp;lt;math&amp;gt;\lambda_k\, &amp;lt;/math&amp;gt; は連立一次方程式&amp;lt;math&amp;gt;(\partial L/\partial v_r=)1+\lambda_r\cdot (-1)=0,(\partial L/\partial v_k=)\sum_{j=k+1}^r\lambda_j\cdot(\partial\varphi_j/\partial v_k) + \lambda_k\cdot(-1)=0 (k=r-1,\cdots,1)&amp;lt;/math&amp;gt;を満たす. これを解くには, &amp;lt;math&amp;gt;\varphi_k&amp;lt;/math&amp;gt; が実質的に単項・2項演算であることを考慮すると, &amp;lt;math&amp;gt;\lambda_r\gets 1, \lambda_{r-1}\gets 0,\cdots, \lambda_1\gets 0&amp;lt;/math&amp;gt; と初期化しておき, &amp;lt;math&amp;gt;k=r-1,r-2,\cdots,1&amp;lt;/math&amp;gt; の順に &amp;lt;math&amp;gt;\lambda_i\gets\lambda_i+\lambda_k\cdot(\partial \varphi_k/\partial v_i)(i=1,\cdots,k-1)&amp;lt;/math&amp;gt; を計算する. 各 &amp;lt;math&amp;gt;k\,&amp;lt;/math&amp;gt; について高々2個の &amp;lt;math&amp;gt;i\,&amp;lt;/math&amp;gt; についてだけ計算すればよい. &lt;br /&gt;
&lt;br /&gt;
　先の例では, &amp;lt;math&amp;gt;v_1, \cdots, v_6&amp;lt;/math&amp;gt; を計算し, &amp;lt;math&amp;gt;\lambda_6=1, \lambda_5=0, \cdots, \lambda_1=0&amp;lt;/math&amp;gt; と初期化した後, &amp;lt;math&amp;gt;\lambda_1\gets\lambda_1+\lambda_6\cdot(1/v_5),&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\lambda_5\gets\lambda_5+\lambda_6\cdot(-v_6/v_5),&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\lambda_4\gets\lambda_4+\lambda_5\cdot(0.5/v_5),&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\lambda_3\gets\lambda_3+\lambda_4\cdot1,\lambda_2\gets\lambda_2+\lambda_4\cdot1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\lambda_1\gets\lambda_1+\lambda_3\cdot(2v_1)&amp;lt;/math&amp;gt; となる. 最終的に &amp;lt;math&amp;gt;\lambda_1, \lambda_2\, &amp;lt;/math&amp;gt; に &amp;lt;math&amp;gt;(\partial f/\partial x)(3,4), (\partial f/\partial y)(3,4)&amp;lt;/math&amp;gt; の値が計算される. 同じ条件の下で, TDADの手間は &amp;lt;math&amp;gt;\mbox{O}(r)\, &amp;lt;/math&amp;gt;である. 1回の計算で勾配の値は全て計算できることに注意. &lt;br /&gt;
&lt;br /&gt;
　&amp;lt;math&amp;gt;n\,&amp;lt;/math&amp;gt; 変数 &amp;lt;math&amp;gt;m\,&amp;lt;/math&amp;gt; 値関数 &amp;lt;math&amp;gt;[f_1(x_1,\cdots,x_n),\cdots,f_m(x_1,\cdots,x_n)]^{\top}&amp;lt;/math&amp;gt; について, 全成分の値を計算するのに延べ &amp;lt;math&amp;gt;r\,&amp;lt;/math&amp;gt; 回の基本演算を実行したとする. ヤコビ行列 &amp;lt;math&amp;gt;J=(\partial f_i/\partial x_j)\, &amp;lt;/math&amp;gt; の列の線形結合はBUADで, 行についてはTDADで &amp;lt;math&amp;gt;\mbox{O}(r)\, &amp;lt;/math&amp;gt;の手間で計算できる. 全成分については BUADでは &amp;lt;math&amp;gt;\mbox{O}(nr)\, &amp;lt;/math&amp;gt;, TDAD では &amp;lt;math&amp;gt;\mbox{O}(mr)\, &amp;lt;/math&amp;gt; である. &lt;br /&gt;
&lt;br /&gt;
　実際には, 基本演算は表1に限らず, 代入文(やその列)を一つの基本演算とみなしてよい. また, プログラム中に条件分岐があっても, 与えられた入力値に関する関数の合成は上記の形で書けるから, ADを適用できる. ただし, 分岐の境目では, ADの結果は, 真の偏導関数値と異なることがある. たとえば, &amp;lt;math&amp;gt;\mbox{if(x=1.0)}\{\mbox{y=x*x}\}\mbox{else}\{\mbox{y=1.0}\}\, &amp;lt;/math&amp;gt;の様なプログラムを自動微分すると, &amp;lt;math&amp;gt;x\,&amp;lt;/math&amp;gt; の値が1.0 のときには不具合が起こりうるので注意が必要である. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''参考文献'''&lt;br /&gt;
&lt;br /&gt;
[1] M. Berz, C. Bischof, G. Corliss and A. Griewank, ''Computational Differentiation: Techniques, Applications, and Tools'', SIAM, 1996.&lt;br /&gt;
&lt;br /&gt;
[2]久保田光一, 伊理正夫, 『アルゴリズムの自動微分と応用』, コロナ社, 1998.&lt;/div&gt;</summary>
		<author><name>Orsjwiki</name></author>
	</entry>
</feed>